use anyhow::{anyhow, Result}; use async_trait::async_trait; use language::{LanguageServerName, LspAdapter, LspAdapterDelegate}; use lsp::LanguageServerBinary; use std::{any::Any, path::PathBuf}; pub struct NuLanguageServer; #[async_trait] impl LspAdapter for NuLanguageServer { fn name(&self) -> LanguageServerName { LanguageServerName("nu".into()) } fn short_name(&self) -> &'static str { "nu" } async fn fetch_latest_server_version( &self, _: &dyn LspAdapterDelegate, ) -> Result> { Ok(Box::new(())) } async fn fetch_server_binary( &self, _version: Box, _container_dir: PathBuf, _: &dyn LspAdapterDelegate, ) -> Result { Err(anyhow!( "nu v0.87.0 or greater must be installed and available in your $PATH" )) } async fn cached_server_binary( &self, _: PathBuf, _: &dyn LspAdapterDelegate, ) -> Option { Some(LanguageServerBinary { path: "nu".into(), arguments: vec!["--lsp".into()], }) } fn can_be_reinstalled(&self) -> bool { false } async fn installation_test_binary(&self, _: PathBuf) -> Option { None } }