[−][src]Crate tower_lsp
Language Server Protocol (LSP) server abstraction for Tower.
Example
use tower_lsp::jsonrpc::Result; use tower_lsp::lsp_types::*; use tower_lsp::{LanguageServer, LspService, Client, Server}; #[derive(Debug, Default)] struct Backend; #[tower_lsp::async_trait] impl LanguageServer for Backend { fn initialize(&self, _: &Client, _: InitializeParams) -> Result<InitializeResult> { Ok(InitializeResult::default()) } async fn initialized(&self, client: &Client, _: InitializedParams) { client.log_message(MessageType::Info, "server initialized!"); } 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, _: TextDocumentPositionParams) -> 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(Backend::default()); Server::new(stdin, stdout) .interleave(messages) .serve(service) .await; }
Re-exports
pub extern crate lsp_types; |
Modules
jsonrpc | Re-exports of common |
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 |
Enums
Incoming | An incoming JSON-RPC message. |
Traits
LanguageServer | Trait implemented by language server backends. |
Attribute Macros
async_trait | A re-export of |