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: 12
和 34
的情况,这时候需要在读取 Content-Length: 12
以后再检查下一行的开头是不是数字, 是数字的话,还需要把这两行的数字拼接一下,拼接后的数字才是真正的下一条消息的长度,接着跳过下一行后,用矫正过的长度读取消息内容。
今天晚上主要修复第二种意外情况。
开发 lsp-bridge 的同学注意如果有消息丢失,请更新这个版本后再继续开发。
1 个赞
文档功能能否像图标显示一样,独立出来作为可选项?
我个人不大用弹出文档。需要看的时候,喜欢在buffer看。
另外,Corfu 用户还有一个 corfu-doc 用来看文档,没有 LSP的时候也能用。Corfu 项目的 Extension 文件夹下有 corfu-info,用来在buffer中看文档,我主要是用这个。
wsw
349
已经推了个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 个赞
不是安装到系统 /usr/bin 或类似可以找到的地方吗?
我觉得这个是一个安装问题呀,lsp-bridge尽量不要干路径替换的问题,情况太多了,没法全部这样支持
ksqsf
353
好久没来论坛了,但是不得不登录来给 lsp-bridge 一个赞
请问短期内是否有计划支持在 echo area 显示函数签名、变量类型等功能?(比如通过 eldoc 什么的)
1 个赞
wsw
354
是的,lsp-bridge已经支持自定义json位置了(elisp函数或什么的)。
只不过如果支持的话,就是开箱即用了,否则像sumneko这种命令行参数里有依赖安装路径的,没法加入一个简单的sumneko.json
目前我需要的代码补全、查看定义、查看引用、重命名和API文档已经完全满足我个人要求了,更多功能我喜乐见成,只要不影响性能我都愿意合并进来。
1 个赞
那 lsp-bridge 怎么知道用什么路径去替换 root 呢?
补丁已经合并了,感谢帮助。
sumneko 的路径可以看看有没有系统安装的方法?
如果有建议把 sumneko.json 也加入到 langserver 里面。
wsw
358
这个得lsp-bridge来管理安装lsp-server后才行划掉
wsw
359
看了下vscode的扩展运行的程序的命令行,不加后面的参数也可以。。。
有人提供下 doom-config 下的配置模板吗,我只想抄配置
历时半个月的下班时间,终于把 lsp-bridge 这个开源项目完成了。
EAF (Emacs Application Framework) 历时4年写了24个应用,终于把Emacs变成键盘操作系统。
lsp-bridge 这个项目最大的贡献是通过多线程架构设计,把 Emacs 代码编写性能提升到微软 VSCode 的流畅水平。
lsp-bridge发布一周得到20多位开发者的贡献,目前支持的编程语言超过20多种。 感谢社区的天才大牛们,你们太厉害了,我每天合并补丁合到手软。
EAF和lsp-bridge这两个项目是我一直以来未完成的小心愿,现在都完成了,内心圆满。
感谢大家的支持[呲牙]
23 个赞
这个提议好,有些小细节,尤其是开箱即用要做好再发正式版比较好,多平台,多语言的小细节挺多的,要大家帮忙多测试,多发pr
估计还要再测几个月吧,一般我就是github版本就是最新稳定版,哈哈哈哈