go/parser: 格式错误函数字面量的错误信息

uqjltbpv  于 2个月前  发布在  Go
关注(0)|答案(4)|浏览(33)

你正在使用的Go版本是什么( go version )?

$ go version
go version devel +8e0be05ec7 Sun Jan 19 14:04:09 2020 +0000 linux/amd64
$ go list -m golang.org/x/tools
golang.org/x/tools v0.0.0-20200121200311-d456b1cd8c86
$ go list -m golang.org/x/tools/gopls
golang.org/x/tools/gopls v0.1.8-0.20200121200311-d456b1cd8c86

这个问题在最新版本中是否会重现?

是的

你正在使用什么操作系统和处理器架构( go env )?

go env 输出

$ go env
GO111MODULE=""
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/.vim/plugged/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-build878422207=/tmp/go-build -gno-record-gcc-switches"

你做了什么?

对于以下文件的诊断信息有误导性:

package main

func main() {
	_ = func(format string, args ...interface) error {
		return nil
	}
}

我们得到的是:

PublishDiagnostics callback: &protocol.PublishDiagnosticsParams{
    URI:         "file:///home/myitcv/gostuff/src/github.com/myitcv/playground/main.go",
    Version:     36,
    Diagnostics: {
        {
            Range: protocol.Range{
                Start: protocol.Position{Line:3, Character:5},
                End:   protocol.Position{Line:3, Character:5},
            },
            Severity:           1,
            Code:               nil,
            Source:             "syntax",
            Message:            "expected expression",
            Tags:               nil,
            RelatedInformation: nil,
        },
    },
}

与编译器给出的信息进行对比:

./main.go:4:43: syntax error: unexpected ), expecting {
./main.go:5:3: syntax error: unexpected return, expecting comma or )
./main.go:7:1: syntax error: non-declaration statement outside function body

你期望看到什么?

更好的诊断信息。

你实际看到了什么?

如上所述
标记为 gopls/v1.0.0 ,因为这对 v0.3.0 不是关键问题。
cc @stamblerre
FYI @leitzler

2w3kk1z5

2w3kk1z51#

这将来自go/parser或其他地方,对吗?我认为gopls无法对此做任何改进。

vsaztqbk

vsaztqbk2#

是的,这个错误来自go/parser。一个最小的复现可以在此处找到:https://play.golang.org/p/ca24wvyr5Wl 。这似乎是一个示例,其中go/parser的错误应该更新以匹配编译器的错误。我将更改问题标题以反映这一点。

nr9pn0ug

nr9pn0ug4#

https://golang.org/cl/259817提到了这个问题:go/parser: Improve error message to user when interface parsing fails

相关问题