Crate tower_lsp[−][src]
Expand description
Language Server Protocol (LSP) server abstraction for Tower.
Example
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> { Ok(InitializeResult::default()) } async fn initialized(&self, _: InitializedParams) { self.client .log_message(MessageType::Info, "server initialized!") .await; } async fn shutdown(&self) -> Result<()> { Ok(()) } async fn completion(&self, _: CompletionParams) -> Result<Option<CompletionResponse>> { Ok(Some(CompletionResponse::Array(vec![ CompletionItem::new_simple("Hello".to_string(), "Some detail".to_string()), CompletionItem::new_simple("Bye".to_string(), "More detail".to_string()) ]))) } async fn hover(&self, _: HoverParams) -> Result<Option<Hover>> { Ok(Some(Hover { contents: HoverContents::Scalar( MarkedString::String("You're hovering!".to_string()) ), range: None })) } } #[tokio::main] async fn main() { 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; }
Re-exports
pub extern crate lsp_types; |
Modules
jsonrpc | A subset of JSON-RPC types used by the Language Server Protocol. |
Structs
Client | Handle for communicating with the language client. |
ExitedError | Error that occurs when attempting to call the language server after it has already exited. |
LspService | Service abstraction for the Language Server Protocol. |
MessageStream | Stream of messages produced by the language server. |
Server | Server for processing requests and responses on standard I/O or TCP. |
Traits
LanguageServer | Trait implemented by language server backends. |
Attribute Macros
async_trait | A re-export of |