mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/go/internal/vet: skip -fix on pkgs from vendor or non-main mod
This change causes go fix (and go vet -fix) to skip applying fixes to any package in the vendor/ tree, including the GOROOT vendor packages that are part of std, and to any package from a non-main module (since these usually come from the readonly module cache). + test Fixes golang/go#76479 Change-Id: Ifdb73e09fbe413b4d99a92e5081b8ea43460be0b Reviewed-on: https://go-review.googlesource.com/c/go/+/727300 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Michael Matloob <matloob@golang.org> Reviewed-by: Michael Matloob <matloob@google.com> Auto-Submit: Alan Donovan <adonovan@google.com>
This commit is contained in:
parent
745349712e
commit
c270e71835
2 changed files with 53 additions and 0 deletions
|
|
@ -262,6 +262,15 @@ func run(ctx context.Context, cmd *base.Command, args []string) {
|
|||
// will only be executed in VetxOnly mode, for facts but not
|
||||
// diagnostics.
|
||||
for _, p := range pkgs {
|
||||
// Don't apply fixes to vendored packages, including
|
||||
// the GOROOT vendor packages that are part of std,
|
||||
// or to packages from non-main modules (#76479).
|
||||
if applyFixes {
|
||||
if p.Standard && strings.HasPrefix(p.ImportPath, "vendor/") ||
|
||||
p.Module != nil && !p.Module.Main {
|
||||
continue
|
||||
}
|
||||
}
|
||||
_, ptest, pxtest, perr := load.TestPackagesFor(moduleLoaderState, ctx, pkgOpts, p, nil)
|
||||
if perr != nil {
|
||||
base.Errorf("%v", perr.Error)
|
||||
|
|
|
|||
44
src/cmd/go/testdata/script/fix_vendor.txt
vendored
Normal file
44
src/cmd/go/testdata/script/fix_vendor.txt
vendored
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
# Test that go fix skips fixes to non-main and/or vendored packages.
|
||||
# (It uses the interface{} -> any modernizer.)
|
||||
|
||||
# Create vendor tree programmatically to avoid
|
||||
# having to hardcode sums in this txtar archive.
|
||||
go mod vendor
|
||||
|
||||
# Show fixes on two packages, one in the main module
|
||||
# and one in a vendored dependency.
|
||||
# Only the main one (a) is shown.
|
||||
go fix -diff example.com/a example.com/b
|
||||
stdout 'a[/\\]a.go'
|
||||
stdout '\-var _ interface\{\}'
|
||||
stdout '\+var _ any'
|
||||
! stdout 'b[/\\]b.go'
|
||||
|
||||
# Apply fixes to the same two packages.
|
||||
# Only the main module was modified.
|
||||
go fix example.com/a example.com/b
|
||||
grep 'var _ any' a/a.go
|
||||
grep 'var _ interface{}' b/b.go
|
||||
grep 'var _ interface{}' vendor/example.com/b/b.go
|
||||
|
||||
-- go.mod --
|
||||
module example.com
|
||||
go 1.26
|
||||
|
||||
require "example.com/b" v0.0.0
|
||||
replace "example.com/b" => ./b
|
||||
|
||||
-- a/a.go --
|
||||
package a
|
||||
|
||||
import _ "example.com/b"
|
||||
|
||||
var _ interface{}
|
||||
|
||||
-- b/go.mod --
|
||||
module example.com/b
|
||||
|
||||
-- b/b.go --
|
||||
package b
|
||||
|
||||
var _ interface{}
|
||||
Loading…
Add table
Add a link
Reference in a new issue