 bf27481efd
			
		
	
	
		bf27481efd
		
			
		
	
	
	
	
		
			
			full diff: https://github.com/dominikh/go-tools/compare/2019.2.3...2020.1.3 Also updates tests to accomodate updated rules: --- FAIL: TestSourcesFromTestdataWithIssuesDir/staticcheck.go (0.43s) linters_test.go:137: [run --disable-all --print-issued-lines=false --print-linter-name=false --out-format=line-number --max-same-issues=10 -Estaticcheck --no-config testdata/staticcheck.go] linters_test.go:33: Error Trace: linters_test.go:33 linters_test.go:138 linters_test.go:53 Error: Received unexpected error: staticcheck.go:11: no match for `self-assignment of x to x` vs ["SA4006: this value of `x` is never used"] in: staticcheck.go:11:2: SA4006: this value of `x` is never used unmatched errors staticcheck.go:11:2: SA4006: this value of `x` is never used Test: TestSourcesFromTestdataWithIssuesDir/staticcheck.go Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
		
			
				
	
	
		
			268 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			268 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package staticcheck
 | |
| 
 | |
| import (
 | |
| 	"honnef.co/go/tools/facts"
 | |
| 	"honnef.co/go/tools/internal/passes/buildir"
 | |
| 	"honnef.co/go/tools/lint/lintutil"
 | |
| 
 | |
| 	"golang.org/x/tools/go/analysis"
 | |
| 	"golang.org/x/tools/go/analysis/passes/inspect"
 | |
| )
 | |
| 
 | |
| func makeCallCheckerAnalyzer(rules map[string]CallCheck, extraReqs ...*analysis.Analyzer) *analysis.Analyzer {
 | |
| 	reqs := []*analysis.Analyzer{buildir.Analyzer, facts.TokenFile}
 | |
| 	reqs = append(reqs, extraReqs...)
 | |
| 	return &analysis.Analyzer{
 | |
| 		Run:      callChecker(rules),
 | |
| 		Requires: reqs,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| var Analyzers = lintutil.InitializeAnalyzers(Docs, map[string]*analysis.Analyzer{
 | |
| 	"SA1000": makeCallCheckerAnalyzer(checkRegexpRules),
 | |
| 	"SA1001": {
 | |
| 		Run:      CheckTemplate,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA1002": makeCallCheckerAnalyzer(checkTimeParseRules),
 | |
| 	"SA1003": makeCallCheckerAnalyzer(checkEncodingBinaryRules),
 | |
| 	"SA1004": {
 | |
| 		Run:      CheckTimeSleepConstant,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA1005": {
 | |
| 		Run:      CheckExec,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA1006": {
 | |
| 		Run:      CheckUnsafePrintf,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA1007": makeCallCheckerAnalyzer(checkURLsRules),
 | |
| 	"SA1008": {
 | |
| 		Run:      CheckCanonicalHeaderKey,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA1010": makeCallCheckerAnalyzer(checkRegexpFindAllRules),
 | |
| 	"SA1011": makeCallCheckerAnalyzer(checkUTF8CutsetRules),
 | |
| 	"SA1012": {
 | |
| 		Run:      CheckNilContext,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA1013": {
 | |
| 		Run:      CheckSeeker,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA1014": makeCallCheckerAnalyzer(checkUnmarshalPointerRules),
 | |
| 	"SA1015": {
 | |
| 		Run:      CheckLeakyTimeTick,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer},
 | |
| 	},
 | |
| 	"SA1016": {
 | |
| 		Run:      CheckUntrappableSignal,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA1017": makeCallCheckerAnalyzer(checkUnbufferedSignalChanRules),
 | |
| 	"SA1018": makeCallCheckerAnalyzer(checkStringsReplaceZeroRules),
 | |
| 	"SA1019": {
 | |
| 		Run:      CheckDeprecated,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer, facts.Deprecated},
 | |
| 	},
 | |
| 	"SA1020": makeCallCheckerAnalyzer(checkListenAddressRules),
 | |
| 	"SA1021": makeCallCheckerAnalyzer(checkBytesEqualIPRules),
 | |
| 	"SA1023": {
 | |
| 		Run:      CheckWriterBufferModified,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer},
 | |
| 	},
 | |
| 	"SA1024": makeCallCheckerAnalyzer(checkUniqueCutsetRules),
 | |
| 	"SA1025": {
 | |
| 		Run:      CheckTimerResetReturnValue,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer},
 | |
| 	},
 | |
| 	"SA1026": makeCallCheckerAnalyzer(checkUnsupportedMarshal),
 | |
| 	"SA1027": makeCallCheckerAnalyzer(checkAtomicAlignment),
 | |
| 	"SA1028": makeCallCheckerAnalyzer(checkSortSliceRules),
 | |
| 	"SA1029": makeCallCheckerAnalyzer(checkWithValueKeyRules),
 | |
| 
 | |
| 	"SA2000": {
 | |
| 		Run:      CheckWaitgroupAdd,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA2001": {
 | |
| 		Run:      CheckEmptyCriticalSection,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA2002": {
 | |
| 		Run:      CheckConcurrentTesting,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer},
 | |
| 	},
 | |
| 	"SA2003": {
 | |
| 		Run:      CheckDeferLock,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer},
 | |
| 	},
 | |
| 
 | |
| 	"SA3000": {
 | |
| 		Run:      CheckTestMainExit,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA3001": {
 | |
| 		Run:      CheckBenchmarkN,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 
 | |
| 	"SA4000": {
 | |
| 		Run:      CheckLhsRhsIdentical,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer, facts.TokenFile, facts.Generated},
 | |
| 	},
 | |
| 	"SA4001": {
 | |
| 		Run:      CheckIneffectiveCopy,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA4003": {
 | |
| 		Run:      CheckExtremeComparison,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA4004": {
 | |
| 		Run:      CheckIneffectiveLoop,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA4006": {
 | |
| 		Run:      CheckUnreadVariableValues,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer, facts.Generated},
 | |
| 	},
 | |
| 	"SA4008": {
 | |
| 		Run:      CheckLoopCondition,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer},
 | |
| 	},
 | |
| 	"SA4009": {
 | |
| 		Run:      CheckArgOverwritten,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer},
 | |
| 	},
 | |
