gopls版本
v0.14.2
go环境
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\worlpaker\AppData\Local\go-build
set GOENV=C:\Users\worlpaker\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\worlpaker\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\worlpaker\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLCHAIN=auto
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.21.6
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=NUL
set GOWORK=
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=C:\Users\worlpaker\AppData\Local\Temp\go-build2689359370=/tmp/go-build -gno-record-gcc-switches
你做了什么?
在某些情况下,自动补全功能无法正常工作。
逗号后的变量补全:
package main
func main(){
minimum, maximum := 0, 0
minimum, max
}
演示
test.mp4
你看到了什么?
max
的补全变成了 maxmaximum
。
你期望看到什么?
max
的补全应该是 maximum
。
编辑器和设置
- 无响应*
日志
- 无响应*
6条答案
按热度按时间v1l68za41#
当源代码存在语法错误时,也会出现这种情况:括号内缺少逗号或意外地在括号内放置了逗号。
缺少逗号:
val
的补全将是valvalue
。意外地放置逗号:
#58833 中也有类似的问题
math.ab
的补全将是math.abmath.Abs()
。bfnvny8b2#
https://go.dev/cl/561417提到了这个问题:
gopls/internal/golang/completion: fix completion behavior when the source has syntax errors
w6mmgewl3#
谢谢。这看起来像是#58833的重复,对吗?
感谢深入研究这个问题并着手修复!正如在CL上所评论的,解释如何处理语法错误的理论会很有帮助。
rpppsulh4#
是的,尽管第一个场景(max<>)在逻辑上没有语法错误。
bkhjykvo5#
谢谢。值得注意的是,第一个场景确实存在语法错误(例如https://go.dev/play/p/lVxgY6Dczjf指出了一个语法错误)。
e1xvtsh36#
我会查看修复。我们可以保持这个问题开放,因为另一个问题是关于go/parser的。