lebedev.ri added a comment. In https://reviews.llvm.org/D32942#776915, @malcolm.parsons wrote:
> Does this check consider `else if` chains to be nesting? > > void nesting() { // 1 > if (true) { // 2 > int j; > } else if (true) { // 2 or 3? > int j; > } else if (true) { // 2 or 4? > int j; > } else if (true) { // 2 or 5? > int j; > } > } > Yes, this check, like does consider `else if` chains to be nesting, as you can see from the following output: $ ./bin/clang-tidy -checks=readability-function-size -config='{CheckOptions: [{key: readability-function-size.NestingThreshold, value: 2}]}' /tmp/if-nest.cpp Error while trying to load a compilation database: Could not auto-detect compilation database for file "/tmp/if-nest.cpp" No compilation database found in /tmp or any parent directory json-compilation-database: Error while opening JSON database: No such file or directory Running without flags. 1 warning generated. /tmp/if-nest.cpp:1:6: warning: function 'nesting' exceeds recommended size/complexity thresholds [readability-function-size] void nesting() { // 1 ^ /tmp/if-nest.cpp:2:13: note: nesting level 3 starts here (threshold 2) if (true) { // 2 ^ /tmp/if-nest.cpp:4:10: note: nesting level 3 starts here (threshold 2) } else if (true) { // 2 or 3? ^ Which makes sense, since in AST, they are nested: $ clang -Xclang -ast-dump -fsyntax-only /tmp/if-nest.cpp TranslationUnitDecl 0x560a93687b60 <<invalid sloc>> <invalid sloc> |-TypedefDecl 0x560a936880f0 <<invalid sloc>> <invalid sloc> implicit __int128_t '__int128' | `-BuiltinType 0x560a93687dd0 '__int128' |-TypedefDecl 0x560a93688160 <<invalid sloc>> <invalid sloc> implicit __uint128_t 'unsigned __int128' | `-BuiltinType 0x560a93687df0 'unsigned __int128' |-TypedefDecl 0x560a936884a8 <<invalid sloc>> <invalid sloc> implicit __NSConstantString 'struct __NSConstantString_tag' | `-RecordType 0x560a93688250 'struct __NSConstantString_tag' | `-CXXRecord 0x560a936881b8 '__NSConstantString_tag' |-TypedefDecl 0x560a93688540 <<invalid sloc>> <invalid sloc> implicit __builtin_ms_va_list 'char *' | `-PointerType 0x560a93688500 'char *' | `-BuiltinType 0x560a93687bf0 'char' |-TypedefDecl 0x560a936bd730 <<invalid sloc>> <invalid sloc> implicit __builtin_va_list 'struct __va_list_tag [1]' | `-ConstantArrayType 0x560a93688820 'struct __va_list_tag [1]' 1 | `-RecordType 0x560a93688630 'struct __va_list_tag' | `-CXXRecord 0x560a93688598 '__va_list_tag' `-FunctionDecl 0x560a936bd7e0 </tmp/if-nest.cpp:1:1, line:11:1> line:1:6 nesting 'void (void)' `-CompoundStmt 0x560a936bdcb8 <col:16, line:11:1> `-IfStmt 0x560a936bdc80 <line:2:3, line:10:3> |-<<<NULL>>> |-<<<NULL>>> |-CXXBoolLiteralExpr 0x560a936bd8b8 <line:2:7> '_Bool' true |-CompoundStmt 0x560a936bd960 <col:13, line:4:3> | `-DeclStmt 0x560a936bd948 <line:3:6, col:11> | `-VarDecl 0x560a936bd8e8 <col:6, col:10> col:10 j 'int' `-IfStmt 0x560a936bdc48 <line:4:10, line:10:3> |-<<<NULL>>> |-<<<NULL>>> |-CXXBoolLiteralExpr 0x560a936bd980 <line:4:14> '_Bool' true |-CompoundStmt 0x560a936bda28 <col:20, line:6:3> | `-DeclStmt 0x560a936bda10 <line:5:6, col:11> | `-VarDecl 0x560a936bd9b0 <col:6, col:10> col:10 j 'int' `-IfStmt 0x560a936bdc10 <line:6:10, line:10:3> |-<<<NULL>>> |-<<<NULL>>> |-CXXBoolLiteralExpr 0x560a936bda48 <line:6:14> '_Bool' true |-CompoundStmt 0x560a936bdaf0 <col:20, line:8:3> | `-DeclStmt 0x560a936bdad8 <line:7:6, col:11> | `-VarDecl 0x560a936bda78 <col:6, col:10> col:10 j 'int' `-IfStmt 0x560a936bdbd8 <line:8:10, line:10:3> |-<<<NULL>>> |-<<<NULL>>> |-CXXBoolLiteralExpr 0x560a936bdb10 <line:8:14> '_Bool' true |-CompoundStmt 0x560a936bdbb8 <col:20, line:10:3> | `-DeclStmt 0x560a936bdba0 <line:9:6, col:11> | `-VarDecl 0x560a936bdb40 <col:6, col:10> col:10 j 'int' `-<<<NULL>>> However what i'm not totally understanding right now is /tmp/if-nest.cpp:2:13: note: nesting level 3 starts here (threshold 2) if (true) { // 2 ^ If we look at `clang-query` output, that *should* be second nesting level... $ clang-query-5.0 /tmp/if-nest.cpp Error while trying to load a compilation database: Could not auto-detect compilation database for file "/tmp/if-nest.cpp" No compilation database found in /tmp or any parent directory json-compilation-database: Error while opening JSON database: No such file or directory Running without flags. clang-query> match compoundStmt() Match #1: /tmp/if-nest.cpp:1:16: note: "root" binds here void nesting() { // 1 ^~~~~~ Match #2: /tmp/if-nest.cpp:2:13: note: "root" binds here if (true) { // 2 ^~~~~~ Match #3: /tmp/if-nest.cpp:4:20: note: "root" binds here } else if (true) { // 2 or 3? ^~~~~~~~~~~~ Match #4: /tmp/if-nest.cpp:6:20: note: "root" binds here } else if (true) { // 2 or 4? ^~~~~~~~~~~~ Match #5: /tmp/if-nest.cpp:8:20: note: "root" binds here } else if (true) { // 2 or 5? ^~~~~~~~~~~~ 5 matches. Repository: rL LLVM https://reviews.llvm.org/D32942 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits