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

也可以啊,你发个pr吧

提 pr 了

合并了,谢谢

社区大佬写了一个新的解析器,替代我原来那个不严谨的解析器, volar 这种最暴力和数据流量最大的 LSP server 都好了。

社区大佬厉害,我查了一下午才定位到是解析的问题,还想着上来报问题 :rofl:

没有补全选项是怎么回事,在别人那里有这样吗

你能打开日志 (setq lsp-bridge-enable-log t) 看一下吗? 没有日志,别人不知道你发生了什么事情呀。

看请求和返回的id都是对上的,打开日志看看返回的是不是补全信息,还是报错了?如果有那应该就是后续补全列表的问题,比读不到返回就好处理多了感觉

右边日志往上面翻看看是不是有个有报错,貌似跟我提的那个含中文打开一个问题

我发现,如果triggerKind传3, volar返回的补全项是空的。

如果triggerKind传1,是能返回补全项的。这个对volar有什么区别吗?

补几张图:

image image image image image

有一点小问题,就是补全 foo.bar 时,选择之后会变成 foo…bar

我看了下 volar 的源码,好像如果是3它会从缓存数据里面取,其他的会再调服务去实时补全。。。

多个.的问题,大佬刚推了一版代码是解决这个问题,你可以更新下再试试

:rofl: 我这边已经很流畅了,不过本地需要把triggerKind改成1才行。

这个triggerKind:3为什么会做成缓存啊?

看意思就是指当前的这份数据还能继续接着补全,所以就在直接在这个基础上过滤了

LSP的协议,triggerKind意思: 1 是手动调用,2是通过 triggerCharacters 调用(比如 . → 等), 3是正常补全调用(也就是关键字打一半)

看你们要传递 triggerKind 1, lsp-bridge 目前是没有处理 triggerKind 是 1 的情况, 我主要不知道什么时候该发 1, 大家有啥想法吗?

@jadestrong 讨论,应该是这个逻辑:

  1. 如果和 lsp server 返回的 trigger char 匹配就用 2
  2. 如果当前输入字符是上一次返回补全列表的一部分就是 3
  3. 上面都不是就是1, 1我的理解会触发服务器重新计算

@archer.wang @jadestrong 你们不需要本地改,我已经把这个问题修复了,现在通过点来补全的用 triggerKind 2 , 其他都一律用 triggerKInd 1

4 个赞

刚才提交了一个补丁,避免某一个 LSP server 找不到把 lsp-bridge 进程给弄崩溃了。

手动启动 lsp-bridge-mode 是只对当前文件吗? 我跳转到定义后就跳不回来的,再开启 lsp-bridge-mode 就会再启动一个 server