nu.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 NuLanguageServer;
 8
 9#[async_trait(?Send)]
10impl LspAdapter for NuLanguageServer {
11    fn name(&self) -> LanguageServerName {
12        LanguageServerName("nu".into())
13    }
14
15    async fn fetch_latest_server_version(
16        &self,
17        _: &dyn LspAdapterDelegate,
18    ) -> Result<Box<dyn 'static + Any + Send>> {
19        Ok(Box::new(()))
20    }
21
22    async fn fetch_server_binary(
23        &self,
24        _version: Box<dyn 'static + Send + Any>,
25        _container_dir: PathBuf,
26        _: &dyn LspAdapterDelegate,
27    ) -> Result<LanguageServerBinary> {
28        Err(anyhow!(
29            "nu v0.87.0 or greater must be installed and available in your $PATH"
30        ))
31    }
32
33    async fn cached_server_binary(
34        &self,
35        _: PathBuf,
36        _: &dyn LspAdapterDelegate,
37    ) -> Option<LanguageServerBinary> {
38        Some(LanguageServerBinary {
39            path: "nu".into(),
40            env: None,
41            arguments: vec!["--lsp".into()],
42        })
43    }
44
45    fn can_be_reinstalled(&self) -> bool {
46        false
47    }
48
49    async fn installation_test_binary(&self, _: PathBuf) -> Option<LanguageServerBinary> {
50        None
51    }
52}