File: function-cognitive-complexity-flags.cpp

package info (click to toggle)
llvm-toolchain-17 1%3A17.0.6-22
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,799,624 kB
  • sloc: cpp: 6,428,607; ansic: 1,383,196; asm: 793,408; python: 223,504; objc: 75,364; f90: 60,502; lisp: 33,869; pascal: 15,282; sh: 9,684; perl: 7,453; ml: 4,937; awk: 3,523; makefile: 2,889; javascript: 2,149; xml: 888; fortran: 619; cs: 573
file content (95 lines) | stat: -rw-r--r-- 4,974 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// RUN: %check_clang_tidy %s readability-function-cognitive-complexity %t -- \
// RUN:   -config='{CheckOptions: \
// RUN:             [{key: readability-function-cognitive-complexity.Threshold, \
// RUN:               value: 0}, \
// RUN:              {key: readability-function-cognitive-complexity.DescribeBasicIncrements, \
// RUN:               value: "false"} ]}'
// RUN: %check_clang_tidy -check-suffix=THRESHOLD5 %s readability-function-cognitive-complexity %t -- \
// RUN:   -config='{CheckOptions: \
// RUN:             [{key: readability-function-cognitive-complexity.Threshold, \
// RUN:               value: 5}, \
// RUN:              {key: readability-function-cognitive-complexity.DescribeBasicIncrements, \
// RUN:               value: "false"} ]}'
// RUN: %check_clang_tidy -check-suffix=IGNORE-MACROS %s readability-function-cognitive-complexity %t -- \
// RUN:   -config='{CheckOptions: \
// RUN:             [{key: readability-function-cognitive-complexity.Threshold, \
// RUN:               value: 0}, \
// RUN:              {key: readability-function-cognitive-complexity.IgnoreMacros, \
// RUN:               value: "true"}, \
// RUN:              {key: readability-function-cognitive-complexity.DescribeBasicIncrements, \
// RUN:               value: "false"} ]}'
// RUN: %check_clang_tidy -check-suffix=GLOBAL-IGNORE-MACROS %s readability-function-cognitive-complexity %t -- \
// RUN:   -config='{CheckOptions: \
// RUN:             [{key: readability-function-cognitive-complexity.Threshold, \
// RUN:               value: 0}, \
// RUN:              {key: IgnoreMacros, \
// RUN:               value: "true"}, \
// RUN:              {key: readability-function-cognitive-complexity.DescribeBasicIncrements, \
// RUN:               value: "false"} ]}'

void func_of_complexity_4() {
  // CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'func_of_complexity_4' has cognitive complexity of 4 (threshold 0) [readability-function-cognitive-complexity]
  // CHECK-NOTES-IGNORE-MACROS: :[[@LINE-2]]:6: warning: function 'func_of_complexity_4' has cognitive complexity of 4 (threshold 0) [readability-function-cognitive-complexity]
  // 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]
  if (1) {
    if (1) {
    }
  }
  if (1) {
  }
}

#define MacroOfComplexity10 \
  if (1) {                  \
    if (1) {                \
      if (1) {              \
        if (1) {            \
        }                   \
      }                     \
    }                       \
  }

void function_with_macro() {
  // CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'function_with_macro' has cognitive complexity of 11 (threshold 0) [readability-function-cognitive-complexity]
  // CHECK-NOTES-THRESHOLD5: :[[@LINE-2]]:6: warning: function 'function_with_macro' has cognitive complexity of 11 (threshold 5) [readability-function-cognitive-complexity]
  // CHECK-NOTES-IGNORE-MACROS: :[[@LINE-3]]:6: warning: function 'function_with_macro' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
  // CHECK-NOTES-GLOBAL-IGNORE-MACROS: :[[@LINE-4]]:6: warning: function 'function_with_macro' has cognitive complexity of 11 (threshold 0) [readability-function-cognitive-complexity]

  MacroOfComplexity10;

  if (1) {
  }
}

#define noop \
  {}

#define SomeMacro(x) \
  if (1) {           \
    x;               \
  }

void func_macro_1() {
  // CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'func_macro_1' has cognitive complexity of 2 (threshold 0) [readability-function-cognitive-complexity]
  // CHECK-NOTES-IGNORE-MACROS: :[[@LINE-2]]:6: warning: function 'func_macro_1' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
  // CHECK-NOTES-GLOBAL-IGNORE-MACROS: :[[@LINE-3]]:6: warning: function 'func_macro_1' has cognitive complexity of 2 (threshold 0) [readability-function-cognitive-complexity]

  if (1) {
  }
  SomeMacro(noop);
}

void func_macro_2() {
  // CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'func_macro_2' has cognitive complexity of 4 (threshold 0) [readability-function-cognitive-complexity]
  // CHECK-NOTES-IGNORE-MACROS: :[[@LINE-2]]:6: warning: function 'func_macro_2' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]
  // CHECK-NOTES-GLOBAL-IGNORE-MACROS: :[[@LINE-3]]:6: warning: function 'func_macro_2' has cognitive complexity of 4 (threshold 0) [readability-function-cognitive-complexity]

  if (1) {
  }
  // Note that if the IgnoreMacro option is set to 'true', currently also macro
  // arguments are ignored. Optimally, macros should be treated like function
  // calls, i.e. the arguments account to the complexity so that the overall
  // complexity of this function is 2 (1 for the if statement above + 1 for
  // the if statement in the argument).
  SomeMacro(if (1) { noop; });
}