8个重大版本

0.9.0 2023年8月11日
0.8.0 2023年2月28日
0.7.0 2023年1月15日
0.6.0 2022年3月11日
0.3.0 2020年8月20日

#770过程宏

Download history 12514/week @ 2024-03-14 13394/week @ 2024-03-21 13181/week @ 2024-03-28 14525/week @ 2024-04-04 14870/week @ 2024-04-11 12553/week @ 2024-04-18 13083/week @ 2024-04-25 14807/week @ 2024-05-02 14074/week @ 2024-05-09 15641/week @ 2024-05-16 14815/week @ 2024-05-23 15481/week @ 2024-05-30 14836/week @ 2024-06-06 16813/week @ 2024-06-13 18821/week @ 2024-06-20 13664/week @ 2024-06-27

67,095 每月下载量
用于 74 个Crates(2个直接使用)

MIT/Apache

9KB
144

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"]

使用提议的功能

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

生态系统

  • tower-lsp-boilerplate - 一个有用的 GitHub 项目模板,可以简化编写新的语言服务器。

许可证

tower-lsp 是免费和开源软件,根据您的选择,在 MITApache 2.0 许可证下分发。

除非您明确说明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献,将按上述方式双重许可,不附加任何其他条款或条件。


lib.rs:

tower-lsp 的内部过程宏。

这个crate不应该被直接使用。

依赖项

~295–750KB
~18K SLoC