dart.rs

 1use anyhow::{anyhow, Result};
 2use async_trait::async_trait;
 3use gpui::AppContext;
 4use language::{LanguageServerName, LspAdapter, LspAdapterDelegate};
 5use lsp::LanguageServerBinary;
 6use project::project_settings::ProjectSettings;
 7use serde_json::Value;
 8use settings::Settings;
 9use std::{
10    any::Any,
11    path::{Path, PathBuf},
12};
13
14pub struct DartLanguageServer;
15
16#[async_trait(?Send)]
17impl LspAdapter for DartLanguageServer {
18    fn name(&self) -> LanguageServerName {
19        LanguageServerName("dart".into())
20    }
21
22    async fn fetch_latest_server_version(
23        &self,
24        _: &dyn LspAdapterDelegate,
25    ) -> Result<Box<dyn 'static + Send + Any>> {
26        Ok(Box::new(()))
27    }
28
29    async fn fetch_server_binary(
30        &self,
31        _: Box<dyn 'static + Send + Any>,
32        _: PathBuf,
33        _: &dyn LspAdapterDelegate,
34    ) -> Result<LanguageServerBinary> {
35        Err(anyhow!("dart must me installed from dart.dev/get-dart"))
36    }
37
38    async fn cached_server_binary(
39        &self,
40        _: PathBuf,
41        _: &dyn LspAdapterDelegate,
42    ) -> Option<LanguageServerBinary> {
43        Some(LanguageServerBinary {
44            path: "dart".into(),
45            env: None,
46            arguments: vec!["language-server".into(), "--protocol=lsp".into()],
47        })
48    }
49
50    fn can_be_reinstalled(&self) -> bool {
51        false
52    }
53
54    async fn installation_test_binary(&self, _: PathBuf) -> Option<LanguageServerBinary> {
55        None
56    }
57
58    fn workspace_configuration(&self, _workspace_root: &Path, cx: &mut AppContext) -> Value {
59        let settings = ProjectSettings::get_global(cx)
60            .lsp
61            .get("dart")
62            .and_then(|s| s.settings.clone())
63            .unwrap_or_default();
64
65        serde_json::json!({
66            "dart": settings
67        })
68    }
69}