lsp-mode 补全 go 的时候出现了一些奇怪的补全

image

如图所示,我没有做任何的配置,直接打开了一个 go 文件,然后执行 lsp 后输入就出现了这样的情况…

为了排除是 gopls 的问题,我试了一下 eglot 和 coc.nvim 都没有出现这样的情况…

求解答qwq

是不是用了company-lsp?把company-lsp-cache-candidates 禁用掉试试。

并没有什么变化T_T

更新你的gopls 0.3.2 没有filter 0.3.3是ok的。使用lsp-prefer-capf 就不用装company-lsp。

不要用 company-lsp, 设置 lsp-enable-completion-at-point 后,用 company-capf 后端试试。 好像 company-lsp 给 mspyls 补全也是一堆乱七八糟的补全,后来换 capf 好了。

我不是特别了解company…但是我猜我应该使用company-capf了…

顺便问下 company-capf 是什么…

completion-at-point-function , 具体可以看 completion-at-point-functions 里面的数值。

确认当前究竟用的 company 哪个后端可以查看 company-backends 的值。

我直接把 company-backends setq 成 '(company-capf) 了,但是还是这样T_T

这个是 company-lsp 的问题,试试我的解决方案。 至于company-capf不起效,你设置lsp-prefer-capf了吗?

试过了,但是没有效果T_T

我看看你发的这个

要是用company-lsp 设置company-lsp-filter-candidates ,不过在0.3.3gopls 使用lsp-prefer-capf是正常的,参见我的两个issue

Why there is a completion list if there is no match · Issue #124 · tigersoldier/company-lsp · GitHub

lsp-prefer-capf doesnt work well · Issue #1451 · emacs-lsp/lsp-mode · GitHub

直接设置company 后端是 capf 不一定有用,如果不设置 lsp-prefer-capf ,并且安装了 company-lsp, 那么 lsp 启动的时候可能会给你把 company-lsp 放最前面去,并且干掉 company-capf。这样你的补全还是 company-lsp。.

我本地测试了下,company-capf 是有效的。

  1. 禁用或者删除 company-lsp;
  2. 设置 company-backends 为 company-capf 或者 nil;
  3. 启用 lsp-prefer-capf.

我配置里的company 和lsp 你可以直接用 https://github.com/hardcoreplayers/galaxy-emacs/blob/develop/modules/completion/%2Bcompany.el

emmm还是不行

我通过 C-h v 查看过了 company-backends 里面也只有 company-capf,但是依然有这样的现象…

这是我关于 lsp 的配置

image

会是 emacs 版本的问题吗?(我是 26.3

好像的确是 gopls 的问题…

我把配置拷到一台 manjaro 的机子上就正常了QAQ

我最近写 golang 也遇到这个问题,所以是 gopls 的问题吗?我写 python(mspyls) 和 rust(rls) 都是正常的,写 go(gopls) 的时候会补出来很多奇怪的东西,并且性能很差。工作环境是一台老 mac,10.15.6

看起来多半是gopls的问题

提个小建议 hook那可以简写成:hook ((c-mode c+±mode js-mode go-mode) . lsp)

但是 vscode 的表现就也还好,虽然跑起来也会飙一下 CPU,但是起码能正常补全,而且也不会太卡