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 在 过程宏 中
67,095 每月下载量
用于 74 个Crates(2个直接使用)
9KB
144 行
tower-lsp
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
是免费和开源软件,根据您的选择,在 MIT 或 Apache 2.0 许可证下分发。
除非您明确说明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献,将按上述方式双重许可,不附加任何其他条款或条件。
lib.rs
:
tower-lsp
的内部过程宏。
这个crate不应该被直接使用。
依赖项
~295–750KB
~18K SLoC