请在提交问题之前回答以下问题。谢谢!
你做了什么?
三个文件。what.go
:
package what
func doSomething() {
var s SomeStruct
_ = s.StringAbove()
_ = s.StringBelow()
}
type SomeStruct struct {
readyChan chan struct{}
}
// StringAbove is a function above ready().
func (s *SomeStruct) StringAbove() string {
return "SomeStruct"
}
func (s *SomeStruct) ready() chan struct{} {
return s.readyChan
}
// StringBelow is a function below ready()
func (s *SomeStruct) StringBelow() string {
return "SomeStruct"
}
type OtherType struct {
v string
}
func (o OtherType) String() string {
return o.v
}
what_test.go
package what_test
import (
"testing"
"what"
)
func TestSomething(t *testing.T) {
var s what.SomeStruct
_ = s.StringAbove()
_ = s.StringBelow()
}
func TestOther(t *testing.T) {
var o what.OtherType
_ = o.String()
}
what_test2.go
package what
import (
"testing"
)
func TestSomething2(t *testing.T) {
var s SomeStruct
_ = s.StringAbove()
_ = s.StringBelow()
}
func TestOther2(t *testing.T) {
var o OtherType
_ = o.String()
}
现在,从 ready
的返回值中删除 struct
后的 {}
。
你期望看到什么?
最好能从这种状况中恢复过来(这可能是另一个关于如何处理这些解析问题的问题),并且与该问题一致的诊断信息。
你看到了什么?
没有恢复,所以之后的所有内容都出了问题。但是,这只对那一种类型有效,而且事物的诊断/悬停行为相当不一致。
屏幕录制:https://streamable.com/xc1k0
https://gist.github.com/zikaeroh/e752451719bff6020ba8a981678c9184
构建信息
golang.org/x/tools/gopls master
golang.org/x/tools/gopls@v0.1.8-0.20200116062425-473961ec044c h1:1TIoDnmETx0ZptB3IkN+lN1z/gkfEtlCEjQmD51vhsM=
github.com/BurntSushi/toml@v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/sergi/go-diff@v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
golang.org/x/mod@v0.1.1-0.20191105210325-c90efee705ee h1:WG0RUwxtNT4qqaXX3DPA8zHFNm/D9xaBpxzHt1WcA/E=
golang.org/x/sync@v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
golang.org/x/tools@v0.0.0-20200116062425-473961ec044c h1:D0OxfnjPaEGt7AluXNompYUYGhoY3u6+bValgqfd1vE=
golang.org/x/xerrors@v0.0.0-20191011141410-1b5146add898 h1:/atklqdjdhuosWIl6AIbOeHJjicWYPqR9bpxqxYG2pA=
honnef.co/go/tools@v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
mvdan.cc/xurls/v2@v2.1.0 h1:KaMb5GLhlcSX+e+qhbRJODnUUBvlw01jt4yrjFIHAuA=
Go信息
go version go1.13.6 linux/amd64
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/jake/.cache/go-build"
GOENV="/home/jake/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/jake/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/lib/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/jake/testproj/what/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-build340140430=/tmp/go-build -gno-record-gcc-switches"
2条答案
按热度按时间kpbwa7wx1#
感谢报告。这与go/parser的常见模式相符,即它无法恢复并导致以下断点下方定义的所有符号变为未定义。我不确定解析器中是否会很快修复这个问题,但我会将此问题归类到go/parser下。
gopyfrb32#
https://golang.org/cl/259817提到了这个问题:
go/parser: Improve error when interface or struct parsing fails