1 个不稳定版本

0.1.0 2024年3月30日

#1671 in 开发工具

MIT 许可协议

23KB
486 代码行

lsp-rs

lsp-rs是一个Rust库,旨在简化与语言服务器协议(LSP)服务器的通信。它提供了一个异步客户端,用于根据LSP规范发送和接收消息,使得将LSP功能集成到Rust应用程序中变得更加容易。

功能

  • 支持与LSP服务器建立TCP和Unix域套接字连接。
  • LSP请求和响应的序列化和反序列化。
  • 包含常用的LSP消息结构,如InitializeNotificationResponse
  • 支持跳转到定义。

安装

lsp-rs添加到您的Cargo.toml

[dependencies]
lsp-rs = "0.1.0"

用法

以下是一个使用lsp-rs初始化与LSP服务器的连接并发送初始化请求的基本示例

use lsp_rs::{LspClient, RequestMessage};
use tokio::runtime::Runtime;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let rt = Runtime::new()?;
    rt.block_on(async {
        let mut client = LspClient::new("tcp:127.0.0.1:8080").await?;
        let initialize_request = RequestMessage::new_initialize(
            1, // Request ID
            std::process::id(),
            "file:///path/to/workspace".into(),
            "MyLSPClient".into(),
            "1.0".into(),
            vec![], // Workspace folders
        );
        client.send_request(initialize_request).await?;
        let response = client.handle_response().await?;
        println!("Received response: {:?}", response);
        Ok(())
    })
}

限制

  • 我仅测试了它与gopls一起使用。
  • 目前,lsp-rs支持LSP规范的一部分。可能需要根据您的需求实现额外的请求和响应类型。
  • 该库旨在用于基本的LSP交互;涉及高级LSP功能的复杂工作流尚未支持。

未来工作

  • 实现LSP请求和响应的全部范围。
  • 增强错误处理和日志记录,以实现更好的调试和可靠性。
  • 添加对更复杂的LSP功能的支持,如增量同步和工作空间更新。
  • 添加通知处理。

依赖

~3–10MB
~96K SLoC