| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- package staticcheck
- import (
- "honnef.co/go/tools/analysis/facts"
- "honnef.co/go/tools/analysis/facts/nilness"
- "honnef.co/go/tools/analysis/facts/typedness"
- "honnef.co/go/tools/analysis/lint"
- "honnef.co/go/tools/internal/passes/buildir"
- "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 = lint.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, facts.Generated},
- },
- "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),
- "SA1030": makeCallCheckerAnalyzer(checkStrconvRules),
- "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},
- },
- "SA4005": {
- Run: CheckIneffectiveFieldAssignments,
- Requires: []*analysis.Analyzer{buildir.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},
- },
- "SA4022": {
- Run: CheckAddressIsNil,
- Requires: []*analysis.Analyzer{inspect.Analyzer},
- },
- "SA4023": {
- Run: CheckTypedNilInterface,
- Requires: []*analysis.Analyzer{buildir.Analyzer, typedness.Analysis, nilness.Analysis},
- },
- "SA4024": {
- Run: CheckBuiltinZeroComparison,
- Requires: []*analysis.Analyzer{inspect.Analyzer},
- },
- "SA4025": {
- Run: CheckIntegerDivisionEqualsZero,
- Requires: []*analysis.Analyzer{inspect.Analyzer},
- },
- "SA4026": {
- Run: CheckNegativeZeroFloat,
- Requires: []*analysis.Analyzer{inspect.Analyzer},
- },
- "SA4027": {
- Run: CheckIneffectiveURLQueryModification,
- Requires: []*analysis.Analyzer{inspect.Analyzer},
- },
- "SA4028": {
- Run: CheckModuloOne,
- Requires: []*analysis.Analyzer{inspect.Analyzer},
- },
- "SA4029": {
- Run: CheckIneffectiveSort,
- Requires: []*analysis.Analyzer{inspect.Analyzer},
- },
- "SA4030": {
- Run: CheckIneffectiveRandInt,
- Requires: []*analysis.Analyzer{inspect.Analyzer},
- },
- "SA4031": {
- Run: CheckAllocationNilCheck,
- Requires: []*analysis.Analyzer{buildir.Analyzer, inspect.Analyzer, 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},
- },
- "SA5012": {
- Run: CheckEvenSliceLength,
- FactTypes: []analysis.Fact{new(evenElements)},
- 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),
- "SA9006": {
- Run: CheckStaticBitShift,
- Requires: []*analysis.Analyzer{inspect.Analyzer},
- },
- "SA9007": {
- Run: CheckBadRemoveAll,
- Requires: []*analysis.Analyzer{buildir.Analyzer},
- },
- "SA9008": {
- Run: CheckTypeAssertionShadowingElse,
- Requires: []*analysis.Analyzer{inspect.Analyzer, buildir.Analyzer, facts.TokenFile},
- },
- })
|