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
Assignees
Milestone

Comments

@myitcv
Copy link
Member

@myitcv 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

@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
Whilst we await a solution to golang/go#32444.
myitcv added a commit to govim/govim that referenced this issue Jun 13, 2019
Whilst we await a solution to golang/go#32444.
@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 label Sep 12, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
3 participants
You can’t perform that action at this time.