dart.rs

 1use anyhow::{anyhow, Result};
 2use async_trait::async_trait;
 3use language::{LanguageServerName, LspAdapter, LspAdapterDelegate};
 4use lsp::LanguageServerBinary;
 5use std::{any::Any, path::PathBuf};
 6
 7pub struct DartLanguageServer;
 8
 9#[async_trait]
10impl LspAdapter for DartLanguageServer {
11    fn name(&self) -> LanguageServerName {
12        LanguageServerName("dart".into())
13    }
14
15    fn short_name(&self) -> &'static str {
16        "dart"
17    }
18
19    async fn fetch_latest_server_version(
20        &self,
21        _: &dyn LspAdapterDelegate,
22    ) -> Result<Box<dyn 'static + Send + Any>> {
23        Ok(Box::new(()))
24    }
25
26    async fn fetch_server_binary(
27        &self,
28        _: Box<dyn 'static + Send + Any>,
29        _: PathBuf,
30        _: &dyn LspAdapterDelegate,
31    ) -> Result<LanguageServerBinary> {
32        Err(anyhow!("dart must me installed from dart.dev/get-dart"))
33    }
34
35    async fn cached_server_binary(
36        &self,
37        _: PathBuf,
38        _: &dyn LspAdapterDelegate,
39    ) -> Option<LanguageServerBinary> {
40        Some(LanguageServerBinary {
41            path: "dart".into(),
42            env: None,
43            arguments: vec!["language-server".into(), "--protocol=lsp".into()],
44        })
45    }
46
47    fn can_be_reinstalled(&self) -> bool {
48        false
49    }
50
51    async fn installation_test_binary(&self, _: PathBuf) -> Option<LanguageServerBinary> {
52        None
53    }
54}