mirror of https://github.com/golang/go.git
cmd/go: pass GoVersion in vet config
When invoking a vet tool with -vettool (or vet itself), we need to pass the package's GoVersion to use when analyzing the package. The test of this behavior is in the x/tools/go/analysis CL 507880. For #61176. Change-Id: I3b5a90fcd19a0adc7fb29366e106e18f722fc061 Reviewed-on: https://go-review.googlesource.com/c/go/+/507976 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com> Run-TryBot: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
b490bdc27d
commit
6305d7fdd3
|
|
@ -1115,6 +1115,7 @@ type vetConfig struct {
|
||||||
PackageVetx map[string]string // map package path to vetx data from earlier vet run
|
PackageVetx map[string]string // map package path to vetx data from earlier vet run
|
||||||
VetxOnly bool // only compute vetx data; don't report detected problems
|
VetxOnly bool // only compute vetx data; don't report detected problems
|
||||||
VetxOutput string // write vetx data to this output file
|
VetxOutput string // write vetx data to this output file
|
||||||
|
GoVersion string // Go version for package
|
||||||
|
|
||||||
SucceedOnTypecheckFailure bool // awful hack; see #18395 and below
|
SucceedOnTypecheckFailure bool // awful hack; see #18395 and below
|
||||||
}
|
}
|
||||||
|
|
@ -1149,6 +1150,13 @@ func buildVetConfig(a *Action, srcfiles []string) {
|
||||||
PackageFile: make(map[string]string),
|
PackageFile: make(map[string]string),
|
||||||
Standard: make(map[string]bool),
|
Standard: make(map[string]bool),
|
||||||
}
|
}
|
||||||
|
if a.Package.Module != nil {
|
||||||
|
v := a.Package.Module.GoVersion
|
||||||
|
if v == "" {
|
||||||
|
v = gover.DefaultGoModVersion
|
||||||
|
}
|
||||||
|
vcfg.GoVersion = "go" + v
|
||||||
|
}
|
||||||
a.vetCfg = vcfg
|
a.vetCfg = vcfg
|
||||||
for i, raw := range a.Package.Internal.RawImports {
|
for i, raw := range a.Package.Internal.RawImports {
|
||||||
final := a.Package.Imports[i]
|
final := a.Package.Imports[i]
|
||||||
|
|
|
||||||
|
|
@ -85,19 +85,7 @@ func (gcToolchain) gc(b *Builder, a *Action, archive string, importcfg, embedcfg
|
||||||
if p.Module != nil {
|
if p.Module != nil {
|
||||||
v := p.Module.GoVersion
|
v := p.Module.GoVersion
|
||||||
if v == "" {
|
if v == "" {
|
||||||
// We started adding a 'go' directive to the go.mod file unconditionally
|
v = gover.DefaultGoModVersion
|
||||||
// as of Go 1.12, so any module that still lacks such a directive must
|
|
||||||
// either have been authored before then, or have a hand-edited go.mod
|
|
||||||
// file that hasn't been updated by cmd/go since that edit.
|
|
||||||
//
|
|
||||||
// Unfortunately, through at least Go 1.16 we didn't add versions to
|
|
||||||
// vendor/modules.txt. So this could also be a vendored 1.16 dependency.
|
|
||||||
//
|
|
||||||
// Fortunately, there were no breaking changes to the language between Go
|
|
||||||
// 1.11 and 1.16, so if we assume Go 1.16 semantics we will not introduce
|
|
||||||
// any spurious errors — we will only mask errors, and not particularly
|
|
||||||
// important ones at that.
|
|
||||||
v = "1.16"
|
|
||||||
}
|
}
|
||||||
if allowedVersion(v) {
|
if allowedVersion(v) {
|
||||||
defaultGcFlags = append(defaultGcFlags, "-lang=go"+gover.Lang(v))
|
defaultGcFlags = append(defaultGcFlags, "-lang=go"+gover.Lang(v))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue