V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
observerw
V2EX  ›  程序员

一个现代化的、精心设计的 Language Server Protocol Python SDK

  •  2
     
  •   observerw · 13 小时 17 分钟前 · 406 次点击

    项目链接: https://github.com/observerw/lsp-client

    各位同行们应该对 LSP 都不陌生,平常咱们使用 VSCode 写代码的时候基本少不了 LSP Server 的帮助。

    我目前所做的工作有关 LLM 代码生成,所以不可避免地会需要对代码仓库进行一些静态分析,但我发现现有的静态分析工具的生存状况堪忧,基本上都没什么人维护了,即使那些还活着的项目,其功能也少得可怜。

    相比之下,各个语言的 LSP Server 活的都非常好(应该是因为用的人也多),而且功能非常全面,看起来比那些半死不活的静态分析工具好太多了🤣。所以我就希望能够在代码中直接调用 LSP Server 的各个功能,来完成一些分析任务,说白了就是需要一个 LSP Server 的 Python SDK 。

    我曾经尝试使用过 multilspy,一个微软开发人员所开发的 LSP Server SDK 。在简单场景下用着没什么问题;但当我想手动扩展一下它的功能时,就发现它的代码写的乱七八糟,让人难以有 follow up 的欲望(微软对于开源项目也太不上心了)。所以我干脆就另起炉灶起了一个新项目,实现一个更加现代化的 LSP Client 。相较于 multilspy ,该项目的优势体现在:

    • 类型标注全面:使用微软官方的 lsprotocol 提供类型,绝对标准而且符合 LSP 协议的规定;所有的能力都声明为 Protocol,所以你甚至可以声明一个新类型用于约束一个 client 必须具有哪些 LSP 能力;
    • 功能更全面:不止支持 goto definition ,find references 等基本能力,而且还能够支持 LSP 协议中规定的很多其他能力;
    • 自带能力检查:启动 LSP Server 的时候将会自动检查 Server 是否支持你想要的能力,避免在运行时出现 bug ;
    • 扩展更容易:代码架构清晰,如果你想要支持一个新的 LSP Server ,只需要通过 Mixin 模式混入你想要的 LSP 能力即可;
    • 自带多进程:能够同时启动多个 LSP Server 进程来处理请求,当你需要批量分析代码的时候能带来可观的速度提升(也带来可观的 CPU 占用率提升)

    后续我计划在该项目中添加 MCP ( Model Context Protocol )支持,从而让 LLM Agent (比如 Cursor )也能够具有调用 LSP Server 的能力。

    目前该项目还处于起步阶段,原生支持的 LSP Server 还不太多;但由于扩展起来比较容易,我预计应该能很快的补全这一短板。欢迎诸位试用,当然更欢迎诸位为本项目提供宝贵的 PR 完善其功能,非常感谢!

    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   887 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 20:07 · PVG 04:07 · LAX 13:07 · JFK 16:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.