Skip to content
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: blocking methods until notifications/requirements processed #32444

Closed
myitcv opened this issue Jun 5, 2019 · 2 comments
Closed
Labels
FrozenDueToAge gopls Issues related to the Go language server, gopls. Tools This label describes issues relating to any tools in the x/tools repository. WaitingForInfo Issue is not actionable because of missing required information, which needs to be provided.
Milestone

Comments

@myitcv
Copy link
Member

myitcv commented Jun 5, 2019

What version of Go are you using (go version)?

$ go version
go version devel +385b2e0cac Fri May 24 21:34:53 2019 +0000 linux/amd64
$ go list -m golang.org/x/tools
golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd

Does this issue reproduce with the latest release?

Yes

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN="/home/myitcv/gostuff/src/github.com/myitcv/govim/cmd/govim/.bin"
GOCACHE="/home/myitcv/.cache/go-build"
GOENV="/home/myitcv/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/myitcv/gostuff"
GOPROXY="https://proxy.golang.org/"
GOROOT="/home/myitcv/gos"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/home/myitcv/gos/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/myitcv/gostuff/src/github.com/myitcv/govim/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build305023695=/tmp/go-build -gno-record-gcc-switches"

What did you do?

This is really a placeholder issue following discussion with @ianthehat on Slack.

In various govim integration tests, I am having to insert "waits" in order to be sure gopls can handle a particular request.

Consider the following sequence:

  • Open Vim (which loads govim, which starts gopls, calls Initialize, calls Initialized)
  • Open main.go (which results in didOpen notification to gopls)
  • Move cursor to known position
  • Trigger go-to-def

Note: all of the above steps are sequential.

If these steps happen quickly, the triggering of go-to-def can happen before gopls is "ready". This results in a response along the lines of "don't know anything about identifier under cursor".

As a workaround, I am waiting for diagnostics to be sent for main.go before triggering the go-to-def.

However, I think this should really be an implementation detail of gopls. i.e. when the call to go-to-def comes in, any pending notifications should be handled, processed etc in such a way that if any is relevant to the subsequent go-to-def call they must be handled before the call (because the events themselves happened before).


cc @stamblerre @ianthehat

@myitcv myitcv added NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. gopls Issues related to the Go language server, gopls. labels Jun 5, 2019
@gopherbot gopherbot added this to the Unreleased milestone Jun 5, 2019
myitcv added a commit to govim/govim that referenced this issue Jun 13, 2019
myitcv added a commit to govim/govim that referenced this issue Jun 13, 2019
@stamblerre stamblerre changed the title x/tools/cmd/gopls: blocking methods until notifications/requirements processed x/tools/gopls: blocking methods until notifications/requirements processed Jul 2, 2019
@gopherbot gopherbot added the Tools This label describes issues relating to any tools in the x/tools repository. label Sep 12, 2019
@stamblerre stamblerre modified the milestones: Unreleased, gopls unplanned Dec 4, 2019
@stamblerre stamblerre modified the milestones: gopls unplanned, gopls/v1.0.0 Jan 29, 2020
@stamblerre stamblerre modified the milestones: gopls/v1.0.0, gopls/v0.6.0 Mar 12, 2020
@stamblerre stamblerre modified the milestones: gopls/v0.6.0, gopls/v0.7.0 Apr 2, 2020
@stamblerre
Copy link
Contributor

@myitcv: Given that this issue was filed a year ago, is this still a problem for you? I expect that gopls's "initial workspace load" should have resolved this issue.

@stamblerre stamblerre added WaitingForInfo Issue is not actionable because of missing required information, which needs to be provided. and removed NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. labels Jun 24, 2020
@stamblerre stamblerre modified the milestones: gopls/v0.7.0, gopls/v0.5.0 Jun 24, 2020
@myitcv
Copy link
Member Author

myitcv commented Jun 24, 2020

Agreed. The ordering of events is, from my perspective, entirely handled and enforced on the gopls side, and the govim tests now reflect that.

@myitcv myitcv closed this as completed Jun 24, 2020
@stamblerre stamblerre modified the milestones: gopls/v0.5.0, gopls/v0.4.4 Jul 9, 2020
@golang golang locked and limited conversation to collaborators Jul 9, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge gopls Issues related to the Go language server, gopls. Tools This label describes issues relating to any tools in the x/tools repository. WaitingForInfo Issue is not actionable because of missing required information, which needs to be provided.
Projects
None yet
Development

No branches or pull requests

4 participants