lsp server test
This commit is contained in:
+57
@@ -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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user