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