#language-server-protocol #tower-lsp #deno #client #initialized

deno_tower_lsp

This is a fork of https://crates.io/crates/tower-lsp, used in Deno. At the moment only floating patches.

5 releases (3 breaking)

0.4.3 Feb 25, 2025
0.4.2 Feb 21, 2025
0.3.0 Feb 12, 2025
0.2.0 Feb 10, 2025
0.1.0 Aug 23, 2024

#106 in Text editors

Download history 1049/week @ 2024-12-15 703/week @ 2024-12-22 768/week @ 2024-12-29 1044/week @ 2025-01-05 1490/week @ 2025-01-12 1335/week @ 2025-01-19 1004/week @ 2025-01-26 925/week @ 2025-02-02 1195/week @ 2025-02-09 1308/week @ 2025-02-16 1115/week @ 2025-02-23 798/week @ 2025-03-02 781/week @ 2025-03-09 969/week @ 2025-03-16 882/week @ 2025-03-23 1172/week @ 2025-03-30

3,888 downloads per month
Used in 5 crates (3 directly)

MIT license

215KB
3.5K SLoC

Language Server Protocol (LSP) server abstraction for Tower.

Example

use deno_tower_lsp::jsonrpc::Result;
use deno_tower_lsp::lsp_types::*;
use deno_tower_lsp::{Client, LanguageServer, LspService, Server};
use deno_tower_lsp::CancellationToken;

#[derive(Debug)]
struct Backend {
    client: Client,
}

#[deno_tower_lsp::async_trait(?Send)]
impl LanguageServer for Backend {
    async fn initialize(&self, _: InitializeParams) -> Result<InitializeResult> {
        Ok(InitializeResult {
            capabilities: ServerCapabilities {
                hover_provider: Some(HoverProviderCapability::Simple(true)),
                completion_provider: Some(CompletionOptions::default()),
                ..Default::default()
            },
            ..Default::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, _token: CancellationToken) -> 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, _token: CancellationToken) -> 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, socket, pending) = LspService::new(|client| Backend { client });
    Server::new(stdin, stdout, socket, pending).serve(service).await;
}

This is a fork of https://crates.io/crates/tower-lsp, used in Deno. At the moment only floating patches.

Dependencies

~6–14MB
~149K SLoC