x/tools/gopls: moving a file from package A into package B confuses gopls #38977
Comments
Thank you for filing a gopls issue! Please take a look at the Troubleshooting guide, and make sure that you have provided all of the relevant information here. |
When playing around with my repro project, gopls actually crashed: gopls log[Info - 3:30:33 PM] 2020/05/09 15:30:33 message="Build info\n----------\nversion master, built in $GOPATH mode\n\nGo info\n-------\ngo version go1.14.1 windows/amd64\n\n" [Info - 3:30:34 PM] 2020/05/09 15:30:34 message="go/packages.Load" snapshot=0 directory=C:\Source\tests\gopls-issue query=[./... builtin] packages=4 [Info - 3:30:34 PM] 2020/05/09 15:30:34 message="go env for C:\\Source\\tests\\gopls-issue\n(valid build configuration = true)\n(build flags: [-modfile=C:\\Users\\ME\\AppData\\Local\\Temp\\go.gopls-issue.270555471.mod])\nset GO111MODULE=\nset GOARCH=amd64\nset GOBIN=\nset GOCACHE=C:\\Users\\ME\\AppData\\Local\\go-build\nset GOENV=C:\\Users\\ME\\AppData\\Roaming\\go\\env\nset GOEXE=.exe\nset GOFLAGS=\nset GOHOSTARCH=amd64\nset GOHOSTOS=windows\nset GOINSECURE=\nset GONOPROXY=\nset GONOSUMDB=\nset GOOS=windows\nset GOPATH=C:\\Users\\ME\\.go\nset GOPRIVATE=\nset GOPROXY=https://proxy.golang.org,direct\nset GOROOT=c:\\go\nset GOSUMDB=sum.golang.org\nset GOTMPDIR=\nset GOTOOLDIR=c:\\go\\pkg\\tool\\windows_amd64\nset GCCGO=gccgo\nset AR=ar\nset CC=gcc\nset CXX=g++\nset CGO_ENABLED=1\nset GOMOD=C:\\Source\\tests\\gopls-issue\\go.mod\nset CGO_CFLAGS=-g -O2\nset CGO_CPPFLAGS=\nset CGO_CXXFLAGS=-g -O2\nset CGO_FFLAGS=-g -O2\nset CGO_LDFLAGS=-g -O2\nset PKG_CONFIG=pkg-config\nset GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\\Users\\FIRELI~1\\AppData\\Local\\Temp\\go-build505991338=/tmp/go-build -gno-record-gcc-switches\n" [Info - 3:30:49 PM] 2020/05/09 15:30:49 message="go/packages.Load" snapshot=4 directory=C:\Source\tests\gopls-issue query=[file=C:\Source\tests\gopls-issue\b\c.go] packages=1 [Info - 3:30:49 PM] 2020/05/09 15:30:49 message="go/packages.Load" snapshot=4 package_path="gitlab.com/ethan/contrib/gopls-issue/b" files=[C:\Source\tests\gopls-issue\b\b.go C:\Source\tests\gopls-issue\b\c.go] [Info - 3:30:51 PM] 2020/05/09 15:30:51 message="go/packages.Load" snapshot=5 directory=C:\Source\tests\gopls-issue query=[gitlab.com/ethan/contrib/gopls-issue/c] packages=1 [Info - 3:30:51 PM] 2020/05/09 15:30:51 message="go/packages.Load" snapshot=5 package_path="gitlab.com/ethan/contrib/gopls-issue/c" files=[] [Error - 3:30:51 PM] 2020/05/09 15:30:51 message="warning: diagnose go.mod" error=gitlab.com/ethan/contrib/gopls-issue/c has no metadata directory=C:\Source\tests\gopls-issue [Info - 3:30:52 PM] 2020/05/09 15:30:52 message="go/packages.Load" snapshot=5 directory=C:\Source\tests\gopls-issue query=[gitlab.com/ethan/contrib/gopls-issue/c] packages=1 [Error - 3:30:52 PM] 2020/05/09 15:30:52 message="failed to load workspace packages, skipping diagnostics" error=gitlab.com/ethan/contrib/gopls-issue/c has no metadata snapshot=5 directory=file:///C:/Source/tests/gopls-issue [Info - 3:30:52 PM] 2020/05/09 15:30:52 message="go/packages.Load" snapshot=5 package_path="gitlab.com/ethan/contrib/gopls-issue/c" files=[] [Error - 3:30:58 PM] Request textDocument/definition failed. Message: no object for ident println Code: 0 [Error - 3:31:02 PM] Request textDocument/definition failed. Message: no object for ident A Code: 0 [Error - 3:31:02 PM] Request textDocument/definition failed. Message: no object for ident A Code: 0 [Error - 3:31:05 PM] Request textDocument/definition failed. Message: no object for ident A Code: 0 [Info - 3:31:09 PM] 2020/05/09 15:31:09 message="go/packages.Load" snapshot=7 directory=C:\Source\tests\gopls-issue query=[file=C:\Source\tests\gopls-issue\b\c.go] packages=1 [Info - 3:31:09 PM] 2020/05/09 15:31:09 message="go/packages.Load" snapshot=7 package_path="gitlab.com/ethan/contrib/gopls-issue/b" files=[C:\Source\tests\gopls-issue\b\b.go C:\Source\tests\gopls-issue\b\c.go] [Error - 3:31:09 PM] 2020/05/09 15:31:09 message="no completions found" error=this is a definition position={0 9} [Info - 3:31:12 PM] 2020/05/09 15:31:12 message="go/packages.Load" snapshot=8 directory=C:\Source\tests\gopls-issue query=[gitlab.com/ethan/contrib/gopls-issue/c] packages=1 [Error - 3:31:12 PM] 2020/05/09 15:31:12 message="warning: diagnose go.mod" error=gitlab.com/ethan/contrib/gopls-issue/c has no metadata directory=C:\Source\tests\gopls-issue [Info - 3:31:12 PM] 2020/05/09 15:31:12 message="go/packages.Load" snapshot=8 package_path="gitlab.com/ethan/contrib/gopls-issue/c" files=[] [Info - 3:31:13 PM] 2020/05/09 15:31:13 message="go/packages.Load" snapshot=8 directory=C:\Source\tests\gopls-issue query=[gitlab.com/ethan/contrib/gopls-issue/c] packages=1 [Info - 3:31:13 PM] 2020/05/09 15:31:13 message="go/packages.Load" snapshot=8 package_path="gitlab.com/ethan/contrib/gopls-issue/c" files=[] [Error - 3:31:13 PM] 2020/05/09 15:31:13 message="failed to load workspace packages, skipping diagnostics" error=gitlab.com/ethan/contrib/gopls-issue/c has no metadata snapshot=8 directory=file:///C:/Source/tests/gopls-issue [Error - 3:31:13 PM] Request textDocument/definition failed. Message: no object for ident A Code: 0 [Error - 3:31:13 PM] Request textDocument/definition failed. Message: no object for ident A Code: 0 [Error - 3:31:14 PM] Request textDocument/definition failed. Message: no object for ident A Code: 0 [Info - 3:31:16 PM] 2020/05/09 15:31:16 message="background imports cache refresh starting" [Info - 3:31:17 PM] 2020/05/09 15:31:17 message="background refresh finished after 656.4837ms" panic: runtime error: invalid memory address or nil pointer dereference [signal 0xc0000005 code=0x0 addr=0x10 pc=0x7b0d8d] |
In general, gopls seems to be very bad at recovering from files with invalid or missing package declarations. This is the first time I've been able to characterize it beyond, "it breaks". |
Change https://golang.org/cl/233177 mentions this issue: |
Updates golang/go#38977. Change-Id: I8cbf0b058d77e749285cfe41b4b49de3764be861 Reviewed-on: https://go-review.googlesource.com/c/tools/+/233177 Run-TryBot: Rebecca Stambler <rstambler@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Heschi Kreinick <heschi@google.com>
Change https://golang.org/cl/238028 mentions this issue: |
The CL I just mailed should fix half of the problem. The other half is a go command bug, which was fixed in 1.15. After that the workspace has no errors after following your repro. Thanks for the report! |
What version of Go are you using (
go version
)?Does this issue reproduce with the latest release?
Yes, and I am using a recent build of gopls from master.
What operating system and processor architecture are you using (
go env
)?go env
OutputWhat did you do?
I am using Visual Studio Code with the
vscode-go
extension andgopls
enabled.https://gitlab.com/ethan.reesor/contrib/gopls-issue-38977
go.mod
a
a.go
-package a
b
b.go
-package b
, referencesa
c
c.go
-package c
Move
c.go
intob
.What did you expect to see?
All errors resolve once I update
c.go
to havepackage b
.What did you see instead?
gopls breaks and stays broken, even after all files in
b
havepackage b
.gopls log
The text was updated successfully, but these errors were encountered: