-
Notifications
You must be signed in to change notification settings - Fork 193
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
补全消失 #888
Comments
lsp-bridge-enable-log 选项关闭以后会正常吗?因为这个选项只是调试用的,打开会极度影响性能 |
lsp-bridge-enable-log关闭后也是这个状况。 |
给一个最小的重新代码吧,我有空测试一下 |
package main
import (
"fmt"
"time"
"github.com/gin-gonic/gin"
)
func main() {
a := 2
for a == 2 {
time.Sleep(1 * time.Second)
a = 3
}
fmt.Println("--> a = 3")
r := gin.Default()
r.Run(":8080")
} |
Can confirm a similar issue with gopls |
lsp-bridge-go-issue.mov |
@haoran-mc 我今天晚上测试了一下, 一直都是可以补全的。 我看了你的 lsp-bridge.txt 日志, 你只有第一次 textDocument/completion 请求有回应, 第二次就不行了。 你的 golang 项目是按照我README写的: 我的 gopls 是直接通过 pacman 安装的, 版本是 0.15.2-1 |
项目是这样搭建的,因为 emacs 现在不能补全,所以暂时使用 nvim 编辑。 nvim 中的 gopls 会提示:
然后我就把 go.mod 第三行的 1.22.1 改成了 1.22。 这时 nvim 能正常工作,但是 emacs 会出现上面补全消失的情况。 之后把 go.1.22 修改回 go.1.22.1 emacs 也还是补全消失。
我是使用 go install golang.org/x/tools/gopls@latest 下载的 gopls。 |
@manateelazycat Can you try this repo: https://github.com/kubernetes/kubernetes |
我的配置只有这些,放在 ~/.emacs 文件中,然后删除了 ~/.emacs.d 文件夹。
今天测试发现上面用了 gin 的小 demo 可以补全了,重启多次也都可以正常补全。 然后我在 github 上找了一些仓库,二十多个,只有内部包的项目都可以补全。需要第三方库的项目,尽管只依赖一个第三方库也不能补全。 打开项目前我都进行了 go mod tidy。 |
感觉是gopls.json参数配置的问题,可以看一下vscode的gopls是怎么配置的 |
@jixiuf Can you help to fix this? Thanks. ;) |
我遇到了同样的问题。MacOS(emacs29) 和 NixOS(emacs30) 中都遇到过。gopls v0.15.2, go v1.22.2。我使用了 go-mode-hook, emacs 会报错 function lsp-bridge is void。MacOS是新安装的环境,补全只在第一次打开项目起作用,之后就没有补全了。 |
我这里 go 的项目也无法补全了,同项目 eglot 是可以补全了, lsp-bridge 补全 c 也是可以的但是 go 不行 |
有问题的同学都提供一下最小重现代码吧, 我目前个人测试没有问题 |
我今天推送了新的补丁 这个补丁应该修复了LSP Server返回超多补全项时acm菜单不显示候选词的问题。 不显示补全的原因是, 原来有一批用户不希望 lsp-bridge 在 Python 端过滤候选词, 但是完全不过滤候选词, 当LSP server返回的候选词过多就会导致Emacs因为创建过多的对象而引起GC, 最终卡住Emacs, 所以后面引入了 acm-backend-lsp-candidates-max-number 选项来避免GC。 但是这样设计也是有问题的, 如果 LSP server 返回的候选词远远大于 acm-backend-lsp-candidates-max-number 的设定 (比如 Tailwindcss LSP server), 默认不过滤的策略, lsp-bridge 只是会一直发送 acm-backend-lsp-candidates-max-number 范围内的候选词, 而这些候选词和用户的输入并没有关系。 新的设计是, lsp-bridge 总是会在Python端过滤候选词, 只是用户可以配置 acm-backend-lsp-match-mode 的匹配模式, 这样就解决了LSP server返回过多候选项时acm不显示补全候选词的bug。 |
@haoran-mc @ydzhou @mrunhap @yuzukicat 这个帖子的大佬们, 你们可以更新到最新版帮我验证一下这个问题还存在吗? |
@manateelazycat 已更新到最新版,问题还存在。还是等待几分钟就可以正常补全。 |
等几分钟才能补全, 是不是 gopls 在后台下载库或者再做目录索引的工作呀? 能否帮我打开日志, 看一下 我是最近在修复 Tailwindcss 的问题的时候, 想到可能也能修复 gopls 的问题。 |
是的,代码越多、需要的库越多,等待的时间越长。 几分钟、十几分钟、二十几分钟... 之后能一直正常使用。
|
好的, 我分析一下日志, 看看能否加一下提示, 目前看代码补全可以用了。 |
我分析了一下日志, 没有啥问题, 目前还不知道为什么要等待那么长时间。 |
你尝试把 lspbridge/langserver/gopls.json 文件改成下面的内容, 再看看能否补全? 我怀疑 handle_workspace_configuration_request 函数返回了 gopls 不喜欢的参数, 然后 gopls 就不再补全了, 今天我在开发 workDoneProgress 协议的时候发现 gopls 这个特性。 {
"name": "gopls",
"languageId": "go",
"command": [
"gopls",
"-remote=auto"
],
"settings": {}
} |
更新到最新 commit,没有成功
|
你改成 {
"name": "gopls",
"languageId": "go",
"command": [
"gopls",
"-rpc.trace",
"--debug=localhost:6060",
"-remote=auto"
],
"settings": {}
} 试一下, gopls 启动后, 浏览器访问 localhost:6060 , 看看有没有什么信息, 我怀疑什么地方配置错了, 导致 gopls 无法补全 |
好吧, 感谢你的测试, 只能看哪天有灵感才能修复了。 |
能帮我发送一下 eglot 和 LSP Server 通信的日志吗? 我检查一下是否 lsp-bridge 遗漏了某些配置? 谢谢 |
从这个现象看, 更像是 go import 的那些包在下载, 下载完以后就可以补全了。 |
它只是仓库的名字叫dockertest,但是并不是连到docker里面的。 |
golang只有内部包时能正常补全,在包含外部包时补全会消失,仅能补全第一次。
有时在等待很久后又能够恢复补全,时间不一定,十分钟、二十分钟。
markdown-mode、yasnippet、lsp-bridge 是最新的commit。
最小的配置
.emacs
:*Message*
buffer:*lsp-bridge*
buffer:lsp-bridge.txt
*lsp-bridge-epc con 82*
buffer 没有内容。在我创建这个issue时,minibuffer第一次给出了error:
The text was updated successfully, but these errors were encountered: