1// RUN: %check_clang_tidy %s readability-function-cognitive-complexity %t -- -config='{CheckOptions: {readability-function-cognitive-complexity.Threshold: 0}}' -- -std=c++11 -fblocks -fexceptions -w
2
3// any function should be checked.
4
5extern int ext_func(int x = 0);
6
7int some_func(int x = 0);
8
9static int some_other_func(int x = 0) {}
10
11template<typename T> void some_templ_func(T x = 0) {}
12
13class SomeClass {
14public:
15 int *begin(int x = 0);
16 int *end(int x = 0);
17 static int func(int x = 0);
18 template<typename T> void some_templ_func(T x = 0) {}
19 SomeClass() = default;
20 SomeClass(SomeClass&) = delete;
21};
22
23// nothing ever decreases cognitive complexity, so we can check all the things
24// in one go. none of the following should increase cognitive complexity:
25void unittest_false() {
26 {};
27 ext_func();
28 some_func();
29 some_other_func();
30 some_templ_func<int>();
31 some_templ_func<bool>();
32 SomeClass::func();
33 SomeClass C;
34 C.some_templ_func<int>();
35 C.some_templ_func<bool>();
36 C.func();
37 C.end();
38 int i = some_func();
39 i = i;
40 i++;
41 --i;
42 i < 0;
43 int j = 0 ?: 1;
44 auto k = new int;
45 delete k;
46 throw i;
47 {
48 throw i;
49 }
50end:
51 return;
52}
53
54#if 1
55#define CC100
56#else
57// this macro has cognitive complexity of 100.
58// it is needed to be able to compare the testcases with the
59// reference Sonar implementation. please place it right after the first
60// CHECK-NOTES in each function
61#define CC100 if(1){if(1){if(1){if(1){if(1){if(1){if(1){if(1){if(1){if(1){if(1){if(1){if(1){}}}}}if(1){}}}}}}}}}
62#endif
63
64//----------------------------------------------------------------------------//
65//------------------------------ B1. Increments ------------------------------//
66//----------------------------------------------------------------------------//
67// Check that every thing listed in B1 of the specification does indeed //
68// recieve the base increment, and that not-body does not increase nesting //
69//----------------------------------------------------------------------------//
70
71// break does not increase cognitive complexity.
72// only break LABEL does, but it is unavaliable in C or C++
73
74// continue does not increase cognitive complexity.
75// only continue LABEL does, but it is unavaliable in C or C++
76
77void unittest_b1_00() {
78// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_00' has cognitive complexity of 33 (threshold 0) [readability-function-cognitive-complexity]
79 CC100;
80
81 if (1 ? 1 : 0) {
82// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
83// CHECK-NOTES: :[[@LINE-2]]:9: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
84
85 if (1 ? 1 : 0) {
86// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
87// CHECK-NOTES: :[[@LINE-2]]:11: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
88 } else if (1 ? 1 : 0) {
89// CHECK-NOTES: :[[@LINE-1]]:12: note: +1, nesting level increased to 2{{$}}
90// CHECK-NOTES: :[[@LINE-2]]:18: note: +3, including nesting penalty of 2, nesting level increased to 3{{$}}
91 } else {
92// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, nesting level increased to 2{{$}}
93 }
94 } else if (1 ? 1 : 0) {
95// CHECK-NOTES: :[[@LINE-1]]:10: note: +1, nesting level increased to 1{{$}}
96// CHECK-NOTES: :[[@LINE-2]]:16: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
97
98 if (1 ? 1 : 0) {
99// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
100// CHECK-NOTES: :[[@LINE-2]]:11: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
101 } else if (1 ? 1 : 0) {
102// CHECK-NOTES: :[[@LINE-1]]:12: note: +1, nesting level increased to 2{{$}}
103// CHECK-NOTES: :[[@LINE-2]]:18: note: +3, including nesting penalty of 2, nesting level increased to 3{{$}}
104 } else {
105// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, nesting level increased to 2{{$}}
106 }
107 } else {
108// CHECK-NOTES: :[[@LINE-1]]:5: note: +1, nesting level increased to 1{{$}}
109
110 if (1 ? 1 : 0) {
111// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
112// CHECK-NOTES: :[[@LINE-2]]:11: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
113 } else if (1 ? 1 : 0) {
114// CHECK-NOTES: :[[@LINE-1]]:12: note: +1, nesting level increased to 2{{$}}
115// CHECK-NOTES: :[[@LINE-2]]:18: note: +3, including nesting penalty of 2, nesting level increased to 3{{$}}
116 } else {
117// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, nesting level increased to 2{{$}}
118 }
119 }
120}
121
122void unittest_b1_01() {
123// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_01' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
124 CC100;
125
126 int i = (1 ? 1 : 0) ? 1 : 0;
127// CHECK-NOTES: :[[@LINE-1]]:23: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
128// CHECK-NOTES: :[[@LINE-2]]:14: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
129}
130
131void unittest_b1_02(int x) {
132// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_02' has cognitive complexity of 9 (threshold 0) [readability-function-cognitive-complexity]
133 CC100;
134
135 switch (1 ? 1 : 0) {
136// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
137// CHECK-NOTES: :[[@LINE-2]]:13: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
138 case -1:
139 return;
140 case 1 ? 1 : 0:
141// CHECK-NOTES: :[[@LINE-1]]:10: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
142 return;
143 case (1 ? 2 : 0) ... (1 ? 3 : 0):
144// CHECK-NOTES: :[[@LINE-1]]:11: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
145// CHECK-NOTES: :[[@LINE-2]]:27: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
146 return;
147 default:
148 break;
149 }
150}
151
152void unittest_b1_03(int x) {
153// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_03' has cognitive complexity of 7 (threshold 0) [readability-function-cognitive-complexity]
154 CC100;
155
156 for (x = 1 ? 1 : 0; x < (1 ? 1 : 0); x += 1 ? 1 : 0) {
157// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
158// CHECK-NOTES: :[[@LINE-2]]:14: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
159// CHECK-NOTES: :[[@LINE-3]]:30: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
160// CHECK-NOTES: :[[@LINE-4]]:47: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
161 break;
162 continue;
163 }
164}
165
166void unittest_b1_04() {
167// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_04' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
168 CC100;
169
170 SomeClass C;
171 for (int i : (1 ? C : C)) {
172// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
173// CHECK-NOTES: :[[@LINE-2]]:19: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
174 break;
175 continue;
176 }
177}
178
179void unittest_b1_05() {
180// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_05' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
181 CC100;
182
183 while (1 ? 1 : 0) {
184// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
185// CHECK-NOTES: :[[@LINE-2]]:12: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
186 break;
187 continue;
188 }
189}
190
191void unittest_b1_06() {
192// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_06' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
193 CC100;
194
195 do {
196// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
197 break;
198 continue;
199 } while (1 ? 1 : 0);
200// CHECK-NOTES: :[[@LINE-1]]:14: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
201}
202
203void unittest_b1_07() {
204// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_07' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
205 CC100;
206
207 try {
208 } catch (...) {
209// CHECK-NOTES: :[[@LINE-1]]:5: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
210 }
211}
212
213void unittest_b1_08_00() {
214// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_08_00' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
215 CC100;
216
217 goto end;
218// CHECK-NOTES: :[[@LINE-1]]:3: note: +1{{$}}
219end:
220 return;
221}
222
223void unittest_b1_08_01() {
224// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_08_01' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
225 CC100;
226
227 void *ptr = &&end;
228 goto *ptr;
229// CHECK-NOTES: :[[@LINE-1]]:3: note: +1{{$}}
230end:
231 return;
232}
233
234void unittest_b1_09_00() {
235// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_09_00' has cognitive complexity of 34 (threshold 0) [readability-function-cognitive-complexity]
236 CC100;
237
238 if(1 && 1) {
239// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
240// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
241 }
242 if(1 && 1 && 1) {
243// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
244// CHECK-NOTES: :[[@LINE-2]]:13: note: +1{{$}}
245 }
246 if((1 && 1) && 1) {
247// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
248// CHECK-NOTES: :[[@LINE-2]]:15: note: +1{{$}}
249 }
250 if(1 && (1 && 1)) {
251// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
252// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
253 }
254
255 if(1 && 1 || 1) {
256// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
257// CHECK-NOTES: :[[@LINE-2]]:13: note: +1{{$}}
258// CHECK-NOTES: :[[@LINE-3]]:8: note: +1{{$}}
259 }
260 if((1 && 1) || 1) {
261// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
262// CHECK-NOTES: :[[@LINE-2]]:15: note: +1{{$}}
263// CHECK-NOTES: :[[@LINE-3]]:9: note: +1{{$}}
264 }
265 if(1 && (1 || 1)) {
266// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
267// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
268// CHECK-NOTES: :[[@LINE-3]]:14: note: +1{{$}}
269 }
270
271 if(1 || 1) {
272// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
273// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
274 }
275 if(1 || 1 || 1) {
276// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
277// CHECK-NOTES: :[[@LINE-2]]:13: note: +1{{$}}
278 }
279 if((1 || 1) || 1) {
280// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
281// CHECK-NOTES: :[[@LINE-2]]:15: note: +1{{$}}
282 }
283 if(1 || (1 || 1)) {
284// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
285// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
286 }
287
288 if(1 || 1 && 1) {
289// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
290// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
291// CHECK-NOTES: :[[@LINE-3]]:13: note: +1{{$}}
292 }
293 if((1 || 1) && 1) {
294// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
295// CHECK-NOTES: :[[@LINE-2]]:15: note: +1{{$}}
296// CHECK-NOTES: :[[@LINE-3]]:9: note: +1{{$}}
297 }
298 if(1 || (1 && 1)) {
299// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
300// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
301// CHECK-NOTES: :[[@LINE-3]]:14: note: +1{{$}}
302 }
303}
304
305void unittest_b1_09_01() {
306// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_09_01' has cognitive complexity of 40 (threshold 0) [readability-function-cognitive-complexity]
307 CC100;
308
309 if(1 && some_func(x: 1 && 1)) {
310// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
311// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
312// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}
313 }
314 if(1 && some_func(x: 1 || 1)) {
315// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
316// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
317// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}
318 }
319 if(1 || some_func(x: 1 || 1)) {
320// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
321// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
322// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}
323 }
324 if(1 || some_func(x: 1 && 1)) {
325// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
326// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
327// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}
328 }
329
330 if(1 && some_func(x: 1 && 1) && 1) {
331// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
332// CHECK-NOTES: :[[@LINE-2]]:29: note: +1{{$}}
333// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}
334 }
335 if(1 && some_func(x: 1 || 1) && 1) {
336// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
337// CHECK-NOTES: :[[@LINE-2]]:29: note: +1{{$}}
338// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}
339 }
340 if(1 || some_func(x: 1 || 1) && 1) {
341// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
342// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
343// CHECK-NOTES: :[[@LINE-3]]:29: note: +1{{$}}
344// CHECK-NOTES: :[[@LINE-4]]:23: note: +1{{$}}
345 }
346 if(1 || some_func(x: 1 && 1) && 1) {
347// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
348// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
349// CHECK-NOTES: :[[@LINE-3]]:29: note: +1{{$}}
350// CHECK-NOTES: :[[@LINE-4]]:23: note: +1{{$}}
351 }
352
353 if(1 && some_func(x: 1 && 1) || 1) {
354// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
355// CHECK-NOTES: :[[@LINE-2]]:29: note: +1{{$}}
356// CHECK-NOTES: :[[@LINE-3]]:8: note: +1{{$}}
357// CHECK-NOTES: :[[@LINE-4]]:23: note: +1{{$}}
358 }
359 if(1 && some_func(x: 1 || 1) || 1) {
360// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
361// CHECK-NOTES: :[[@LINE-2]]:29: note: +1{{$}}
362// CHECK-NOTES: :[[@LINE-3]]:8: note: +1{{$}}
363// CHECK-NOTES: :[[@LINE-4]]:23: note: +1{{$}}
364 }
365 if(1 || some_func(x: 1 || 1) || 1) {
366// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
367// CHECK-NOTES: :[[@LINE-2]]:29: note: +1{{$}}
368// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}
369 }
370 if(1 || some_func(x: 1 && 1) || 1) {
371// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
372// CHECK-NOTES: :[[@LINE-2]]:29: note: +1{{$}}
373// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}
374 }
375}
376
377void unittest_b1_09_02() {
378// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_09_02' has cognitive complexity of 12 (threshold 0) [readability-function-cognitive-complexity]
379 CC100;
380
381 if(1 && SomeClass::func(x: 1 && 1)) {
382// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
383// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
384// CHECK-NOTES: :[[@LINE-3]]:29: note: +1{{$}}
385 }
386 if(1 && SomeClass::func(x: 1 || 1)) {
387// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
388// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
389// CHECK-NOTES: :[[@LINE-3]]:29: note: +1{{$}}
390 }
391 if(1 || SomeClass::func(x: 1 || 1)) {
392// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
393// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
394// CHECK-NOTES: :[[@LINE-3]]:29: note: +1{{$}}
395 }
396 if(1 || SomeClass::func(x: 1 && 1)) {
397// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
398// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}
399// CHECK-NOTES: :[[@LINE-3]]:29: note: +1{{$}}
400 }
401}
402
403// FIXME: each method in a recursion cycle
404
405//----------------------------------------------------------------------------//
406//---------------------------- B2. Nesting lebel -----------------------------//
407//----------------------------------------------------------------------------//
408// Check that every thing listed in B2 of the specification does indeed //
409// increase the nesting level //
410//----------------------------------------------------------------------------//
411
412void unittest_b2_00() {
413// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_00' has cognitive complexity of 9 (threshold 0) [readability-function-cognitive-complexity]
414 CC100;
415
416 if (true) {
417// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
418 if(true) {
419// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
420 }
421 } else if (true) {
422// CHECK-NOTES: :[[@LINE-1]]:10: note: +1, nesting level increased to 1{{$}}
423 if(true) {
424// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
425 }
426 } else {
427// CHECK-NOTES: :[[@LINE-1]]:5: note: +1, nesting level increased to 1{{$}}
428 if(true) {
429// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
430 }
431 }
432}
433
434void unittest_b2_01() {
435// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_01' has cognitive complexity of 5 (threshold 0) [readability-function-cognitive-complexity]
436 CC100;
437
438 int i = 1 ? (1 ? 1 : 0) : (1 ? 1 : 0);
439// CHECK-NOTES: :[[@LINE-1]]:13: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
440// CHECK-NOTES: :[[@LINE-2]]:18: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
441// CHECK-NOTES: :[[@LINE-3]]:32: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
442}
443
444void unittest_b2_02(int x) {
445// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_02' has cognitive complexity of 5 (threshold 0) [readability-function-cognitive-complexity]
446 CC100;
447
448 switch (x) {
449// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
450 case -1:
451 if(true) {
452// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
453 }
454 return;
455 default:
456 if(true) {
457// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
458 }
459 return;
460 }
461}
462
463void unittest_b2_03() {
464// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_03' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
465 CC100;
466
467 for (;;) {
468// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
469 if(true) {
470// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
471 }
472 }
473}
474
475void unittest_b2_04() {
476// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_04' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
477 CC100;
478
479 SomeClass C;
480 for (int i : C) {
481// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
482 if(true) {
483// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
484 }
485 }
486}
487
488void unittest_b2_05() {
489// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_05' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
490 CC100;
491
492 while (true) {
493// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
494 if(true) {
495// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
496 }
497 }
498}
499
500void unittest_b2_06() {
501// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_06' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
502 CC100;
503
504 do {
505// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
506 if(true) {
507// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
508 }
509 } while (true);
510}
511
512void unittest_b2_07() {
513// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_07' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
514 CC100;
515
516 try {
517 } catch (...) {
518// CHECK-NOTES: :[[@LINE-1]]:5: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
519 if(true) {
520// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
521 }
522 }
523}
524
525void unittest_b2_08_00() {
526// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_08_00' has cognitive complexity of 10 (threshold 0) [readability-function-cognitive-complexity]
527 CC100;
528
529 class X {
530 X() {
531// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}
532 CC100;
533
534 if (true) {
535// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
536 }
537 }
538
539 X &operator=(const X &other) {
540// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}
541 CC100;
542
543 if (true) {
544// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
545 }
546 }
547
548 ~X() {
549// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}
550 CC100;
551
552 if (true) {
553// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
554 }
555 }
556
557 void Y() {
558// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}
559 CC100;
560
561 if (true) {
562// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
563 }
564 }
565
566 static void Z() {
567// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}
568 CC100;
569
570 if (true) {
571// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
572 }
573 }
574
575// CHECK-NOTES: :[[@LINE-45]]:5: warning: function 'X' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
576// CHECK-NOTES: :[[@LINE-42]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
577
578// CHECK-NOTES: :[[@LINE-39]]:8: warning: function 'operator=' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
579// CHECK-NOTES: :[[@LINE-36]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
580
581// CHECK-NOTES: :[[@LINE-33]]:5: warning: function '~X' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
582// CHECK-NOTES: :[[@LINE-30]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
583
584// CHECK-NOTES: :[[@LINE-27]]:10: warning: function 'Y' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
585// CHECK-NOTES: :[[@LINE-24]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
586
587// CHECK-NOTES: :[[@LINE-21]]:17: warning: function 'Z' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
588// CHECK-NOTES: :[[@LINE-18]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
589 };
590}
591
592void unittest_b2_08_01() {
593// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_08_01' has cognitive complexity of 10 (threshold 0) [readability-function-cognitive-complexity]
594 CC100;
595
596 struct X {
597 X() {
598// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}
599 CC100;
600
601 if (true) {
602// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
603 }
604 }
605
606 X &operator=(const X &other) {
607// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}
608 CC100;
609
610 if (true) {
611// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
612 }
613 }
614
615 ~X() {
616// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}
617 CC100;
618
619 if (true) {
620// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
621 }
622 }
623
624 void Y() {
625// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}
626 CC100;
627
628 if (true) {
629// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
630 }
631 }
632
633 static void Z() {
634// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}
635 CC100;
636
637 if (true) {
638// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
639 }
640 }
641
642// CHECK-NOTES: :[[@LINE-45]]:5: warning: function 'X' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
643// CHECK-NOTES: :[[@LINE-42]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
644
645// CHECK-NOTES: :[[@LINE-39]]:8: warning: function 'operator=' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
646// CHECK-NOTES: :[[@LINE-36]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
647
648// CHECK-NOTES: :[[@LINE-33]]:5: warning: function '~X' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
649// CHECK-NOTES: :[[@LINE-30]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
650
651// CHECK-NOTES: :[[@LINE-27]]:10: warning: function 'Y' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
652// CHECK-NOTES: :[[@LINE-24]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
653
654// CHECK-NOTES: :[[@LINE-21]]:17: warning: function 'Z' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
655// CHECK-NOTES: :[[@LINE-18]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
656 };
657}
658
659void unittest_b2_08_02() {
660// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_08_02' has cognitive complexity of 2 (threshold 0) [readability-function-cognitive-complexity]
661 CC100;
662
663 auto fun = []() {
664// CHECK-NOTES: :[[@LINE-1]]:14: note: nesting level increased to 1{{$}}
665 if (true) {
666// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
667 }
668 };
669// CHECK-NOTES: :[[@LINE-6]]:14: warning: lambda has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
670// CHECK-NOTES: :[[@LINE-5]]:5: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
671}
672
673void unittest_b2_09() {
674// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_09' has cognitive complexity of 2 (threshold 0) [readability-function-cognitive-complexity]
675 CC100;
676
677 ({
678// CHECK-NOTES: :[[@LINE-1]]:3: note: nesting level increased to 1{{$}}
679 if (true) {
680// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
681 }
682 });
683}
684
685void unittest_b2_10() {
686// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_10' has cognitive complexity of 2 (threshold 0) [readability-function-cognitive-complexity]
687 CC100;
688
689 void (^foo)(void) = ^(void) {
690// CHECK-NOTES: :[[@LINE-1]]:23: note: nesting level increased to 1{{$}}
691 if (true) {
692// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
693 }
694 };
695}
696
697//----------------------------------------------------------------------------//
698//-------------------------- B3. Nesting increments --------------------------//
699//----------------------------------------------------------------------------//
700// Check that every thing listed in B3 of the specification does indeed //
701// recieve the penalty of the current nesting level //
702//----------------------------------------------------------------------------//
703
704void unittest_b3_00() {
705// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_00' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
706 CC100;
707
708 if (true) {
709// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
710 if (true) {
711// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
712 }
713 }
714}
715
716void unittest_b3_01() {
717// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_01' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
718 CC100;
719
720 if (true) {
721// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
722 int i = 1 ? 1 : 0;
723// CHECK-NOTES: :[[@LINE-1]]:15: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
724 }
725}
726
727void unittest_b3_02(int x) {
728// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_02' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
729 CC100;
730
731 if (true) {
732// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
733 switch (x) {
734// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
735 case -1:
736 return;
737 default:
738 return;
739 }
740 }
741}
742
743void unittest_b3_03() {
744// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_03' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
745 CC100;
746
747 if (true) {
748// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
749 for (;;) {
750// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
751 }
752 }
753}
754
755void unittest_b3_04() {
756// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_04' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
757 CC100;
758
759 if (true) {
760// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
761 SomeClass C;
762 for (int i : C) {
763// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
764 }
765 }
766}
767
768void unittest_b3_05() {
769// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_05' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
770 CC100;
771
772 if (true) {
773// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
774 while (true) {
775// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
776 }
777 }
778}
779
780void unittest_b3_06() {
781// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_06' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
782 CC100;
783
784 if (true) {
785// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
786 do {
787// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
788 } while (true);
789 }
790}
791
792void unittest_b3_07() {
793// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_07' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
794 CC100;
795
796 if (true) {
797// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
798 try {
799 } catch (...) {
800// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}
801 }
802 }
803}
804
805//----------------------------------------------------------------------------//
806// Check that functions are being checked //
807//----------------------------------------------------------------------------//
808
809class CheckClass {
810 CheckClass(int x) {
811// CHECK-NOTES: :[[@LINE-1]]:3: warning: function 'CheckClass' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
812 CC100;
813
814 try {
815 } catch (...) {
816// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
817 }
818 }
819
820 void PrivateMemberFunction() {
821// CHECK-NOTES: :[[@LINE-1]]:8: warning: function 'PrivateMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
822 CC100;
823
824 try {
825 } catch (...) {
826// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
827 }
828 }
829
830 void PrivateConstMemberFunction() const {
831// CHECK-NOTES: :[[@LINE-1]]:8: warning: function 'PrivateConstMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
832 CC100;
833
834 try {
835 } catch (...) {
836// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
837 }
838 }
839
840 static void PrivateStaticMemberFunction() {
841// CHECK-NOTES: :[[@LINE-1]]:15: warning: function 'PrivateStaticMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
842 CC100;
843
844 try {
845 } catch (...) {
846// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
847 }
848 }
849
850public:
851 CheckClass() {
852// CHECK-NOTES: :[[@LINE-1]]:3: warning: function 'CheckClass' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
853 CC100;
854
855 try {
856 } catch (...) {
857// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
858 }
859 }
860
861 operator bool() const {
862// CHECK-NOTES: :[[@LINE-1]]:3: warning: function 'operator bool' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
863 CC100;
864
865 try {
866 } catch (...) {
867// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
868 }
869 }
870
871 ~CheckClass() {
872// CHECK-NOTES: :[[@LINE-1]]:3: warning: function '~CheckClass' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
873 CC100;
874
875 try {
876 } catch (...) {
877// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
878 }
879 }
880
881 void PublicMemberFunction() {
882// CHECK-NOTES: :[[@LINE-1]]:8: warning: function 'PublicMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
883 CC100;
884
885 try {
886 } catch (...) {
887// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
888 }
889 }
890
891 void PublicConstMemberFunction() const {
892// CHECK-NOTES: :[[@LINE-1]]:8: warning: function 'PublicConstMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
893 CC100;
894
895 try {
896 } catch (...) {
897// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
898 }
899 }
900
901 static void PublicStaticMemberFunction() {
902// CHECK-NOTES: :[[@LINE-1]]:15: warning: function 'PublicStaticMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
903 CC100;
904
905 try {
906 } catch (...) {
907// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
908 }
909 }
910
911 void PublicFunctionDefinition();
912
913protected:
914 CheckClass(bool b) {
915// CHECK-NOTES: :[[@LINE-1]]:3: warning: function 'CheckClass' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
916 CC100;
917
918 try {
919 } catch (...) {
920// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
921 }
922 }
923
924 void ProtectedMemberFunction() {
925// CHECK-NOTES: :[[@LINE-1]]:8: warning: function 'ProtectedMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
926 CC100;
927
928 try {
929 } catch (...) {
930// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
931 }
932 }
933
934 void ProtectedConstMemberFunction() const {
935// CHECK-NOTES: :[[@LINE-1]]:8: warning: function 'ProtectedConstMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
936 CC100;
937
938 try {
939 } catch (...) {
940// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
941 }
942 }
943
944 static void ProtectedStaticMemberFunction() {
945// CHECK-NOTES: :[[@LINE-1]]:15: warning: function 'ProtectedStaticMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
946 CC100;
947
948 try {
949 } catch (...) {
950// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
951 }
952 }
953};
954
955void CheckClass::PublicFunctionDefinition() {
956// CHECK-NOTES: :[[@LINE-1]]:18: warning: function 'PublicFunctionDefinition' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
957 CC100;
958
959 try {
960 } catch (...) {
961// CHECK-NOTES: :[[@LINE-1]]:5: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
962 }
963}
964
965#define uglyfunctionmacro(name) \
966 void name() { \
967 CC100; \
968 \
969 if (true) { \
970 try { \
971 } catch (...) { \
972 } \
973 } \
974 }
975
976uglyfunctionmacro(MacroFunction)
977// CHECK-NOTES: :[[@LINE-1]]:19: warning: function 'MacroFunction' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]
978// CHECK-NOTES: :[[@LINE-2]]:1: note: +1, including nesting penalty of 0, nesting level increased to 1
979// CHECK-NOTES: :[[@LINE-10]]:5: note: expanded from macro 'uglyfunctionmacro'
980// CHECK-NOTES: :[[@LINE-4]]:1: note: +2, including nesting penalty of 1, nesting level increased to 2
981// CHECK-NOTES: :[[@LINE-10]]:9: note: expanded from macro 'uglyfunctionmacro'
982
983template<typename T>
984void templatedFunction() {
985// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'templatedFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
986 CC100;
987
988 try {
989 } catch (...) {
990// CHECK-NOTES: :[[@LINE-1]]:5: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
991 }
992}
993
994template<>
995void templatedFunction<bool>() {
996// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'templatedFunction<bool>' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
997 CC100;
998
999 try {
1000 } catch (...) {
1001// CHECK-NOTES: :[[@LINE-1]]:5: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}
1002 }
1003}
1004
1005template void templatedFunction<int>();
1006
1007void functionThatCallsTemplatedFunctions() {
1008 templatedFunction<int>();
1009
1010 templatedFunction<bool>();
1011
1012 templatedFunction<char>();
1013
1014 templatedFunction<void*>();
1015}
1016
1017static void pr47779_dont_crash_on_weak() __attribute__((__weakref__("__pr47779_dont_crash_on_weak")));
1018

source code of clang-tools-extra/test/clang-tidy/checkers/readability/function-cognitive-complexity.cpp