.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / honnef.co / go / tools@v0.1.1 / staticcheck / analysis.go
1 package staticcheck
2
3 import (
4         "honnef.co/go/tools/analysis/facts"
5         "honnef.co/go/tools/analysis/facts/nilness"
6         "honnef.co/go/tools/analysis/facts/typedness"
7         "honnef.co/go/tools/analysis/lint"
8         "honnef.co/go/tools/internal/passes/buildir"
9
10         "golang.org/x/tools/go/analysis"
11         "golang.org/x/tools/go/analysis/passes/inspect"
12 )
13
14 func makeCallCheckerAnalyzer(rules map[string]CallCheck, extraReqs ...*analysis.Analyzer) *analysis.Analyzer {
15         reqs := []*analysis.Analyzer{buildir.Analyzer, facts.TokenFile}
16         reqs = append(reqs, extraReqs...)
17         return &analysis.Analyzer{
18                 Run:      callChecker(rules),
19                 Requires: reqs,
20         }
21 }
22
23 var Analyzers = lint.InitializeAnalyzers(Docs, map[string]*analysis.Analyzer{
24         "SA1000": makeCallCheckerAnalyzer(checkRegexpRules),
25         "SA1001": {
26                 Run:      CheckTemplate,
27                 Requires: []*analysis.Analyzer{inspect.Analyzer},
28         },
29         "SA1002": makeCallCheckerAnalyzer(checkTimeParseRules),
30         "SA1003": makeCallCheckerAnalyzer(checkEncodingBinaryRules),
31         "SA1004": {
32                 Run:      CheckTimeSleepConstant,
33                 Requires: []*analysis.Analyzer{inspect.Analyzer},
34         },
35         "SA1005": {
36                 Run:      CheckExec,
37                 Requires: []*analysis.Analyzer{inspect.Analyzer},
38         },
39         "SA1006": {
40                 Run:      CheckUnsafePrintf,
41                 Requires: []*analysis.Analyzer{inspect.Analyzer},
42         },
43         "SA1007": makeCallCheckerAnalyzer(checkURLsRules),
44         "SA1008": {
45                 Run:      CheckCanonicalHeaderKey,
46                 Requires: []*analysis.Analyzer{inspect.Analyzer},
47         },
48         "SA1010": makeCallCheckerAnalyzer(checkRegexpFindAllRules),
49         "SA1011": makeCallCheckerAnalyzer(checkUTF8CutsetRules),
50         "SA1012": {
51                 Run:      CheckNilContext,
52                 Requires: []*analysis.Analyzer{inspect.Analyzer},
53         },
54         "SA1013": {
55                 Run:      CheckSeeker,
56                 Requires: []*analysis.Analyzer{inspect.Analyzer},
57         },
58         "SA1014": makeCallCheckerAnalyzer(checkUnmarshalPointerRules),
59         "SA1015": {
60                 Run:      CheckLeakyTimeTick,
61                 Requires: []*analysis.Analyzer{buildir.Analyzer},
62         },
63         "SA1016": {
64                 Run:      CheckUntrappableSignal,
65                 Requires: []*analysis.Analyzer{inspect.Analyzer},
66         },
67         "SA1017": makeCallCheckerAnalyzer(checkUnbufferedSignalChanRules),
68         "SA1018": makeCallCheckerAnalyzer(checkStringsReplaceZeroRules),
69         "SA1019": {
70                 Run:      CheckDeprecated,
71                 Requires: []*analysis.Analyzer{inspect.Analyzer, facts.Deprecated, facts.Generated},
72         },
73         "SA1020": makeCallCheckerAnalyzer(checkListenAddressRules),
74         "SA1021": makeCallCheckerAnalyzer(checkBytesEqualIPRules),
75         "SA1023": {
76                 Run:      CheckWriterBufferModified,
77                 Requires: []*analysis.Analyzer{buildir.Analyzer},
78         },
79         "SA1024": makeCallCheckerAnalyzer(checkUniqueCutsetRules),
80         "SA1025": {
81                 Run:      CheckTimerResetReturnValue,
82                 Requires: []*analysis.Analyzer{buildir.Analyzer},
83         },
84         "SA1026": makeCallCheckerAnalyzer(checkUnsupportedMarshal),
85         "SA1027": makeCallCheckerAnalyzer(checkAtomicAlignment),
86         "SA1028": makeCallCheckerAnalyzer(checkSortSliceRules),
87         "SA1029": makeCallCheckerAnalyzer(checkWithValueKeyRules),
88
89         "SA2000": {
90                 Run:      CheckWaitgroupAdd,
91                 Requires: []*analysis.Analyzer{inspect.Analyzer},
92         },
93         "SA2001": {
94                 Run:      CheckEmptyCriticalSection,
95                 Requires: []*analysis.Analyzer{inspect.Analyzer},
96         },
97         "SA2002": {
98                 Run:      CheckConcurrentTesting,
99                 Requires: []*analysis.Analyzer{buildir.Analyzer},
100         },
101         "SA2003": {
102                 Run:      CheckDeferLock,
103                 Requires: []*analysis.Analyzer{buildir.Analyzer},
104         },
105
106         "SA3000": {
107                 Run:      CheckTestMainExit,
108                 Requires: []*analysis.Analyzer{inspect.Analyzer},
109         },
110         "SA3001": {
111                 Run:      CheckBenchmarkN,
112                 Requires: []*analysis.Analyzer{inspect.Analyzer},
113         },
114
115         "SA4000": {
116                 Run:      CheckLhsRhsIdentical,
117                 Requires: []*analysis.Analyzer{inspect.Analyzer, facts.TokenFile, facts.Generated},
118         },
119         "SA4001": {
120                 Run:      CheckIneffectiveCopy,
121                 Requires: []*analysis.Analyzer{inspect.Analyzer},
122         },
123         "SA4003": {
124                 Run:      CheckExtremeComparison,
125                 Requires: []*analysis.Analyzer{inspect.Analyzer},
126         },
127         "SA4004": {
128                 Run:      CheckIneffectiveLoop,
129                 Requires: []*analysis.Analyzer{inspect.Analyzer},
130         },
131         "SA4006": {
132                 Run:      CheckUnreadVariableValues,
133                 Requires: []*analysis.Analyzer{buildir.Analyzer, facts.Generated},
134         },
135         "SA4008": {
136                 Run:      CheckLoopCondition,
137                 Requires: []*analysis.Analyzer{buildir.Analyzer},
138         },
139         "SA4009": {
140                 Run:      CheckArgOverwritten,
141                 Requires: []*analysis.Analyzer{buildir.Analyzer},
142         },
143         "SA4010": {
144                 Run:      CheckIneffectiveAppend,
145                 Requires: []*analysis.Analyzer{buildir.Analyzer},
146         },
147         "SA4011": {
148                 Run:      CheckScopedBreak,
149                 Requires: []*analysis.Analyzer{inspect.Analyzer},
150         },
151         "SA4012": {
152                 Run:      CheckNaNComparison,
153                 Requires: []*analysis.Analyzer{buildir.Analyzer},
154         },
155         "SA4013": {
156                 Run:      CheckDoubleNegation,
157                 Requires: []*analysis.Analyzer{inspect.Analyzer},
158         },
159         "SA4014": {
160                 Run:      CheckRepeatedIfElse,
161                 Requires: []*analysis.Analyzer{inspect.Analyzer},
162         },
163         "SA4015": makeCallCheckerAnalyzer(checkMathIntRules),
164         "SA4016": {
165                 Run:      CheckSillyBitwiseOps,
166                 Requires: []*analysis.Analyzer{inspect.Analyzer, facts.TokenFile},
167         },
168         "SA4017": {
169                 Run:      CheckPureFunctions,
170                 Requires: []*analysis.Analyzer{buildir.Analyzer, facts.Purity},
171         },
172         "SA4018": {
173                 Run:      CheckSelfAssignment,
174                 Requires: []*analysis.Analyzer{inspect.Analyzer, facts.Generated, facts.TokenFile, facts.Purity},
175         },
176         "SA4019": {
177                 Run:      CheckDuplicateBuildConstraints,
178                 Requires: []*analysis.Analyzer{facts.Generated},
179         },
180         "SA4020": {
181                 Run:      CheckUnreachableTypeCases,
182                 Requires: []*analysis.Analyzer{inspect.Analyzer},
183         },
184         "SA4021": {
185                 Run:      CheckSingleArgAppend,
186                 Requires: []*analysis.Analyzer{inspect.Analyzer, facts.Generated, facts.TokenFile},
187         },
188         "SA4022": {
189                 Run:      CheckAddressIsNil,
190                 Requires: []*analysis.Analyzer{inspect.Analyzer},
191         },
192         "SA4023": {
193                 Run:      CheckTypedNilInterface,
194                 Requires: []*analysis.Analyzer{buildir.Analyzer, typedness.Analysis, nilness.Analysis},
195         },
196
197         "SA5000": {
198                 Run:      CheckNilMaps,
199                 Requires: []*analysis.Analyzer{buildir.Analyzer},
200         },
201         "SA5001": {
202                 Run:      CheckEarlyDefer,
203                 Requires: []*analysis.Analyzer{inspect.Analyzer},
204         },
205         "SA5002": {
206                 Run:      CheckInfiniteEmptyLoop,
207                 Requires: []*analysis.Analyzer{inspect.Analyzer},
208         },
209         "SA5003": {
210                 Run:      CheckDeferInInfiniteLoop,
211                 Requires: []*analysis.Analyzer{inspect.Analyzer},
212         },
213         "SA5004": {
214                 Run:      CheckLoopEmptyDefault,
215                 Requires: []*analysis.Analyzer{inspect.Analyzer},
216         },
217         "SA5005": {
218                 Run:      CheckCyclicFinalizer,
219                 Requires: []*analysis.Analyzer{buildir.Analyzer},
220         },
221         "SA5007": {
222                 Run:      CheckInfiniteRecursion,
223                 Requires: []*analysis.Analyzer{buildir.Analyzer},
224         },
225         "SA5008": {
226                 Run:      CheckStructTags,
227                 Requires: []*analysis.Analyzer{inspect.Analyzer},
228         },
229         "SA5009": makeCallCheckerAnalyzer(checkPrintfRules),
230         "SA5010": {
231                 Run:      CheckImpossibleTypeAssertion,
232                 Requires: []*analysis.Analyzer{buildir.Analyzer, facts.TokenFile},
233         },
234         "SA5011": {
235                 Run:      CheckMaybeNil,
236                 Requires: []*analysis.Analyzer{buildir.Analyzer},
237         },
238         "SA5012": {
239                 Run:       CheckEvenSliceLength,
240                 FactTypes: []analysis.Fact{new(evenElements)},
241                 Requires:  []*analysis.Analyzer{buildir.Analyzer},
242         },
243
244         "SA6000": makeCallCheckerAnalyzer(checkRegexpMatchLoopRules),
245         "SA6001": {
246                 Run:      CheckMapBytesKey,
247                 Requires: []*analysis.Analyzer{buildir.Analyzer},
248         },
249         "SA6002": makeCallCheckerAnalyzer(checkSyncPoolValueRules),
250         "SA6003": {
251                 Run:      CheckRangeStringRunes,
252                 Requires: []*analysis.Analyzer{buildir.Analyzer},
253         },
254         "SA6005": {
255                 Run:      CheckToLowerToUpperComparison,
256                 Requires: []*analysis.Analyzer{inspect.Analyzer},
257         },
258
259         "SA9001": {
260                 Run:      CheckDubiousDeferInChannelRangeLoop,
261                 Requires: []*analysis.Analyzer{inspect.Analyzer},
262         },
263         "SA9002": {
264                 Run:      CheckNonOctalFileMode,
265                 Requires: []*analysis.Analyzer{inspect.Analyzer},
266         },
267         "SA9003": {
268                 Run:      CheckEmptyBranch,
269                 Requires: []*analysis.Analyzer{buildir.Analyzer, facts.TokenFile, facts.Generated},
270         },
271         "SA9004": {
272                 Run:      CheckMissingEnumTypesInDeclaration,
273                 Requires: []*analysis.Analyzer{inspect.Analyzer},
274         },
275         // Filtering generated code because it may include empty structs generated from data models.
276         "SA9005": makeCallCheckerAnalyzer(checkNoopMarshal, facts.Generated),
277         "SA9006": {
278                 Run:      CheckStaticBitShift,
279                 Requires: []*analysis.Analyzer{inspect.Analyzer},
280         },
281 })