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

Open
myitcv opened this issue Jun 5, 2019 · 0 comments

Comments

Projects
None yet
2 participants
@myitcv
Copy link
Member

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

@gopherbot gopherbot added this to the Unreleased milestone Jun 5, 2019

myitcv added a commit to myitcv/govim that referenced this issue Jun 13, 2019

myitcv added a commit to myitcv/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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.