Skip to content

Commit 0e2e7ab

Browse files
committed
cmd/go/internal/vet: print line numbers appropriately on list errors
Fixes #36173 For reasons that are unclear to me, this commit: f1d5ce0 introduces a TestPackagesFor function that strips line numbers from error messages. This commit introduces a new version of that function for 'go vet' that always keeps the line numbers.
1 parent 753d56d commit 0e2e7ab

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

src/cmd/go/internal/vet/vet.go

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func runVet(cmd *base.Command, args []string) {
7070

7171
root := &work.Action{Mode: "go vet"}
7272
for _, p := range pkgs {
73-
_, ptest, pxtest, err := load.TestPackagesFor(p, nil)
73+
_, ptest, pxtest, err := testPackagesFor(p)
7474
if err != nil {
7575
base.Errorf("%v", err)
7676
continue
@@ -88,3 +88,34 @@ func runVet(cmd *base.Command, args []string) {
8888
}
8989
b.Do(root)
9090
}
91+
92+
// testPackagesFor is like load.TestPackagesAndErrors but it returns
93+
// an error if the test packages or their dependencies have errors.
94+
// Only test packages without errors are returned.
95+
func testPackagesFor(p *load.Package) (pmain, ptest, pxtest *load.Package, err error) {
96+
pmain, ptest, pxtest = load.TestPackagesAndErrors(p, nil)
97+
for _, p1 := range []*load.Package{ptest, pxtest, pmain} {
98+
if p1 == nil {
99+
// pxtest may be nil
100+
continue
101+
}
102+
if p1.Error != nil {
103+
err = p1.Error
104+
break
105+
}
106+
if len(p1.DepsErrors) > 0 {
107+
err = p1.DepsErrors[0]
108+
break
109+
}
110+
}
111+
if pmain.Error != nil || len(pmain.DepsErrors) > 0 {
112+
pmain = nil
113+
}
114+
if ptest.Error != nil || len(ptest.DepsErrors) > 0 {
115+
ptest = nil
116+
}
117+
if pxtest != nil && (pxtest.Error != nil || len(pxtest.DepsErrors) > 0) {
118+
pxtest = nil
119+
}
120+
return pmain, ptest, pxtest, err
121+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
env GO111MODULE=off
2+
3+
# Issue 36173. Verify that "go vet" prints line numbers on load errors.
4+
5+
! go vet a/a_test.go
6+
stderr 'a_test.go:4:3: use of internal package'
7+
8+
-- a/a.go --
9+
package a
10+
11+
-- a/a_test.go --
12+
package a
13+
14+
import (
15+
_ "a/x/internal/y"
16+
)
17+
18+
-- a/x/internal/y/y.go --
19+
package y

0 commit comments

Comments
 (0)