Files
mist/analyzer/src/lib.rs
T
2026-05-20 10:17:14 +02:00

57 lines
1.6 KiB
Rust

use tower_lsp::jsonrpc::Result;
use tower_lsp::lsp_types::*;
use tower_lsp::{Client, LanguageServer, LspService, Server};
#[derive(Debug)]
struct Backend {
client: Client,
}
#[tower_lsp::async_trait]
impl LanguageServer for Backend {
async fn initialize(&self, _: InitializeParams) -> Result<InitializeResult> {
let mut res = InitializeResult::default();
res.capabilities.completion_provider = Some(CompletionOptions {
resolve_provider: None,
trigger_characters: None,
all_commit_characters: None,
work_done_progress_options: WorkDoneProgressOptions {
work_done_progress: None,
},
completion_item: None,
});
Ok(res)
}
async fn initialized(&self, _: InitializedParams) {
self.client
.log_message(MessageType::INFO, "server initialized!")
.await;
}
async fn completion(&self, params: CompletionParams) -> Result<Option<CompletionResponse>> {
self.client
.log_message(MessageType::INFO, "getting completion")
.await;
Ok(Some(CompletionResponse::Array(vec![
CompletionItem::new_simple("new".to_string(), "The new keyword".to_string()),
])))
}
async fn shutdown(&self) -> Result<()> {
Ok(())
}
}
#[tokio::main]
pub async fn start() {
let stdin = tokio::io::stdin();
let stdout = tokio::io::stdout();
let (service, socket) = LspService::new(|client| Backend { client });
Server::new(stdin, stdout, socket).serve(service).await;
}