mirror of
https://github.com/golang/go
synced 2024-09-29 20:55:07 +00:00
cmd/go: set GoVersion for files on the command line with vet
For: #65612 Fixes: #66092 For now, we will align the behavior such that vet and the compiler agree that gover.Local() will be used for command-line-files. We expect to change this to set the goversion as the containing module's go version. Change-Id: If7f2ea3a82e8e876716f18dacc021026de175a93 Reviewed-on: https://go-review.googlesource.com/c/go/+/593156 Reviewed-by: Michael Matloob <matloob@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Sam Thanawalla <samthanawalla@google.com>
This commit is contained in:
parent
22cf1e7f7e
commit
144c96fac3
|
@ -1180,6 +1180,7 @@ func buildVetConfig(a *Action, srcfiles []string) {
|
|||
PackageFile: make(map[string]string),
|
||||
Standard: make(map[string]bool),
|
||||
}
|
||||
vcfg.GoVersion = "go" + gover.Local()
|
||||
if a.Package.Module != nil {
|
||||
v := a.Package.Module.GoVersion
|
||||
if v == "" {
|
||||
|
|
|
@ -66,15 +66,18 @@ func (gcToolchain) gc(b *Builder, a *Action, archive string, importcfg, embedcfg
|
|||
|
||||
pkgpath := pkgPath(a)
|
||||
defaultGcFlags := []string{"-p", pkgpath}
|
||||
vers := gover.Local()
|
||||
if p.Module != nil {
|
||||
v := p.Module.GoVersion
|
||||
if v == "" {
|
||||
v = gover.DefaultGoModVersion
|
||||
}
|
||||
// TODO(samthanawalla): Investigate when allowedVersion is not true.
|
||||
if allowedVersion(v) {
|
||||
defaultGcFlags = append(defaultGcFlags, "-lang=go"+gover.Lang(v))
|
||||
vers = v
|
||||
}
|
||||
}
|
||||
defaultGcFlags = append(defaultGcFlags, "-lang=go"+gover.Lang(vers))
|
||||
if p.Standard {
|
||||
defaultGcFlags = append(defaultGcFlags, "-std")
|
||||
}
|
||||
|
|
10
src/cmd/go/testdata/script/run_vers.txt
vendored
Normal file
10
src/cmd/go/testdata/script/run_vers.txt
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
# go.dev/issue/66092
|
||||
# This test ensures that files listed on the commandline will pass
|
||||
# the language version to the compiler.
|
||||
# All compilations should specify some -lang.
|
||||
|
||||
go build -n x.go
|
||||
stderr '-lang=go1\.[0-9]+'
|
||||
|
||||
-- x.go --
|
||||
package main
|
43
src/cmd/go/testdata/script/vet_commandline.txt
vendored
Normal file
43
src/cmd/go/testdata/script/vet_commandline.txt
vendored
Normal file
|
@ -0,0 +1,43 @@
|
|||
# go.dev/issue/65612
|
||||
# go vet should set the GoVersion for command line files.
|
||||
|
||||
env TESTGO_VERSION=go1.22.1
|
||||
env TESTGO_VERSION_SWITCH=switch
|
||||
|
||||
go vet -n -json example.com/m
|
||||
stderr '"GoVersion": "go1.22.0"'
|
||||
|
||||
# A command line file should use the local go version.
|
||||
go vet -n -json main.go
|
||||
stderr '"GoVersion": "go1.22.1"'
|
||||
|
||||
# In workspace mode, the command line file version should use go.work version.
|
||||
cp go.work.orig go.work
|
||||
go vet -n -json example.com/m
|
||||
stderr '"GoVersion": "go1.22.0'
|
||||
|
||||
go vet -n -json main.go
|
||||
stderr '"GoVersion": "go1.22.2'
|
||||
|
||||
# Without go.mod or go.work, the command line file version should use local go version .
|
||||
env TESTGO_VERSION=go1.22.3
|
||||
rm go.mod
|
||||
rm go.work
|
||||
|
||||
! go vet -n -json example.com/m
|
||||
|
||||
go vet -n -json main.go
|
||||
stderr '"GoVersion": "go1.22.3"'
|
||||
|
||||
-- go.mod --
|
||||
module example.com/m
|
||||
|
||||
go 1.22.0
|
||||
|
||||
-- go.work.orig --
|
||||
go 1.22.2
|
||||
|
||||
use .
|
||||
|
||||
-- main.go --
|
||||
package main
|
Loading…
Reference in a new issue