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}