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