1 | // RUN: %check_clang_tidy %s readability-function-cognitive-complexity %t -- \ |
2 | // RUN: -config='{CheckOptions: \ |
3 | // RUN: {readability-function-cognitive-complexity.Threshold: 0, \ |
4 | // RUN: readability-function-cognitive-complexity.DescribeBasicIncrements: "false"}}' |
5 | // RUN: %check_clang_tidy -check-suffix=THRESHOLD5 %s readability-function-cognitive-complexity %t -- \ |
6 | // RUN: -config='{CheckOptions: \ |
7 | // RUN: {readability-function-cognitive-complexity.Threshold: 5, \ |
8 | // RUN: readability-function-cognitive-complexity.DescribeBasicIncrements: "false"}}' |
9 | // RUN: %check_clang_tidy -check-suffix=IGNORE-MACROS %s readability-function-cognitive-complexity %t -- \ |
10 | // RUN: -config='{CheckOptions: \ |
11 | // RUN: {readability-function-cognitive-complexity.Threshold: 0, \ |
12 | // RUN: readability-function-cognitive-complexity.IgnoreMacros: "true", \ |
13 | // RUN: readability-function-cognitive-complexity.DescribeBasicIncrements: "false"}}' |
14 | // RUN: %check_clang_tidy -check-suffix=GLOBAL-IGNORE-MACROS %s readability-function-cognitive-complexity %t -- \ |
15 | // RUN: -config='{CheckOptions: \ |
16 | // RUN: {readability-function-cognitive-complexity.Threshold: 0, \ |
17 | // RUN: IgnoreMacros: "true", \ |
18 | // RUN: readability-function-cognitive-complexity.DescribeBasicIncrements: "false"}}' |
19 | |
20 | void func_of_complexity_4() { |
21 | // CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'func_of_complexity_4' has cognitive complexity of 4 (threshold 0) [readability-function-cognitive-complexity] |
22 | // CHECK-NOTES-IGNORE-MACROS: :[[@LINE-2]]:6: warning: function 'func_of_complexity_4' has cognitive complexity of 4 (threshold 0) [readability-function-cognitive-complexity] |
23 | // CHECK-NOTES-GLOBAL-IGNORE-MACROS: :[[@LINE-3]]:6: warning: function 'func_of_complexity_4' has cognitive complexity of 4 (threshold 0) [readability-function-cognitive-complexity] |
24 | if (1) { |
25 | if (1) { |
26 | } |
27 | } |
28 | if (1) { |
29 | } |
30 | } |
31 | |
32 | #define MacroOfComplexity10 \ |
33 | if (1) { \ |
34 | if (1) { \ |
35 | if (1) { \ |
36 | if (1) { \ |
37 | } \ |
38 | } \ |
39 | } \ |
40 | } |
41 | |
42 | void function_with_macro() { |
43 | // CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'function_with_macro' has cognitive complexity of 11 (threshold 0) [readability-function-cognitive-complexity] |
44 | // CHECK-NOTES-THRESHOLD5: :[[@LINE-2]]:6: warning: function 'function_with_macro' has cognitive complexity of 11 (threshold 5) [readability-function-cognitive-complexity] |
45 | // CHECK-NOTES-IGNORE-MACROS: :[[@LINE-3]]:6: warning: function 'function_with_macro' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity] |
46 | // CHECK-NOTES-GLOBAL-IGNORE-MACROS: :[[@LINE-4]]:6: warning: function 'function_with_macro' has cognitive complexity of 11 (threshold 0) [readability-function-cognitive-complexity] |
47 | |
48 | MacroOfComplexity10; |
49 | |
50 | if (1) { |
51 | } |
52 | } |
53 | |
54 | #define noop \ |
55 | {} |
56 | |
57 | #define SomeMacro(x) \ |
58 | if (1) { \ |
59 | x; \ |
60 | } |
61 | |
62 | void func_macro_1() { |
63 | // CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'func_macro_1' has cognitive complexity of 2 (threshold 0) [readability-function-cognitive-complexity] |
64 | // CHECK-NOTES-IGNORE-MACROS: :[[@LINE-2]]:6: warning: function 'func_macro_1' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity] |
65 | // CHECK-NOTES-GLOBAL-IGNORE-MACROS: :[[@LINE-3]]:6: warning: function 'func_macro_1' has cognitive complexity of 2 (threshold 0) [readability-function-cognitive-complexity] |
66 | |
67 | if (1) { |
68 | } |
69 | SomeMacro(noop); |
70 | } |
71 | |
72 | void func_macro_2() { |
73 | // CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'func_macro_2' has cognitive complexity of 4 (threshold 0) [readability-function-cognitive-complexity] |
74 | // CHECK-NOTES-IGNORE-MACROS: :[[@LINE-2]]:6: warning: function 'func_macro_2' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity] |
75 | // CHECK-NOTES-GLOBAL-IGNORE-MACROS: :[[@LINE-3]]:6: warning: function 'func_macro_2' has cognitive complexity of 4 (threshold 0) [readability-function-cognitive-complexity] |
76 | |
77 | if (1) { |
78 | } |
79 | // Note that if the IgnoreMacro option is set to 'true', currently also macro |
80 | // arguments are ignored. Optimally, macros should be treated like function |
81 | // calls, i.e. the arguments account to the complexity so that the overall |
82 | // complexity of this function is 2 (1 for the if statement above + 1 for |
83 | // the if statement in the argument). |
84 | SomeMacro(if (1) { noop; }); |
85 | } |
86 | |