29 个版本 (19 个重大更新)

0.20.0 2023 年 8 月 11 日
0.19.0 2023 年 2 月 28 日
0.18.0 2023 年 1 月 15 日
0.17.0 2022 年 4 月 15 日
0.4.0 2019 年 10 月 2 日

文本编辑器 中排名 #4

Download history 13391/week @ 2024-04-22 13258/week @ 2024-04-29 14333/week @ 2024-05-06 15004/week @ 2024-05-13 15624/week @ 2024-05-20 14328/week @ 2024-05-27 15828/week @ 2024-06-03 15091/week @ 2024-06-10 18832/week @ 2024-06-17 17632/week @ 2024-06-24 14272/week @ 2024-07-01 15018/week @ 2024-07-08 14472/week @ 2024-07-15 15062/week @ 2024-07-22 17241/week @ 2024-07-29 16107/week @ 2024-08-05

每月下载量 64,072
73 crate 中使用(直接使用 63 个)

MIT/Apache

195KB
3K SLoC

tower-lsp

Build Status Crates.io Documentation

语言服务器协议 的 Rust 实现,基于 Tower

Tower 是一个简单的、可组合的框架,用于在 Rust 中实现异步服务。Tower 的核心是 Service trait,它提供了定义请求/响应客户端和服务器所需的高级抽象。使用 Service trait 实现的协议示例包括用于 HTTP 的 hyper 和用于 gRPC 的 tonic

此库(tower-lsp)提供了一个简单的语言服务器协议(LSP)实现,使编写自己的语言服务器变得容易。它由三部分组成

  • 定义您的语言服务器行为的 LanguageServer trait。
  • 包装您的语言服务器实现的异步 LspService 委托,定义协议的行为。
  • 一个 Server,它启动 LspService 并通过 stdio 或 TCP 处理请求和响应。

示例

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(())
    }
}

#[tokio::main]
async fn main() {
    let stdin = tokio::io::stdin();
    let stdout = tokio::io::stdout();

    let (service, socket) = LspService::new(|client| Backend { client });
    Server::new(stdin, stdout, socket).serve(service).await;
}

使用 tokio 之外的其他运行时

默认情况下,tower-lsp 配置为与 tokio 一起使用。

要使用其他运行时与 tower-lsp 一起使用,需要禁用 default-features 并启用 runtime-agnostic 功能

[dependencies.tower-lsp]
version = "*"
default-features = false
features = ["runtime-agnostic"]

使用建议功能

您可以通过启用 proposed Cargo crate 功能来使用 LSP 规范版本 3.18 中的建议功能。请注意,对于 proposed 功能没有 semver 保证,因此在 proposed 功能中的任何类型版本之间都可能存在破坏性更改。

生态系统

许可证

tower-lsp是免费的开源软件,根据MIT或Apache 2.0许可证条款分发,您可自行选择。

除非您明确声明,否则您有意提交的任何贡献,根据Apache-2.0许可证的定义,将根据上述条款双重许可,不附加任何额外的条款或条件。

依赖项

~5–13MB
~165K SLoC