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

image

现在只是滚动 buffer 是不会发送请求的,更新试一下吧。

好的,我来试下,谢谢!

不用谢, 我很少用触摸板或鼠标, 没有考虑这个情况。

hello,我遇到了一个bug

image

具体过程: https://imgur.com/a/7aBIX6C

发现lsp-bridge在补全c++时没有展开文档,大佬可以修复一下吗

给个例子吧, 给了例子好修复呀。

看了你的动画, 每看懂呀。

lsp-bridge 已经支持多个 LSP Server 对同一个文件进行同时补全了, 相关的配置说明如下:


lsp-bridge每种语言的服务器配置存储在lsp-bridge/langserver.

大多数情况, 你可以根据以下优先级顺序来自定义服务器配置:

  1. lsp-bridge-get-single-lang-server-by-project: 用户自定义函数, 输入参数是 project-pathfile-path, 返回对应的LSP服务器字符串, 可以在 lsp-bridge-single-lang-server-mode-list 列表中查询所有LSP服务器的名称, 默认这个函数返回 nil
  2. lsp-bridge-single-lang-server-extension-list: 根据文件的扩展名来返回服务器,比如打开*.wxml文件时,我们会使用 wxml LSP服务器提供补全
  3. lsp-bridge-single-lang-server-mode-list: 根据Emacs的major-mode来返回对应的服务器

如果你在编写JavaScript代码, 你可能需要自定义多服务器配置:

  1. lsp-bridge-get-multi-lang-server-by-project: 用户自定义函数, 输入参数是 project-pathfile-path, 返回多服务器配置名, 可以在子目录 lsp-bridge/multiserver 中查找
  2. lsp-bridge-multi-lang-server-extension-list: 根据文件的扩展名来返回多服务器配置名, 比如打开*.vue文件时,我们会使用 volar_emmet 来同时利用 volaremmet-ls 两种LSP服务器提供补全
  3. lsp-bridge-multi-lang-server-mode-list: 根据Emacs的major-mode来返回对应的多服务器配置名

多语言的配置格式非常简单, 比如 volar_emmet.json 就轻易的融合了 volaremmet-ls 两种 LSP Server:

{
  "completion": ["volar", "emmet-ls"],
  "completion_item_resolve": ["volar", "emmet-ls"],
  "diagnostics": ["volar", "emmet-ls"],
  "code_action": ["volar", "emmet-ls"],
  "execute_command": ["volar", "emmet-ls"],
  "find_define": "volar",
  "find_implementation": "volar",
  "find_references": "volar",
  "formatting": "volar",
  "hover": "volar",
  "signature_help": "volar",
  "prepare_rename": "volar",
  "rename": "volar"
}

只需要一句 (setq lsp-bridge-multi-lang-server-extension-list '((("vue") . "volar_emmet"))) 就可以使得打开 *.vue 文件的时候自动开启 volar_emmet 多LSP Server补全, 你也可以任意搭配不同的 LSP Server, 一般来说只有 JavaScript 开发者需要多个 LSP Server.

目前 eslint 的 server 配置还比较麻烦, 诊断和Code Action暂时还不支持多 LSP Server.

5 个赞

就是正常补全应该是只有fmt.Println(xxx),但是有时候补全的时候会出现fmt.fmt.Println(xxx)

补全任何c++内容都没有文档

比如

#include <iostream>
std::cin

lsp-bridge补全cin时,没有出现cin的文档

多服务是不是需要优化一下权重

修复了, 请更新测试一下。

原因是 clangd 返回的文档数据结构和其他服务器返回的结构不一样。

1 个赞

辛苦大佬了

还有个问题: 补全时在查看完一个补全项的文档后,回到没有文档的一项,文档不会消失

复现过程:

  1. 打开任意c++文件
  2. main函数中输入for
  3. 选择for (init-statement; condition ...一项,发现此时没有文档
  4. 选择forward<typename Tp>(typename ... 一项,发现此时有文档
  5. 切换回3中的选项,发现此时来自4项中的文档并未消失

Peek 2022-07-30 14-21

现在会根据多服务器的顺序来排序菜单补全项, 更新测试一下吧。

更新吧, 应该好了。

1 个赞

请先更新到最新版再看看, 如果还有问题, 麻烦给一下稳定重现的方法, 稳定重现就可以修复。

ok,我稍后再试试。

辛苦大佬们了

发现acm中提示icon间距有问题