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);