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

请更新lsp-bridge到最新版, 修复两个问题:

  1. 现在删除操作会自动隐藏补全菜单
  2. 顺便修了 lsp-bridge 在 acm-buffer/acm-doc-buffer 启动的问题, 会导致补全菜单有时候不会随着输入立即调整的问题

第二个bug比较严重, 建议所有同学都更新一下。

1 个赞

你更新最新版看看修复没有?

删除操作会自动隐藏补全菜单了,但是有机率会在空格后补全框没有消失。而acm--backend-lsp-candidate-min-length还是不生效。

acm–backend-lsp-candidate-min-length 的问题你试一下其他正常的 file buffer, 先不要看 scratch

你这两个问题都不要在 scratch 实验, 都用正常的文件 buffer 来测试。

试了在Emacs的init.el中也没有效果,不过在TeX语言环境下是有效的。

2 可能解决了一个困扰我很久的问题,过会儿试试。谢谢,

1 个赞

我原来以为是lsp server那边问题,昨天写删除命令不补全的时候才发现acm菜单和文档buffer也在发送请求给lsp server,这样会干扰正常文件补全。

这个bug估计acm.el引入的时候就有了。

罪过呀,这个bug这么久都没发现。

最好是发重现文件给我,要不我没法重现。

已通过邮箱发送,主题是“acm–backend-lsp-candidate-min-length 没起作用的重现文件”。

小bug: 用python 和pyright 的时候,acm排序有问题 我预期的第一个补全是‘var’, 而不是八竿子打不着的‘first_valid_index’.

image

当注释掉completion.py, line 42-46, 就可以修复这个问题。 我估计是pyright没有返回有意义的"sortText"

我弄了一logging,发现“sortText”的值很奇怪, 比如“09.9999.sort_values” 不知道这个是不是预期值。

INFO:root:xsortText: 09.9999.sort_values; y: 05.0000.eval
INFO:root:xlabel: sort_values; y: eval
INFO:root:xsortText: 09.9999.value_counts; y: 09.9999.sort_values
INFO:root:xlabel: value_counts; y: sort_values
INFO:root:xsortText: 09.9999.swaplevel; y: 09.9999.value_counts
INFO:root:xlabel: swaplevel; y: value_counts
INFO:root:xsortText: 09.9999.swaplevel; y: 09.9999.sort_values
INFO:root:xlabel: swaplevel; y: sort_values
INFO:root:xsortText: 09.9999.swaplevel; y: 09.9999.value_counts

这个不是bug,这个时候有些人希望按照前缀排序,有些人希望按照lsp server推荐排序。

我每次改到推荐排序,python的人就跳出来说要前缀排序,每次前缀排序,js的人就跳出来说要推荐排序。

众口难调

了解,原来是个需求的问题。我自己fork一个就好

我研究了一下 pyright 的返回 sortText 值, 我写了一个补丁 Improve sorting of completion candidates based on numeric values. · manateelazycat/lsp-bridge@9004306 · GitHub

适应一下 pyright 的风格, 只提取出 sortText 的数字部分, 忽略掉后面的字符串, 你更新看看, 是不是会好很多?

1 个赞

acm–backend-lsp-candidate-min-length 这个选项只能管 LSP 补全后端, 管不了别的后端。

我对其他几个后端加了对应选项, 你都需要设置一下才行。

1 个赞

可以了,感谢。

1 个赞

赞,暂时很不错。 感谢

不知道什么原因orderless-flex配了不起作用。

比如:jdbcTemplate.queryForMap(sql) 输入jdbcTemplate.qfm应该能筛选出这个候选的,现在只输全才能筛选到。

describe-variable:

acm-candidate-match-function is a variable defined in ‘acm.el’.

Its value is ‘orderless-flex’ Original value was ‘regexp-quote’

因为lsp-bridge的架构是完全异步设计的, 补全菜单是 lsp server 实时返回的, 而不是像 company/corfu 那样获取补全列表以后,在 buffer 本地做过滤。

如果你需要针对候选词局部匹配, 应该才acm补全菜单弹出来的时候, 按 Alt + u, acm自己会做二次过滤的。