golang.org/x/tools@v0.21.0/go/analysis/unitchecker/vet_std_test.go (about) 1 // Copyright 2023 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package unitchecker_test 6 7 import ( 8 "os" 9 "os/exec" 10 "runtime" 11 "strings" 12 "testing" 13 14 "golang.org/x/tools/go/analysis/passes/appends" 15 "golang.org/x/tools/go/analysis/passes/asmdecl" 16 "golang.org/x/tools/go/analysis/passes/assign" 17 "golang.org/x/tools/go/analysis/passes/atomic" 18 "golang.org/x/tools/go/analysis/passes/bools" 19 "golang.org/x/tools/go/analysis/passes/buildtag" 20 "golang.org/x/tools/go/analysis/passes/cgocall" 21 "golang.org/x/tools/go/analysis/passes/composite" 22 "golang.org/x/tools/go/analysis/passes/copylock" 23 "golang.org/x/tools/go/analysis/passes/defers" 24 "golang.org/x/tools/go/analysis/passes/directive" 25 "golang.org/x/tools/go/analysis/passes/errorsas" 26 "golang.org/x/tools/go/analysis/passes/framepointer" 27 "golang.org/x/tools/go/analysis/passes/httpresponse" 28 "golang.org/x/tools/go/analysis/passes/ifaceassert" 29 "golang.org/x/tools/go/analysis/passes/loopclosure" 30 "golang.org/x/tools/go/analysis/passes/lostcancel" 31 "golang.org/x/tools/go/analysis/passes/nilfunc" 32 "golang.org/x/tools/go/analysis/passes/printf" 33 "golang.org/x/tools/go/analysis/passes/shift" 34 "golang.org/x/tools/go/analysis/passes/sigchanyzer" 35 "golang.org/x/tools/go/analysis/passes/stdmethods" 36 "golang.org/x/tools/go/analysis/passes/stdversion" 37 "golang.org/x/tools/go/analysis/passes/stringintconv" 38 "golang.org/x/tools/go/analysis/passes/structtag" 39 "golang.org/x/tools/go/analysis/passes/testinggoroutine" 40 "golang.org/x/tools/go/analysis/passes/tests" 41 "golang.org/x/tools/go/analysis/passes/timeformat" 42 "golang.org/x/tools/go/analysis/passes/unmarshal" 43 "golang.org/x/tools/go/analysis/passes/unreachable" 44 "golang.org/x/tools/go/analysis/passes/unusedresult" 45 "golang.org/x/tools/go/analysis/unitchecker" 46 ) 47 48 // vet is the entrypoint of this executable when ENTRYPOINT=vet. 49 // Keep consistent with the actual vet in GOROOT/src/cmd/vet/main.go. 50 func vet() { 51 unitchecker.Main( 52 appends.Analyzer, 53 asmdecl.Analyzer, 54 assign.Analyzer, 55 atomic.Analyzer, 56 bools.Analyzer, 57 buildtag.Analyzer, 58 cgocall.Analyzer, 59 composite.Analyzer, 60 copylock.Analyzer, 61 defers.Analyzer, 62 directive.Analyzer, 63 errorsas.Analyzer, 64 framepointer.Analyzer, 65 httpresponse.Analyzer, 66 ifaceassert.Analyzer, 67 loopclosure.Analyzer, 68 lostcancel.Analyzer, 69 nilfunc.Analyzer, 70 printf.Analyzer, 71 shift.Analyzer, 72 sigchanyzer.Analyzer, 73 stdmethods.Analyzer, 74 stdversion.Analyzer, 75 stringintconv.Analyzer, 76 structtag.Analyzer, 77 testinggoroutine.Analyzer, 78 tests.Analyzer, 79 timeformat.Analyzer, 80 unmarshal.Analyzer, 81 unreachable.Analyzer, 82 // unsafeptr.Analyzer, // currently reports findings in runtime 83 unusedresult.Analyzer, 84 ) 85 } 86 87 // TestVetStdlib runs the same analyzers as the actual vet over the 88 // standard library, using go vet and unitchecker, to ensure that 89 // there are no findings. 90 func TestVetStdlib(t *testing.T) { 91 if testing.Short() { 92 t.Skip("skipping in -short mode") 93 } 94 if version := runtime.Version(); !strings.HasPrefix(version, "devel") { 95 t.Skipf("This test is only wanted on development branches where code can be easily fixed. Skipping because runtime.Version=%q.", version) 96 } 97 98 cmd := exec.Command("go", "vet", "-vettool="+os.Args[0], "std") 99 cmd.Env = append(os.Environ(), "ENTRYPOINT=vet") 100 if out, err := cmd.CombinedOutput(); err != nil { 101 t.Errorf("go vet std failed (%v):\n%s", err, out) 102 } 103 }