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
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: