idlecode retitled this revision from "[clang-tidy] Fixed else-after-return warning in cascade if statement" to "[clang-tidy] Fixed readability-else-after-return for cascade statements". idlecode updated the summary for this revision. idlecode updated this revision to Diff 76604. idlecode added a comment.
I have reverted matcher to the state before https://reviews.llvm.org/D23265 (tests are passing with compoundStmt instead of stmt and this way is better than mine). https://reviews.llvm.org/D26125 Files: clang-tidy/readability/ElseAfterReturnCheck.cpp test/clang-tidy/readability-else-after-return.cpp Index: test/clang-tidy/readability-else-after-return.cpp =================================================================== --- test/clang-tidy/readability-else-after-return.cpp +++ test/clang-tidy/readability-else-after-return.cpp @@ -29,32 +29,60 @@ else if (a > 10) return; else // comment-2 - // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not use 'else' after 'return' - // CHECK-FIXES: {{^}} // comment-2 + // CHECK-FIXES-NOT: {{^}} // comment-2 f(0); + + if (a > 0) + if (a < 10) + return; + else // comment-3 + // CHECK-FIXES-NOT: {{^}} // comment-3 + f(0); + else + if (a > 10) + return; + else // comment-4 + // CHECK-FIXES-NOT: {{^}} // comment-4 + f(0); + + if (a > 0) { + if (a < 10) + return; + else // comment-5 + // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: do not use 'else' after 'return' + // CHECK-FIXES: {{^}} // comment-5 + f(0); + } else { + if (a > 10) + return; + else // comment-6 + // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: do not use 'else' after 'return' + // CHECK-FIXES: {{^}} // comment-6 + f(0); + } } void foo() { for (unsigned x = 0; x < 42; ++x) { if (x) { continue; - } else { // comment-3 + } else { // comment-7 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not use 'else' after 'continue' - // CHECK-FIXES: {{^}} } // comment-3 + // CHECK-FIXES: {{^}} } // comment-7 x++; } if (x) { break; - } else { // comment-4 + } else { // comment-8 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not use 'else' after 'break' - // CHECK-FIXES: {{^}} } // comment-4 + // CHECK-FIXES: {{^}} } // comment-8 x++; } if (x) { throw 42; - } else { // comment-5 + } else { // comment-9 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not use 'else' after 'throw' - // CHECK-FIXES: {{^}} } // comment-5 + // CHECK-FIXES: {{^}} } // comment-9 x++; } } Index: clang-tidy/readability/ElseAfterReturnCheck.cpp =================================================================== --- clang-tidy/readability/ElseAfterReturnCheck.cpp +++ clang-tidy/readability/ElseAfterReturnCheck.cpp @@ -23,7 +23,7 @@ stmt(anyOf(returnStmt().bind("return"), continueStmt().bind("continue"), breakStmt().bind("break"), cxxThrowExpr().bind("throw"))); Finder->addMatcher( - stmt(forEach( + compoundStmt(forEach( ifStmt(hasThen(stmt( anyOf(ControlFlowInterruptorMatcher, compoundStmt(has(ControlFlowInterruptorMatcher))))),
Index: test/clang-tidy/readability-else-after-return.cpp =================================================================== --- test/clang-tidy/readability-else-after-return.cpp +++ test/clang-tidy/readability-else-after-return.cpp @@ -29,32 +29,60 @@ else if (a > 10) return; else // comment-2 - // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not use 'else' after 'return' - // CHECK-FIXES: {{^}} // comment-2 + // CHECK-FIXES-NOT: {{^}} // comment-2 f(0); + + if (a > 0) + if (a < 10) + return; + else // comment-3 + // CHECK-FIXES-NOT: {{^}} // comment-3 + f(0); + else + if (a > 10) + return; + else // comment-4 + // CHECK-FIXES-NOT: {{^}} // comment-4 + f(0); + + if (a > 0) { + if (a < 10) + return; + else // comment-5 + // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: do not use 'else' after 'return' + // CHECK-FIXES: {{^}} // comment-5 + f(0); + } else { + if (a > 10) + return; + else // comment-6 + // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: do not use 'else' after 'return' + // CHECK-FIXES: {{^}} // comment-6 + f(0); + } } void foo() { for (unsigned x = 0; x < 42; ++x) { if (x) { continue; - } else { // comment-3 + } else { // comment-7 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not use 'else' after 'continue' - // CHECK-FIXES: {{^}} } // comment-3 + // CHECK-FIXES: {{^}} } // comment-7 x++; } if (x) { break; - } else { // comment-4 + } else { // comment-8 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not use 'else' after 'break' - // CHECK-FIXES: {{^}} } // comment-4 + // CHECK-FIXES: {{^}} } // comment-8 x++; } if (x) { throw 42; - } else { // comment-5 + } else { // comment-9 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: do not use 'else' after 'throw' - // CHECK-FIXES: {{^}} } // comment-5 + // CHECK-FIXES: {{^}} } // comment-9 x++; } } Index: clang-tidy/readability/ElseAfterReturnCheck.cpp =================================================================== --- clang-tidy/readability/ElseAfterReturnCheck.cpp +++ clang-tidy/readability/ElseAfterReturnCheck.cpp @@ -23,7 +23,7 @@ stmt(anyOf(returnStmt().bind("return"), continueStmt().bind("continue"), breakStmt().bind("break"), cxxThrowExpr().bind("throw"))); Finder->addMatcher( - stmt(forEach( + compoundStmt(forEach( ifStmt(hasThen(stmt( anyOf(ControlFlowInterruptorMatcher, compoundStmt(has(ControlFlowInterruptorMatcher))))),
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits