lsp server test

This commit is contained in:
2024-06-03 13:25:41 +02:00
parent e048e0e10c
commit 0b513c49c3
+57
View File
@@ -0,0 +1,57 @@
use lspower::jsonrpc::Result;
use lspower::lsp::{self, *};
use lspower::{Client, LanguageServer, LspService, Server};
use lspower;
#[derive(Debug)]
struct Backend {
client: Client,
}
#[lspower::async_trait]
impl LanguageServer for Backend {
async fn initialize(&self, _: InitializeParams) -> Result<InitializeResult> {
// Ok(InitializeResult::default())
Ok(InitializeResult {
capabilities: ServerCapabilities {
completion_provider: Some(CompletionOptions {
trigger_characters: vec!["::".to_string()].into(),
..CompletionOptions::default()
}),
..ServerCapabilities::default()
},
..InitializeResult::default()
})
}
async fn initialized(&self, _: InitializedParams) {
self.client
.log_message(MessageType::INFO, "Wyst LSP initialized!")
.await;
}
async fn completion(
&self,
_params: lsp::CompletionParams,
) -> lspower::jsonrpc::Result<Option<lsp::CompletionResponse>> {
Ok(Some(CompletionResponse::Array(vec![
CompletionItem::new_simple("mylabel".to_string(), "mydetail".to_string())
])))
}
async fn shutdown(&self) -> Result<()> {
Ok(())
}
}
#[tokio::main]
pub async fn run_lsp_server() {
let stdin = tokio::io::stdin();
let stdout = tokio::io::stdout();
let (service, messages) = LspService::new(|client| Backend { client });
Server::new(stdin, stdout)
.interleave(messages)
.serve(service)
.await;
}