你正在使用哪个版本?
~$ go version -m $(which gopls)
/usr/local/google/home/bcmills/bin/gopls: devel +186f0220d0 Mon Oct 5 11:12:24 2020 -0400
path golang.org/x/tools/gopls
mod golang.org/x/tools/gopls v0.5.1 h1:AF3Uh7HF08SZpKFfgJO6zfF3bbxyDXWqdkK4kMXiQ1o=
dep github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
dep github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k=
dep github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
dep golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
dep golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA=
dep golang.org/x/tools v0.0.0-20200930165741-f1523d29dbb9 h1:1R38tQp22dcHpTKJPjgVa16FhlDy/kHEaCM/ndi/FIc=
dep golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
dep honnef.co/go/tools v0.0.1-2020.1.5 h1:nI5egYTGJakVyOryqLs1cQO5dO0ksin5XXs2pspk75k=
dep mvdan.cc/gofumpt v0.0.0-20200802201014-ab5a8192947d h1:t8TAw9WgTLghti7RYkpPmqk4JtQ3+wcP5GgZqgWeWLQ=
dep mvdan.cc/xurls/v2 v2.2.0 h1:NSZPykBXJFCetGZykLAxaL6SIpvbVy/UFEniIfHAa8A=
这个问题在最新版本中是否会重现?
是的
你做了什么?
( https://play.golang.org/p/OSPW1IIzNCs )
- 使用
emacs
和gopls
通过eglot
,从一个在多个地方使用但未声明的现有标识符开始。
(对于这个例子,errNo
。) - 在局部范围内为新标识符添加一个声明,但为其选择一个更好的名称(
errno
)。 - 请记住,您还需要重命名该标识符的所有现有使用。
- 将光标放在旧标识符的出现处并执行
M-x eglot-rename
。 - 输入步骤(2)中的标识符名称。
你期望看到什么?
引用到(现在未声明的)变量的地方应该被重命名,使它们现在指向步骤(2)中的标识符。
你看到了什么?
gopls
返回了一个 no object found
错误。
如 M-x eglot-events-buffer
报告的:
[client-request] (id:9) Wed Oct 7 14:42:34 2020:
(:jsonrpc "2.0" :id 9 :method "textDocument/rename" :params
(:textDocument
(:uri "file:///tmp/tmp.Ih8P4GysfM/example.com/main.go")
:position
(:line 13 :character 23)
:newName "errno"))
[server-reply] (id:9) ERROR Wed Oct 7 14:42:34 2020:
(:jsonrpc "2.0" :error
(:code 0 :message "no object found for \"errNo\": no object found")
:id 9)
1条答案
按热度按时间kwvwclae1#
在没有完整类型信息的情况下重命名总是会有些棘手,因为我们无法确定用户从一个无效程序开始的意图。将未声明的标识符重命名为已声明的名称可能是例外,但我不确定。考虑这个人为的例子:
在这种情况下,尝试重命名其中的任何旧名称是否有意义?