lsp-bridge -- 速度最快的语法补全插件

LSP 的协议解析真的有各种意外情况。

正常消息应该是:

Content-Length: 180\r\n
\r\n
{
	"jsonrpc": "2.0",
	"id": 1,
	"method": "textDocument/didOpen",
	"params": {
		...
	}
}

读取消息长度、跳过第二行,按照读取的长度读取第三行。

第一种意外的情况是,第二条消息的 Content-Length 会放到第一条消息的末尾,这种情况是每次读完消息后,检查一下第一条消息的行尾,看看是不是 Content-Length: number 结尾,是数字的话, 读取第二条消息的操作是直接跳过接下来一行后,按照长度再读一行就可以知道第二条消息的准确内容。

第二种意外情况是,管道缓冲区不够时,Content-Length: 1234 有可能会截断成 Content-Length: 1234 的情况,这时候需要在读取 Content-Length: 12 以后再检查下一行的开头是不是数字, 是数字的话,还需要把这两行的数字拼接一下,拼接后的数字才是真正的下一条消息的长度,接着跳过下一行后,用矫正过的长度读取消息内容。

今天晚上主要修复第二种意外情况。

开发 lsp-bridge 的同学注意如果有消息丢失,请更新这个版本后再继续开发。

1 个赞

你可以设置边框颜色和宽度,感觉可能更显眼一点

文档功能能否像图标显示一样,独立出来作为可选项?

我个人不大用弹出文档。需要看的时候,喜欢在buffer看。

另外,Corfu 用户还有一个 corfu-doc 用来看文档,没有 LSP的时候也能用。Corfu 项目的 Extension 文件夹下有 corfu-info,用来在buffer中看文档,我主要是用这个。

已经推了个PR,至少sumneko可以工作。

{
  "name": "sumneko",
  "languageId": "lua",
  "command": ["{root}/bin/lua-language-server", "-E", "-e", "LANG=\"en-US\"", "{root}/main.lua"],
  "settings": {}
}

{root}得自己替换,这个如果能在lsp-bridge.py载入后自动去替换最好了。

1 个赞

这个root指的是啥路径?

sumneko-lspserver解开的目录

不是安装到系统 /usr/bin 或类似可以找到的地方吗?

我觉得这个是一个安装问题呀,lsp-bridge尽量不要干路径替换的问题,情况太多了,没法全部这样支持

好久没来论坛了,但是不得不登录来给 lsp-bridge 一个赞 :wink:

请问短期内是否有计划支持在 echo area 显示函数签名、变量类型等功能?(比如通过 eldoc 什么的)

1 个赞

是的,lsp-bridge已经支持自定义json位置了(elisp函数或什么的)。

只不过如果支持的话,就是开箱即用了,否则像sumneko这种命令行参数里有依赖安装路径的,没法加入一个简单的sumneko.json

目前我需要的代码补全、查看定义、查看引用、重命名和API文档已经完全满足我个人要求了,更多功能我喜乐见成,只要不影响性能我都愿意合并进来。

1 个赞

那 lsp-bridge 怎么知道用什么路径去替换 root 呢?

补丁已经合并了,感谢帮助。

sumneko 的路径可以看看有没有系统安装的方法?

如果有建议把 sumneko.json 也加入到 langserver 里面。

这个得lsp-bridge来管理安装lsp-server后才行划掉 :smiley:

看了下vscode的扩展运行的程序的命令行,不加后面的参数也可以。。。

已经合并了,幸苦大佬了。

有人提供下 doom-config 下的配置模板吗,我只想抄配置 :grinning:

历时半个月的下班时间,终于把 lsp-bridge 这个开源项目完成了。

EAF (Emacs Application Framework) 历时4年写了24个应用,终于把Emacs变成键盘操作系统。

lsp-bridge 这个项目最大的贡献是通过多线程架构设计,把 Emacs 代码编写性能提升到微软 VSCode 的流畅水平。

lsp-bridge发布一周得到20多位开发者的贡献,目前支持的编程语言超过20多种。 感谢社区的天才大牛们,你们太厉害了,我每天合并补丁合到手软。

EAF和lsp-bridge这两个项目是我一直以来未完成的小心愿,现在都完成了,内心圆满。

感谢大家的支持[呲牙]

23 个赞

请问懒猫大大什么时候发布一个正式的版本? :smiley:

这个提议好,有些小细节,尤其是开箱即用要做好再发正式版比较好,多平台,多语言的小细节挺多的,要大家帮忙多测试,多发pr

估计还要再测几个月吧,一般我就是github版本就是最新稳定版,哈哈哈哈