项目链接: 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 完善其功能,非常感谢!