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 UiuaLanguageServer; #[async_trait] impl LspAdapter for UiuaLanguageServer { fn name(&self) -> LanguageServerName { LanguageServerName("uiua".into()) } fn short_name(&self) -> &'static str { "uiua" } 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!( "uiua must be installed and available in your $PATH" )) } async fn cached_server_binary( &self, _: PathBuf, _: &dyn LspAdapterDelegate, ) -> Option { Some(LanguageServerBinary { path: "uiua".into(), arguments: vec!["lsp".into()], }) } fn can_be_reinstalled(&self) -> bool { false } async fn installation_test_binary(&self, _: PathBuf) -> Option { None } }