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: tsprotocol unmarshals not handling union types #35688
Labels
FrozenDueToAge
gopls
Issues related to the Go language server, gopls.
NeedsInvestigation
Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Tools
This label describes issues relating to any tools in the x/tools repository.
Milestone
Comments
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
Nov 19, 2019
gopherbot
added
the
Tools
This label describes issues relating to any tools in the x/tools repository.
label
Nov 19, 2019
what would you like it to return? The protocol says it can be one of
Command, CodeAction, or a slice of either (that is, typescript would allow
an array with some CodeActions and some Commands.
(it's easy to change)
…On Tue, Nov 19, 2019 at 8:08 AM Paul Jolly ***@***.***> wrote:
What version of Go are you using (go version)?
$ go version
go version devel +0ac8739ad5 Mon Nov 18 15:11:03 2019 +0000 linux/amd64
$ go list -m golang.org/x/toolsgolang.org/x/tools v0.0.0-20191118222007-07fc4c7f2b98
$ go list -m golang.org/x/tools/goplsgolang.org/x/tools/gopls v0.1.8-0.20191118222007-07fc4c7f2b98
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=""
GOCACHE="/home/myitcv/.cache/go-build"
GOENV="/home/myitcv/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/myitcv/gostuff"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
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-build331350992=/tmp/go-build -gno-record-gcc-switches"
What did you do?
govim uses a vendored version of the LSP protocol client:
https://github.com/golang/tools/blob/07fc4c7f2b9857711f6306c76424246e8d6eab64/internal/lsp/protocol/protocol.go#L69-L74
(as well as a vendored version of the jsonrpc2 code).
Following https://go-review.googlesource.com/c/tools/+/207598 we are no
longer seeing concrete types be returned for calls to CodeAction.
govim (the client of the LSP server) ends up calling via:
https://github.com/golang/tools/blob/07fc4c7f2b9857711f6306c76424246e8d6eab64/internal/lsp/protocol/tsserver.go#L745-L751
Because the new return type of CodeAction is interface{}, the subsequent
unmarhsaling that happens at:
https://github.com/golang/tools/blob/07fc4c7f2b9857711f6306c76424246e8d6eab64/internal/jsonrpc2/jsonrpc2.go#L187-L189
results in use of the standard encoding/json types
<https://godoc.org/encoding/json#Unmarshal>:
bool, for JSON booleans
float64, for JSON numbers
string, for JSON strings
[]interface{}, for JSON arrays
map[string]interface{}, for JSON objects
nil for JSON null
Which means that uses within govim can no longer type assert to the
concrete types defined as part of the protocol that form the union type.
What did you expect to see?
Concrete types returned by a call to
*internal/lsp/protocol.serverDispatcher.CodeAction()
What did you see instead?
Generic encoding/json.Unmarshal types returned by a call to
*internal/lsp/protocol.serverDispatcher.CodeAction()
------------------------------
cc @stamblerre <https://github.com/stamblerre> @pjweinb
<https://github.com/pjweinb>
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#35688?email_source=notifications&email_token=ABJIAI5LBJILBITMPMZDTZ3QUPQLDA5CNFSM4JPDBNY2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4H2K2GGA>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABJIAI2OFPFRB4GMVWUJQZTQUPQLDANCNFSM4JPDBNYQ>
.
|
looks like []CodeAction would match the gopls code.
On Tue, Nov 19, 2019 at 8:13 AM Peter Weinberger (温博格) <pjw@google.com>
wrote:
… what would you like it to return? The protocol says it can be one of
Command, CodeAction, or a slice of either (that is, typescript would allow
an array with some CodeActions and some Commands.
(it's easy to change)
On Tue, Nov 19, 2019 at 8:08 AM Paul Jolly ***@***.***>
wrote:
> What version of Go are you using (go version)?
>
> $ go version
> go version devel +0ac8739ad5 Mon Nov 18 15:11:03 2019 +0000 linux/amd64
> $ go list -m golang.org/x/toolsgolang.org/x/tools v0.0.0-20191118222007-07fc4c7f2b98
> $ go list -m golang.org/x/tools/goplsgolang.org/x/tools/gopls v0.1.8-0.20191118222007-07fc4c7f2b98
>
> 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=""
> GOCACHE="/home/myitcv/.cache/go-build"
> GOENV="/home/myitcv/.config/go/env"
> GOEXE=""
> GOFLAGS=""
> GOHOSTARCH="amd64"
> GOHOSTOS="linux"
> GOINSECURE=""
> GONOPROXY=""
> GONOSUMDB=""
> GOOS="linux"
> GOPATH="/home/myitcv/gostuff"
> GOPRIVATE=""
> GOPROXY="https://proxy.golang.org,direct"
> 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-build331350992=/tmp/go-build -gno-record-gcc-switches"
>
> What did you do?
>
> govim uses a vendored version of the LSP protocol client:
>
>
> https://github.com/golang/tools/blob/07fc4c7f2b9857711f6306c76424246e8d6eab64/internal/lsp/protocol/protocol.go#L69-L74
>
> (as well as a vendored version of the jsonrpc2 code).
>
> Following https://go-review.googlesource.com/c/tools/+/207598 we are no
> longer seeing concrete types be returned for calls to CodeAction.
>
> govim (the client of the LSP server) ends up calling via:
>
>
> https://github.com/golang/tools/blob/07fc4c7f2b9857711f6306c76424246e8d6eab64/internal/lsp/protocol/tsserver.go#L745-L751
>
> Because the new return type of CodeAction is interface{}, the subsequent
> unmarhsaling that happens at:
>
>
> https://github.com/golang/tools/blob/07fc4c7f2b9857711f6306c76424246e8d6eab64/internal/jsonrpc2/jsonrpc2.go#L187-L189
>
> results in use of the standard encoding/json types
> <https://godoc.org/encoding/json#Unmarshal>:
>
> bool, for JSON booleans
> float64, for JSON numbers
> string, for JSON strings
> []interface{}, for JSON arrays
> map[string]interface{}, for JSON objects
> nil for JSON null
>
> Which means that uses within govim can no longer type assert to the
> concrete types defined as part of the protocol that form the union type.
> What did you expect to see?
>
> Concrete types returned by a call to
> *internal/lsp/protocol.serverDispatcher.CodeAction()
> What did you see instead?
>
> Generic encoding/json.Unmarshal types returned by a call to
> *internal/lsp/protocol.serverDispatcher.CodeAction()
> ------------------------------
>
> cc @stamblerre <https://github.com/stamblerre> @pjweinb
> <https://github.com/pjweinb>
>
> —
> You are receiving this because you were mentioned.
> Reply to this email directly, view it on GitHub
> <#35688?email_source=notifications&email_token=ABJIAI5LBJILBITMPMZDTZ3QUPQLDA5CNFSM4JPDBNY2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4H2K2GGA>,
> or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/ABJIAI2OFPFRB4GMVWUJQZTQUPQLDANCNFSM4JPDBNYQ>
> .
>
|
Concrete values of whatever is returned by i.e. if |
Hi Paul. It's change 207898
<https://go-review.googlesource.com/c/tools/+/207898>
I would have put you on the reviewer list, but I didn't get your email
address. what should I have used?
…On Tue, Nov 19, 2019 at 8:21 AM Paul Jolly ***@***.***> wrote:
Concrete values of whatever is returned by gopls, I guess?
i.e. if gopls returns a Command, return a value of that type. If it
returns []CodeAction, have it return that type etc?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#35688?email_source=notifications&email_token=ABJIAIZFYXF67UOJEPUI6L3QUPR4VA5CNFSM4JPDBNY2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEEOE62I#issuecomment-555503465>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABJIAI35HJ6Y5VOP34QOFDTQUPR4VANCNFSM4JPDBNYQ>
.
|
Thanks @pjweinb - I replied on the CL. |
Change https://golang.org/cl/207898 mentions this issue: |
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.
NeedsInvestigation
Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Tools
This label describes issues relating to any tools in the x/tools repository.
What version of Go are you using (
go version
)?Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (
go env
)?go env
OutputWhat did you do?
govim
uses a vendored version of the LSP protocol client:https://github.com/golang/tools/blob/07fc4c7f2b9857711f6306c76424246e8d6eab64/internal/lsp/protocol/protocol.go#L69-L74
(as well as a vendored version of the jsonrpc2 code).
Following https://go-review.googlesource.com/c/tools/+/207598 we are no longer seeing concrete types be returned for calls to
CodeAction
.govim
(the client of the LSP server) ends up calling via:https://github.com/golang/tools/blob/07fc4c7f2b9857711f6306c76424246e8d6eab64/internal/lsp/protocol/tsserver.go#L745-L751
Because the new return type of
CodeAction
isinterface{}
, the subsequent unmarhsaling that happens at:https://github.com/golang/tools/blob/07fc4c7f2b9857711f6306c76424246e8d6eab64/internal/jsonrpc2/jsonrpc2.go#L187-L189
results in use of the standard
encoding/json
types:Which means that uses within
govim
can no longer type assert to the concrete types defined as part of the protocol that form the union type.What did you expect to see?
Concrete types returned by a call to
*internal/lsp/protocol.serverDispatcher.CodeAction()
What did you see instead?
Generic
encoding/json.Unmarshal
types returned by a call to*internal/lsp/protocol.serverDispatcher.CodeAction()
cc @stamblerre @pjweinb
The text was updated successfully, but these errors were encountered: