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]
17impl LspAdapter for DartLanguageServer {
18    fn name(&self) -> LanguageServerName {
19        LanguageServerName("dart".into())
20    }
21
22    fn short_name(&self) -> &'static str {
23        "dart"
24    }
25
26    async fn fetch_latest_server_version(
27        &self,
28        _: &dyn LspAdapterDelegate,
29    ) -> Result<Box<dyn 'static + Send + Any>> {
30        Ok(Box::new(()))
31    }
32
33    async fn fetch_server_binary(
34        &self,
35        _: Box<dyn 'static + Send + Any>,
36        _: PathBuf,
37        _: &dyn LspAdapterDelegate,
38    ) -> Result<LanguageServerBinary> {
39        Err(anyhow!("dart must me installed from dart.dev/get-dart"))
40    }
41
42    async fn cached_server_binary(
43        &self,
44        _: PathBuf,
45        _: &dyn LspAdapterDelegate,
46    ) -> Option<LanguageServerBinary> {
47        Some(LanguageServerBinary {
48            path: "dart".into(),
49            env: None,
50            arguments: vec!["language-server".into(), "--protocol=lsp".into()],
51        })
52    }
53
54    fn can_be_reinstalled(&self) -> bool {
55        false
56    }
57
58    async fn installation_test_binary(&self, _: PathBuf) -> Option<LanguageServerBinary> {
59        None
60    }
61
62    fn workspace_configuration(&self, _workspace_root: &Path, cx: &mut AppContext) -> Value {
63        let settings = ProjectSettings::get_global(cx)
64            .lsp
65            .get("dart")
66            .and_then(|s| s.settings.clone())
67            .unwrap_or_default();
68
69        serde_json::json!({
70            "dart": settings
71        })
72    }
73}