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 HaskellLanguageServer; #[async_trait(?Send)] impl LspAdapter for HaskellLanguageServer { fn name(&self) -> LanguageServerName { LanguageServerName("hls".into()) } 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!( "hls (haskell language server) must be installed via ghcup" )) } async fn cached_server_binary( &self, _: PathBuf, _: &dyn LspAdapterDelegate, ) -> Option { Some(LanguageServerBinary { path: "haskell-language-server-wrapper".into(), env: None, arguments: vec!["lsp".into()], }) } fn can_be_reinstalled(&self) -> bool { false } async fn installation_test_binary(&self, _: PathBuf) -> Option { None } }