21 个版本 (6 个稳定版)
| 1.5.0 | 2021 年 12 月 7 日 |
|---|---|
| 1.4.0 | 2021 年 11 月 22 日 |
| 1.1.0 | 2021 年 5 月 10 日 |
| 1.0.0 | 2021 年 3 月 10 日 |
| 0.2.0 | 2020 年 12 月 28 日 |
#1542 在 异步
9,100 每月下载量
在 6 个 Crates 中使用 (5 个直接使用)
190KB
3.5K SLoC
Tower 是一个用于在 Rust 中实现异步服务的简单且可组合的框架。Tower 的核心是 Service 特性,它提供了定义请求/响应客户端和服务器所需的抽象。使用 Service 特性实现的协议示例包括用于 HTTP 的 hyper 和用于 gRPC 的 tonic。
此库 (lspower) 提供了一个简单的语言服务器协议 (LSP) 实现,使得编写自己的语言服务器变得容易。它由三个部分组成
LanguageServer特性,它定义了你的语言服务器的行为。LspService代理包装你的服务器,并定义了协议。Server生成LspService并通过stdio或 TCP 处理消息。
示例
use lspower::jsonrpc::Result;
use lspower::lsp::*;
use lspower::{Client, LanguageServer, LspService, Server};
#[derive(Debug)]
struct Backend {
client: Client,
}
#[lspower::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, messages) = LspService::new(|client| Backend { client });
Server::new(stdin, stdout)
.interleave(messages)
.serve(service)
.await;
}
与 tower-lsp 的区别
lspower 是 tower-lsp crate 的分支。
这两个 crate 之间的主要区别如下
lspower目前仍在维护,而tower-lsp的开发似乎已停止lspower自分支以来已进行了几次重大重构和错误修复lspower支持当前的 LSP 规范,包括语义标记等更多功能lspower支持从服务器向客户端发送自定义请求lspower支持取消标记(以及服务器到客户端的$/cancelRequest通知)lspower不需要 要求tokio,同时也能与async-std、smol和futures一起工作lspower兼容 WASM 目标(解决:tower-lsp#187)lspower依赖更少(通过用httparse替换nom)lspower更高效地解析消息流,并最小化不必要的重新解析lspower从格式不正确的消息中恢复得更快(通过twoway加速 SIMD)
使用非 tokio 的运行时与 lspower
默认情况下,lspower 配置为与 tokio 一起使用。
要使用其他运行时与 lspower 一起使用,需要禁用 default-features 并启用 runtime-agnostic 功能
[dependencies.lspower]
version = "*"
default-features = false
features = ["runtime-agnostic"]
许可证
lspower 是免费的开放源代码软件,根据您选择的许可证,可以分别使用 MIT 或 Apache 2.0 许可证。
除非您明确表示,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,都应按上述方式双重许可,不附加任何额外条款或条件。
致谢
lspower 是 tower-lsp crate 的分支。
依赖关系
~4–7MB
~154K SLoC