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