review

review patchsets using your default editor
Log | Files | Refs

main.go (4371B)


      1 // review-vet is the analysis tool review hands to go vet with -vettool: the
      2 // analysers vet runs by default, and the ones from golang.org/x/tools it
      3 // leaves out — nilness, shadow, unusedwrite, the checks on sort, reflect and
      4 // atomic misuse, and the modernize suite. Build it and put it on the path:
      5 //
      6 //	go build -o ~/go/bin/review-vet ./sidecar/govet
      7 //
      8 // Without it, review runs vet's default set.
      9 package main
     10 
     11 import (
     12 	"golang.org/x/tools/go/analysis"
     13 	"golang.org/x/tools/go/analysis/multichecker"
     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/atomicalign"
     19 	"golang.org/x/tools/go/analysis/passes/bools"
     20 	"golang.org/x/tools/go/analysis/passes/buildtag"
     21 	"golang.org/x/tools/go/analysis/passes/cgocall"
     22 	"golang.org/x/tools/go/analysis/passes/composite"
     23 	"golang.org/x/tools/go/analysis/passes/copylock"
     24 	"golang.org/x/tools/go/analysis/passes/deepequalerrors"
     25 	"golang.org/x/tools/go/analysis/passes/defers"
     26 	"golang.org/x/tools/go/analysis/passes/directive"
     27 	"golang.org/x/tools/go/analysis/passes/errorsas"
     28 	"golang.org/x/tools/go/analysis/passes/framepointer"
     29 	"golang.org/x/tools/go/analysis/passes/hostport"
     30 	"golang.org/x/tools/go/analysis/passes/httpmux"
     31 	"golang.org/x/tools/go/analysis/passes/httpresponse"
     32 	"golang.org/x/tools/go/analysis/passes/ifaceassert"
     33 	"golang.org/x/tools/go/analysis/passes/loopclosure"
     34 	"golang.org/x/tools/go/analysis/passes/lostcancel"
     35 	"golang.org/x/tools/go/analysis/passes/modernize"
     36 	"golang.org/x/tools/go/analysis/passes/nilfunc"
     37 	"golang.org/x/tools/go/analysis/passes/nilness"
     38 	"golang.org/x/tools/go/analysis/passes/printf"
     39 	"golang.org/x/tools/go/analysis/passes/reflectvaluecompare"
     40 	"golang.org/x/tools/go/analysis/passes/scannererr"
     41 	"golang.org/x/tools/go/analysis/passes/shadow"
     42 	"golang.org/x/tools/go/analysis/passes/shift"
     43 	"golang.org/x/tools/go/analysis/passes/sigchanyzer"
     44 	"golang.org/x/tools/go/analysis/passes/slog"
     45 	"golang.org/x/tools/go/analysis/passes/sortslice"
     46 	"golang.org/x/tools/go/analysis/passes/sqlrowserr"
     47 	"golang.org/x/tools/go/analysis/passes/stdmethods"
     48 	"golang.org/x/tools/go/analysis/passes/stdversion"
     49 	"golang.org/x/tools/go/analysis/passes/stringintconv"
     50 	"golang.org/x/tools/go/analysis/passes/structtag"
     51 	"golang.org/x/tools/go/analysis/passes/testinggoroutine"
     52 	"golang.org/x/tools/go/analysis/passes/tests"
     53 	"golang.org/x/tools/go/analysis/passes/timeformat"
     54 	"golang.org/x/tools/go/analysis/passes/unmarshal"
     55 	"golang.org/x/tools/go/analysis/passes/unreachable"
     56 	"golang.org/x/tools/go/analysis/passes/unsafeptr"
     57 	"golang.org/x/tools/go/analysis/passes/unusedresult"
     58 	"golang.org/x/tools/go/analysis/passes/unusedwrite"
     59 	"golang.org/x/tools/go/analysis/passes/waitgroup"
     60 )
     61 
     62 func main() {
     63 	// Vet's own set first, as vet runs it.
     64 	analyzers := []*analysis.Analyzer{
     65 		appends.Analyzer, asmdecl.Analyzer, assign.Analyzer, atomic.Analyzer, bools.Analyzer,
     66 		buildtag.Analyzer, cgocall.Analyzer, composite.Analyzer, copylock.Analyzer, defers.Analyzer,
     67 		directive.Analyzer, errorsas.Analyzer, framepointer.Analyzer, hostport.Analyzer,
     68 		httpresponse.Analyzer, ifaceassert.Analyzer, loopclosure.Analyzer, lostcancel.Analyzer,
     69 		nilfunc.Analyzer, printf.Analyzer, shift.Analyzer, sigchanyzer.Analyzer, slog.Analyzer,
     70 		stdmethods.Analyzer, stdversion.Analyzer, stringintconv.Analyzer, structtag.Analyzer,
     71 		testinggoroutine.Analyzer, tests.Analyzer, timeformat.Analyzer, unmarshal.Analyzer,
     72 		unreachable.Analyzer, unsafeptr.Analyzer, unusedresult.Analyzer, waitgroup.Analyzer,
     73 	}
     74 	// The ones vet leaves out. nilness needs SSA and finds nil dereferences
     75 	// and impossible comparisons; the sort, reflect, sql and bufio checks
     76 	// find misuse the type checker allows; shadow and unusedwrite are
     77 	// judgement calls, reported as such.
     78 	analyzers = append(analyzers,
     79 		nilness.Analyzer, atomicalign.Analyzer, deepequalerrors.Analyzer, httpmux.Analyzer,
     80 		reflectvaluecompare.Analyzer, scannererr.Analyzer, sortslice.Analyzer, sqlrowserr.Analyzer,
     81 		shadow.Analyzer, unusedwrite.Analyzer,
     82 	)
     83 	// modernize reports an older idiom where a newer one exists: taste, and
     84 	// review reports it as a note.
     85 	analyzers = append(analyzers, modernize.Suite...)
     86 	multichecker.Main(analyzers...)
     87 }