cppcheck.rules 15.7 KB
Newer Older
Paul's avatar
Paul committed
1
<?xml version="1.0"?>
2
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
3
    <tokenlist>normal</tokenlist>
4
5
6
7
8
9
10
11
    <pattern> [;{}] [*] \w+? (\+\+|\-\-) ; </pattern>
    <message>
        <id>UnusedDeref</id>
        <severity>style</severity>
        <summary>Redundant * found, "*p++" is the same as "*(p++)".</summary>
    </message>
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
12
    <tokenlist>normal</tokenlist>
13
14
15
16
17
18
19
20
    <pattern> if \( ([!] )*?(strlen) \( \w+? \) ([>] [0] )*?\) { </pattern>
    <message>
        <id>StrlenEmptyString</id>
        <severity>performance</severity>
        <summary>Using strlen() to check if a string is empty is not efficient.</summary>
    </message>
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
21
    <tokenlist>normal</tokenlist>
22
23
24
25
26
27
28
    <pattern> [;{}] [*] \w+? (\+\+|\-\-) ; </pattern>
    <message>
        <id>UnusedDeref</id>
        <severity>style</severity>
        <summary>Redundant * found, "*p++" is the same as "*(p++)".</summary>
    </message>
</rule>
Paul's avatar
Paul committed
29
30
31
32
33
34
35
36
37
38
39
<rule>
    <tokenlist>define</tokenlist>
    <pattern>define [0-9A-Z_^a-z]*[a-z]</pattern>
    <message>
        <id>defineUpperCase</id>
        <severity>style</severity>
        <summary>Macros must be uppercase</summary>
    </message>
</rule>
<rule>
    <tokenlist>define</tokenlist>
Paul's avatar
Paul committed
40
    <pattern>define (MIGRAPH|[^X]{7})[^X][^_]</pattern>
Paul's avatar
Paul committed
41
42
43
    <message>
        <id>definePrefix</id>
        <severity>style</severity>
Paul's avatar
Paul committed
44
        <summary>Macros must be prefixed with MIGRAPHX_</summary>
Paul's avatar
Paul committed
45
    </message>
Paul's avatar
Paul committed
46
47
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
48
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
49
50
51
52
53
54
    <pattern>mutable \w+</pattern>
    <message>
        <id>MutableVariable</id>
        <severity>style</severity>
        <summary>Do not create mutable variables.</summary>
    </message>
Paul's avatar
Paul committed
55
56
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
57
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
58
    <pattern>(memcpy|strcpy|strncpy|strcat|strncat) \(</pattern>
Paul's avatar
Paul committed
59
60
61
    <message>
        <id>useStlAlgorithms</id>
        <severity>style</severity>
Paul's avatar
Paul committed
62
        <summary>Use std::copy instead</summary>
Paul's avatar
Paul committed
63
64
65
    </message>
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
66
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
67
68
69
70
    <pattern>memset \(</pattern>
    <message>
        <id>useStlAlgorithms</id>
        <severity>style</severity>
Paul's avatar
Paul committed
71
72
73
74
        <summary>Use std::fill instead</summary>
    </message>
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
75
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
76
77
78
79
    <pattern>memcmp \(</pattern>
    <message>
        <id>useStlAlgorithms</id>
        <severity>style</severity>
80
        <summary>Use std::equal_range instead</summary>
Paul's avatar
Paul committed
81
82
83
    </message>
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
84
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
85
86
87
88
89
90
91
92
    <pattern>memchr \(</pattern>
    <message>
        <id>useStlAlgorithms</id>
        <severity>style</severity>
        <summary>Use std::find instead</summary>
    </message>
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
93
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
94
    <pattern>\\W(fclose|free|hipFree|hipHostFree|hipFreeArray|hipMemFree|hipStreamDestroy|hipEventDestroy|hipArrayDestroy|hipCtxDestroy|hipDestroyTextureObject|hipDestroySurfaceObject|miirDestroyHandle) \(</pattern>
Paul's avatar
Paul committed
95
96
97
98
99
100
    <message>
        <id>useManagePointer</id>
        <severity>style</severity>
        <summary>Use manage pointer for resource management</summary>
    </message>
</rule>
Paul's avatar
Paul committed
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<rule>
    <tokenlist>normal</tokenlist>
    <pattern><![CDATA[new \w+]]></pattern>
    <message>
        <id>useSmartPointer</id>
        <severity>style</severity>
        <summary>Use make_shared or make_unique instead of new</summary>
    </message>
</rule>
<!-- <rule>
    <tokenlist>raw</tokenlist>
    <pattern><![CDATA[ \|\| ]]></pattern>
    <message>
        <id>UseNamedLogicOperator</id>
        <severity>style</severity>
        <summary>Use 'or' instead of ||</summary>
    </message>
</rule>
<rule>
    <tokenlist>raw</tokenlist>
    <pattern><![CDATA[ ! ]]></pattern>
    <message>
        <id>UseNamedLogicOperator</id>
        <severity>style</severity>
        <summary>Use 'not' instead of !</summary>
    </message>
</rule> -->
Paul Fultz II's avatar
Paul Fultz II committed
128
<!-- <rule>
129
130
131
132
133
134
135
    <tokenlist>raw</tokenlist>
    <pattern><![CDATA[] (__device__ |__host__ )+(\(|{)]]></pattern>
    <message>
        <id>LambdaAttribute</id>
        <severity>warning</severity>
        <summary>Attributes to lambdas must come after parameter list.</summary>
    </message>
Paul Fultz II's avatar
Paul Fultz II committed
136
</rule> -->
Paul's avatar
Paul committed
137
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
138
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
139
140
141
142
143
144
145
    <pattern><![CDATA[hipLaunchKernelGGL \( (?!\( \w+ < \w+ > \))]]></pattern>
    <message>
        <id>UseDeviceLaunch</id>
        <severity>style</severity>
        <summary>Use device::launch instead</summary>
    </message>
</rule>
Paul's avatar
Paul committed
146
147
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
148
    <pattern><![CDATA[if (\([^()]*(?-1)*[^()]*\)) { [^{}]* (return|throw|break|continue) [^;]* ; } else {]]></pattern>
Paul's avatar
Paul committed
149
    <message>
Paul's avatar
Paul committed
150
        <id>UnnecessaryElseStatement</id>
Paul's avatar
Paul committed
151
        <severity>style</severity>
Paul's avatar
Paul committed
152
        <summary>Else statement is not necessary.</summary>
Paul's avatar
Paul committed
153
154
    </message>
</rule>
Paul's avatar
Paul committed
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<rule>
    <tokenlist>normal</tokenlist>
    <pattern><![CDATA[((?:(?:\w+|<|>|::) )*(?:\w+|>)(?: &|\*)*) (\w) ; \2 = static_cast < \1 > (\([^()]*(?-1)*[^()]*\)) ;]]></pattern>
    <message>
        <id>RedundantCast</id>
        <severity>style</severity>
        <summary>Static cast is redundant.</summary>
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
    <pattern><![CDATA[auto (\w) ; \1 = static_cast < (?:(?:\w+|<|>|::) )*(?:\w+|>)(?: &|\*)* > (\([^()]*(?-1)*[^()]*\)) ;]]></pattern>
    <message>
        <id>RedundantCast</id>
        <severity>style</severity>
        <summary>Static cast is redundant.</summary>
    </message>
</rule>
Paul's avatar
Paul committed
173
174
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
175
    <pattern><![CDATA[\? (true|false) : (true|false)]]></pattern>
Paul's avatar
Paul committed
176
    <message>
Paul's avatar
Paul committed
177
        <id>RedundantConditionalOperator</id>
Paul's avatar
Paul committed
178
        <severity>style</severity>
Paul's avatar
Paul committed
179
        <summary>Conditional operator is redundant.</summary>
Paul's avatar
Paul committed
180
181
182
183
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
184
    <pattern><![CDATA[switch (\([^()]*(?-1)*[^()]*\)) { }]]></pattern>
Paul's avatar
Paul committed
185
    <message>
Paul's avatar
Paul committed
186
        <id>EmptySwitchStatement</id>
Paul's avatar
Paul committed
187
        <severity>style</severity>
Paul's avatar
Paul committed
188
        <summary>Empty switch statement.</summary>
Paul's avatar
Paul committed
189
190
191
192
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
193
    <pattern><![CDATA[(?:(?:\w+|<|>|::) )*(?:\w+|>)(?: &|\*)* (\w) ; \1 = [^;]+ ; return \1 ;]]></pattern>
Paul's avatar
Paul committed
194
    <message>
Paul's avatar
Paul committed
195
        <id>RedundantLocalVariable</id>
Paul's avatar
Paul committed
196
        <severity>style</severity>
Paul's avatar
Paul committed
197
        <summary>Variable is returned immediately after its declaration, can be simplified to just return expression.</summary>
Paul's avatar
Paul committed
198
199
200
201
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
202
    <pattern><![CDATA[for \( ; [^;]+ ; \)]]></pattern>
Paul's avatar
Paul committed
203
    <message>
Paul's avatar
Paul committed
204
        <id>ForLoopShouldBeWhileLoop</id>
Paul's avatar
Paul committed
205
        <severity>style</severity>
Paul's avatar
Paul committed
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
        <summary>For loop should be written as a while loop.</summary>
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
    <pattern><![CDATA[while (\([^()]*(?-1)*[^()]*\)) { }]]></pattern>
    <message>
        <id>EmptyWhileStatement</id>
        <severity>style</severity>
        <summary>Empty while statement.</summary>
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
    <pattern><![CDATA[if \( \w+ (\||&) \w+ \)]]></pattern>
    <message>
        <id>BitwiseOperatorInConditional</id>
        <severity>style</severity>
        <summary>Bitwise operator found in if statement.</summary>
Paul's avatar
Paul committed
225
226
227
228
229
230
231
232
233
234
235
236
237
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
    <pattern><![CDATA[else { }]]></pattern>
    <message>
        <id>EmptyElseBlock</id>
        <severity>style</severity>
        <summary>Empty else statement can be safely removed.</summary>
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
238
    <pattern><![CDATA[for (\([^()]*(?-1)*[^()]*\)) { }]]></pattern>
Paul's avatar
Paul committed
239
240
241
242
243
244
245
246
    <message>
        <id>EmptyForStatement</id>
        <severity>style</severity>
        <summary>Empty for statement.</summary>
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
247
    <pattern><![CDATA[if (\([^()]*(?-1)*[^()]*\)) { }]]></pattern>
Paul's avatar
Paul committed
248
249
250
251
252
253
254
255
    <message>
        <id>EmptyIfStatement</id>
        <severity>style</severity>
        <summary>Empty if statement.</summary>
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
256
    <pattern><![CDATA[if (\([^()]*(?-1)*[^()]*\)) { return (true|false) ; } else { return (true|false) ; }]]></pattern>
Paul's avatar
Paul committed
257
    <message>
Paul's avatar
Paul committed
258
        <id>RedundantIfStatement</id>
Paul's avatar
Paul committed
259
        <severity>style</severity>
Paul's avatar
Paul committed
260
        <summary>The if statement is redundant.</summary>
Paul's avatar
Paul committed
261
262
263
264
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
265
    <pattern><![CDATA[! !]]></pattern>
Paul's avatar
Paul committed
266
    <message>
Paul's avatar
Paul committed
267
        <id>DoubleNegative</id>
Paul's avatar
Paul committed
268
        <severity>style</severity>
Paul's avatar
Paul committed
269
        <summary>Double negative is always positive.</summary>
Paul's avatar
Paul committed
270
271
272
273
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
274
    <pattern><![CDATA[~ ~]]></pattern>
Paul's avatar
Paul committed
275
    <message>
Paul's avatar
Paul committed
276
        <id>DoubleNegative</id>
Paul's avatar
Paul committed
277
        <severity>style</severity>
Paul's avatar
Paul committed
278
        <summary>Double negative is always positive.</summary>
Paul's avatar
Paul committed
279
280
281
282
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
283
    <pattern><![CDATA[! \( !]]></pattern>
Paul's avatar
Paul committed
284
    <message>
Paul's avatar
Paul committed
285
        <id>DoubleNegative</id>
Paul's avatar
Paul committed
286
        <severity>style</severity>
Paul's avatar
Paul committed
287
288
289
290
291
292
293
294
295
296
        <summary>Double negative is always positive.</summary>
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
    <pattern><![CDATA[~ \( ~]]></pattern>
    <message>
        <id>DoubleNegative</id>
        <severity>style</severity>
        <summary>Double negative is always positive.</summary>
Paul's avatar
Paul committed
297
298
299
300
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
301
    <pattern><![CDATA[if \( \w+ != \w+ \) ({[^{}]*(?-1)*[^{}]*}) else { (?!if)]]></pattern>
Paul's avatar
Paul committed
302
303
304
305
306
307
308
309
    <message>
        <id>InvertedLogic</id>
        <severity>style</severity>
        <summary>It is cleaner to invert the logic.</summary>
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
310
    <pattern><![CDATA[if \( ! \w+ \) ({[^{}]*(?-1)*[^{}]*}) else { (?!if)]]></pattern>
Paul's avatar
Paul committed
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
    <message>
        <id>InvertedLogic</id>
        <severity>style</severity>
        <summary>It is cleaner to invert the logic.</summary>
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
    <pattern><![CDATA[\w+ != \w+ \?]]></pattern>
    <message>
        <id>InvertedLogic</id>
        <severity>style</severity>
        <summary>It is cleaner to invert the logic.</summary>
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
    <pattern><![CDATA[! \w+ \?]]></pattern>
    <message>
        <id>InvertedLogic</id>
        <severity>style</severity>
        <summary>It is cleaner to invert the logic.</summary>
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
337
    <pattern><![CDATA[catch (\([^()]*(?-1)*[^()]*\)) { }]]></pattern>
Paul's avatar
Paul committed
338
    <message>
Paul's avatar
Paul committed
339
        <id>EmptyCatchStatement</id>
Paul's avatar
Paul committed
340
        <severity>style</severity>
Paul's avatar
Paul committed
341
        <summary>An empty catch statement.</summary>
Paul's avatar
Paul committed
342
343
344
345
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
346
    <pattern><![CDATA[if (\([^()]*(?-1)*[^()]*\)) { assert (\([^()]*(?-1)*[^()]*\)) ; }]]></pattern>
Paul's avatar
Paul committed
347
    <message>
Paul's avatar
Paul committed
348
        <id>ConditionalAssert</id>
Paul's avatar
Paul committed
349
        <severity>style</severity>
Paul's avatar
Paul committed
350
        <summary>The if condition should be included in assert.</summary>
Paul's avatar
Paul committed
351
352
    </message>
</rule>
353
354
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
355
    <pattern><![CDATA[if \( (\w) . empty \( \) \) { for \( (?:(?:\w+|<|>|::) )*(?:\w+|>)(?: &|\*)* \w : \1 \) ({[^{}]*(?-1)*[^{}]*}) }]]></pattern>
356
    <message>
Paul's avatar
Paul committed
357
        <id>UnnecessaryEmptyCondition</id>
358
        <severity>style</severity>
Paul's avatar
Paul committed
359
        <summary>Unnecessary check for empty before for range loop.</summary>
360
361
    </message>
</rule>
Paul's avatar
Paul committed
362
363
<rule>
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
364
365
366
367
368
369
370
371
    <pattern><![CDATA[if \( ! (\w) . empty \( \) \) { for \( (?:(?:\w+|<|>|::) )*(?:\w+|>)(?: &|\*)* \w : \1 \) ({[^{}]*(?-1)*[^{}]*}) }]]></pattern>
    <message>
        <id>UnnecessaryEmptyCondition</id>
        <severity>style</severity>
        <summary>Unnecessary check for empty before for range loop.</summary>
    </message>
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
372
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
373
    <pattern><![CDATA[for \( (?:(?:\w+|<|>|::) )*(?:\w+|>)(?: &|\*)* (\w+) = \w+ ; \1 < \w+ ; (\1 \+\+|\+\+ \1|\1 \-\-|\-\- \1) \) { \w+ \[ \1 \] = \w+ \[ \1 \] ; }]]></pattern>
Paul's avatar
Paul committed
374
375
376
377
378
379
380
    <message>
        <id>useStlAlgorithm</id>
        <severity>style</severity>
        <summary>Considering using std::copy instead.</summary>
    </message>
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
381
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
382
    <pattern><![CDATA[for \( (?:(?:\w+|<|>|::) )*(?:\w+|>)(?: &|\*)* (\w+) = \w+ ; \1 < \w+ ; (\1 \+\+|\+\+ \1|\1 \-\-|\-\- \1) \) { \w+ \[ \1 \] = \w+ ; }]]></pattern>
Paul's avatar
Paul committed
383
384
385
386
387
388
389
    <message>
        <id>useStlAlgorithm</id>
        <severity>style</severity>
        <summary>Considering using std::fill instead.</summary>
    </message>
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
390
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
391
    <pattern><![CDATA[for \( (?:(?:\w+|<|>|::) )*(?:\w+|>)(?: &|\*)* (\w+) = \w+ ; \1 < \w+ ; (\1 \+\+|\+\+ \1|\1 \-\-|\-\- \1) \) { \w+ \[ \1 \] = (?:\w+ :: )*\w+ \( \) ; }]]></pattern>
Paul's avatar
Paul committed
392
393
394
395
396
397
398
    <message>
        <id>useStlAlgorithm</id>
        <severity>style</severity>
        <summary>Considering using std::generate instead.</summary>
    </message>
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
399
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
400
    <pattern><![CDATA[for \( (?:(?:\w+|<|>|::) )*(?:\w+|>)(?: &|\*)* (\w+) = \w+ ; \1 < \w+ ; (\1 \+\+|\+\+ \1|\1 \-\-|\-\- \1) \) { \w+ \[ \1 \] = (?:\w+ :: )*\w+ \( \w+ \[ \1 \] \) ; }]]></pattern>
Paul's avatar
Paul committed
401
402
403
404
405
406
407
    <message>
        <id>useStlAlgorithm</id>
        <severity>style</severity>
        <summary>Considering using std::transform instead.</summary>
    </message>
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
408
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
409
    <pattern><![CDATA[for \( (?:(?:\w+|<|>|::) )*(?:\w+|>)(?: &|\*)* (\w+) = \w+ ; \1 < \w+ ; (\1 \+\+|\+\+ \1|\1 \-\-|\-\- \1) \) { \w+ \[ \1 \] = (?:\w+ :: )*\w+ \( \w+ \[ \1 \] , \w+ \[ \1 \] \) ; }]]></pattern>
Paul's avatar
Paul committed
410
411
412
413
414
415
    <message>
        <id>useStlAlgorithm</id>
        <severity>style</severity>
        <summary>Considering using std::transform instead.</summary>
    </message>
</rule>
Paul's avatar
Paul committed
416
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
417
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
418
419
420
421
422
423
424
425
    <pattern><![CDATA[for \( (?:(?:\w+|<|>|::) )*(?:\w+|>)(?: &|\*)* (\w+) : (?:[^()]*(\([^()]*(?-1)*[^()]*\)))*[^)]*\) { (?:(?<idx1>\w+) \+\+|\+\+ (?<idx2>\w+)) ; if (\([^()]*(?-1)*[^()]*\)) { \w+ = \g{idx1}|\g{idx2} ; (?:break ; )?(?:return [^;]*; )?} }]]></pattern>
    <message>
        <id>useStlAlgorithm</id>
        <severity>style</severity>
        <summary>Considering using std::find or std::find_if instead.</summary>
    </message>
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
426
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
427
428
429
430
431
432
433
434
    <pattern><![CDATA[for \( (?:(?:\w+|<|>|::) )*(?:\w+|>)(?: &|\*)* (\w+) : (?:[^()]*(\([^()]*(?-1)*[^()]*\)))*[^)]*\) { if (\([^()]*(?-1)*[^()]*\)) { \w+ = (?<idx>\w) ; (?:break ; )?(?:return [^;]*; )?} (?:(\g{idx}) \+\+|\+\+ (\g{idx})) ; }]]></pattern>
    <message>
        <id>useStlAlgorithm</id>
        <severity>style</severity>
        <summary>Considering using std::find or std::find_if instead.</summary>
    </message>
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
435
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
436
437
438
439
440
441
442
443
    <pattern><![CDATA[for \( (?:(?:\w+|<|>|::) )*(?:\w+|>)(?: &|\*)* (\w+) : (?:[^()]*(\([^()]*(?-1)*[^()]*\)))*[^)]*\) { (?:(?<idx1>\w+) \+\+|\+\+ (?<idx2>\w+)) ; if (\([^()]*(?-1)*[^()]*\)) { return \g{idx1}|\g{idx2} ; } }]]></pattern>
    <message>
        <id>useStlAlgorithm</id>
        <severity>style</severity>
        <summary>Considering using std::find or std::find_if instead.</summary>
    </message>
</rule>
<rule>
Paul Fultz II's avatar
Paul Fultz II committed
444
    <tokenlist>normal</tokenlist>
Paul's avatar
Paul committed
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
    <pattern><![CDATA[for \( (?:(?:\w+|<|>|::) )*(?:\w+|>)(?: &|\*)* (\w+) : (?:[^()]*(\([^()]*(?-1)*[^()]*\)))*[^)]*\) { if (\([^()]*(?-1)*[^()]*\)) { return (?<idx>\w+) ; } (?:(\g{idx}) \+\+|\+\+ (\g{idx})) ; }]]></pattern>
    <message>
        <id>useStlAlgorithm</id>
        <severity>style</severity>
        <summary>Considering using std::find or std::find_if instead.</summary>
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
    <pattern><![CDATA[do { } while \(]]></pattern>
    <message>
        <id>EmptyDoWhileStatement</id>
        <severity>style</severity>
        <summary>Empty do-while.</summary>
    </message>
</rule>
<rule>
    <tokenlist>normal</tokenlist>
    <pattern>goto</pattern>
    <message>
        <id>GotoStatement</id>
        <severity>style</severity>
        <summary>Goto considered harmful.</summary>
    </message>
</rule>