zed_curry/
lib.rs

1use zed_extension_api::{self as zed, serde_json, settings::LspSettings};
2
3struct CurryExtension;
4
5impl zed::Extension for CurryExtension {
6    fn new() -> Self {
7        Self
8    }
9
10    fn language_server_command(
11        &mut self,
12        _language_server_id: &zed::LanguageServerId,
13        worktree: &zed::Worktree,
14    ) -> zed::Result<zed::Command> {
15        let Some(path) = worktree.which("curry-language-server") else {
16            return Err("Could not find curry-language-server on PATH".into());
17        };
18
19        Ok(zed::Command {
20            command: path,
21            args: vec![],
22            env: Default::default(),
23        })
24    }
25
26    fn language_server_workspace_configuration(
27        &mut self,
28        _language_server_id: &zed::LanguageServerId,
29        worktree: &zed::Worktree,
30    ) -> zed::Result<Option<zed::serde_json::Value>> {
31        let settings = LspSettings::for_worktree("curry-language-server", worktree)
32            .ok()
33            .and_then(|lsp_settings| lsp_settings.settings.clone())
34            .unwrap_or_default();
35
36        Ok(Some(serde_json::json!({
37            "curry": settings
38        })))
39    }
40}
41
42zed::register_extension!(CurryExtension);