Commit 7e6e502f authored by Russ Cox's avatar Russ Cox

cmd/go: fix 'go vet' of package with external tests

For example, fixes 'go vet syscall', which has source
files in package syscall_test.

Fixes #8511.

LGTM=r
R=golang-codereviews, r
CC=golang-codereviews, iant
https://golang.org/cl/152220044
parent 9a5b055b
......@@ -1085,6 +1085,20 @@ fi
unset GOPATH
rm -rf $d
TEST go vet with external tests
d=$(mktemp -d -t testgoXXX)
export GOPATH=$(pwd)/testdata
if ./testgo vet vetpkg >$d/err 2>&1; then
echo "go vet vetpkg passes incorrectly"
ok=false
elif ! grep -q 'missing argument for Printf' $d/err; then
echo "go vet vetpkg did not find missing argument for Printf"
cat $d/err
ok=false
fi
unset GOPATH
rm -rf $d
# clean up
if $started; then stop; fi
rm -rf testdata/bin testdata/bin1
......
package p
import "fmt"
func f() {
fmt.Printf("%d")
}
......@@ -4,6 +4,8 @@
package main
import "path/filepath"
func init() {
addBuildFlagsNX(cmdVet)
}
......@@ -28,10 +30,21 @@ See also: go fmt, go fix.
}
func runVet(cmd *Command, args []string) {
for _, pkg := range packages(args) {
// Use pkg.gofiles instead of pkg.Dir so that
// the command only applies to this package,
// not to packages in subdirectories.
run(tool("vet"), relPaths(stringList(pkg.gofiles, pkg.sfiles)))
for _, p := range packages(args) {
// Vet expects to be given a set of files all from the same package.
// Run once for package p and once for package p_test.
if len(p.GoFiles)+len(p.CgoFiles)+len(p.TestGoFiles) > 0 {
runVetFiles(p, stringList(p.GoFiles, p.CgoFiles, p.TestGoFiles, p.SFiles))
}
if len(p.XTestGoFiles) > 0 {
runVetFiles(p, stringList(p.XTestGoFiles))
}
}
}
func runVetFiles(p *Package, files []string) {
for i := range files {
files[i] = filepath.Join(p.Dir, files[i])
}
run(tool("vet"), relPaths(files))
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment