[][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 jsonrpc-core types for convenience.

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 stdin and stdout.

Enums

Incoming

An incoming JSON-RPC message.

Traits

LanguageServer

Trait implemented by language server backends.

Attribute Macros

async_trait

A re-export of async-trait for convenience.