| 	"SA4010": {
 | |
| 		Run:      CheckIneffectiveAppend,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer},
 | |
| 	},
 | |
| 	"SA4011": {
 | |
| 		Run:      CheckScopedBreak,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA4012": {
 | |
| 		Run:      CheckNaNComparison,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer},
 | |
| 	},
 | |
| 	"SA4013": {
 | |
| 		Run:      CheckDoubleNegation,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA4014": {
 | |
| 		Run:      CheckRepeatedIfElse,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA4015": makeCallCheckerAnalyzer(checkMathIntRules),
 | |
| 	"SA4016": {
 | |
| 		Run:      CheckSillyBitwiseOps,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer, facts.TokenFile},
 | |
| 	},
 | |
| 	"SA4017": {
 | |
| 		Run:      CheckPureFunctions,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer, facts.Purity},
 | |
| 	},
 | |
| 	"SA4018": {
 | |
| 		Run:      CheckSelfAssignment,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer, facts.Generated, facts.TokenFile, facts.Purity},
 | |
| 	},
 | |
| 	"SA4019": {
 | |
| 		Run:      CheckDuplicateBuildConstraints,
 | |
| 		Requires: []*analysis.Analyzer{facts.Generated},
 | |
| 	},
 | |
| 	"SA4020": {
 | |
| 		Run:      CheckUnreachableTypeCases,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA4021": {
 | |
| 		Run:      CheckSingleArgAppend,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer, facts.Generated, facts.TokenFile},
 | |
| 	},
 | |
| 
 | |
| 	"SA5000": {
 | |
| 		Run:      CheckNilMaps,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer},
 | |
| 	},
 | |
| 	"SA5001": {
 | |
| 		Run:      CheckEarlyDefer,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA5002": {
 | |
| 		Run:      CheckInfiniteEmptyLoop,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA5003": {
 | |
| 		Run:      CheckDeferInInfiniteLoop,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA5004": {
 | |
| 		Run:      CheckLoopEmptyDefault,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA5005": {
 | |
| 		Run:      CheckCyclicFinalizer,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer},
 | |
| 	},
 | |
| 	"SA5007": {
 | |
| 		Run:      CheckInfiniteRecursion,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer},
 | |
| 	},
 | |
| 	"SA5008": {
 | |
| 		Run:      CheckStructTags,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA5009": makeCallCheckerAnalyzer(checkPrintfRules),
 | |
| 	"SA5010": {
 | |
| 		Run:      CheckImpossibleTypeAssertion,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer, facts.TokenFile},
 | |
| 	},
 | |
| 	"SA5011": {
 | |
| 		Run:      CheckMaybeNil,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer},
 | |
| 	},
 | |
| 
 | |
| 	"SA6000": makeCallCheckerAnalyzer(checkRegexpMatchLoopRules),
 | |
| 	"SA6001": {
 | |
| 		Run:      CheckMapBytesKey,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer},
 | |
| 	},
 | |
| 	"SA6002": makeCallCheckerAnalyzer(checkSyncPoolValueRules),
 | |
| 	"SA6003": {
 | |
| 		Run:      CheckRangeStringRunes,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer},
 | |
| 	},
 | |
| 	"SA6005": {
 | |
| 		Run:      CheckToLowerToUpperComparison,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 
 | |
| 	"SA9001": {
 | |
| 		Run:      CheckDubiousDeferInChannelRangeLoop,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA9002": {
 | |
| 		Run:      CheckNonOctalFileMode,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	"SA9003": {
 | |
| 		Run:      CheckEmptyBranch,
 | |
| 		Requires: []*analysis.Analyzer{buildir.Analyzer, facts.TokenFile, facts.Generated},
 | |
| 	},
 | |
| 	"SA9004": {
 | |
| 		Run:      CheckMissingEnumTypesInDeclaration,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| 	// Filtering generated code because it may include empty structs generated from data models.
 | |
| 	"SA9005": makeCallCheckerAnalyzer(checkNoopMarshal, facts.Generated),
 | |
| 
 | |
| 	"SA4022": {
 | |
| 		Run:      CheckAddressIsNil,
 | |
| 		Requires: []*analysis.Analyzer{inspect.Analyzer},
 | |
| 	},
 | |
| })
 |