[PATCH] Add readability-simplify-boolean-expr check to clang-tidy

Alexander Kornienko alexfh at google.com
Tue Mar 10 07:49:58 PDT 2015


================
Comment at: clang-tidy/readability/SimplifyBooleanExprCheck.cpp:254
@@ +253,3 @@
+    const CXXBoolLiteralExpr *BoolLiteral, bool UseLHS, bool Negated) {
+  const auto LHS = Result.Nodes.getNodeAs<Expr>(LHSId);
+  const auto RHS = Result.Nodes.getNodeAs<Expr>(RHSId);
----------------
Please use "const auto *" for pointers.

================
Comment at: clang-tidy/readability/SimplifyBooleanExprCheck.cpp:315
@@ +314,3 @@
+  std::string Replacement =
+      (Negated ? (VariableName + " = !(" + Condition + ")" + Terminator)
+               : (VariableName + " = " + Condition + Terminator)).str();
----------------
1. Parentheses are not always needed. I'd suggest adding a couple of helper functions to format negation correctly. These may be missing something, but should be mostly correct:


    bool needsParensAfterUnaryNegation(const Expr &E) {
      if (isa<BinaryOperator>(E) || isa<ConditionalOperator>(E))
        return true;
      if (const auto &Op = dyn_cast<CXXOperatorCallExpr>(E))
        return Op->getNumArgs() == 2 && Op->getOperator() != OO_Call && Op->getOperator() != OO_Subscript;
      return false;
    }

  std::string negateExpression(const MatchFinder::MatchResult &Result, const Expr &E) {
    StringRef Text = getText(Result, E);
    return (needsParensAfterUnaryNegation(E) ? "!(" + Text + ")" : "!" + Text).str();
  }

This applies to other replaceWith* methods as well.

2. How about moving out all non-conditional parts to shorten the expression?

  (VariableName + " = " + (Negated ? "!(" + Condition + ")" : Condition) + Terminator).str();

================
Comment at: test/clang-tidy/readability-simplify-bool-expr.cpp:51
@@ +50,3 @@
+// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: {{.*}} to boolean operator
+// X-CHECK-FIXES: {{^bool a8 = false;$}}
+bool a9 = a1 && true;
----------------
Why?

================
Comment at: test/clang-tidy/readability-simplify-bool-expr.cpp:62
@@ +61,3 @@
+
+void if_with_bool_literal_condition()
+{
----------------
Please make the test code closer to LLVM style, except for the places where special formatting is required for testing whitespace handling. In particular: 2 space indentation, braces on the same line as function headers or control flow statements, function names should be camelCaseStartingWithALowerCaseLetter, comments should use proper capitalization and punctuation.

================
Comment at: test/clang-tidy/readability-simplify-bool-expr.cpp:170
@@ +169,3 @@
+        // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: {{.*}} to boolean operator
+        // X-CHECK-FIXES: {{^    if \(true\) {$}}
+        i = 20;
----------------
Why?

http://reviews.llvm.org/D7648

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/






More information about the cfe-commits mailing list