summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.h
diff options
context:
space:
mode:
authorAaron Ballman <aaron@aaronballman.com>2016-02-12 15:09:05 +0000
committerAaron Ballman <aaron@aaronballman.com>2016-02-12 15:09:05 +0000
commitf034a8c7d7719d9be6c775bb74afc97a88238ba4 (patch)
treed408ca68558947eb48894f0033a9d2725085cd84 /clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.h
parent8e57697cfd75ec590307267128456a30707156af (diff)
downloadbcm5719-llvm-f034a8c7d7719d9be6c775bb74afc97a88238ba4.tar.gz
bcm5719-llvm-f034a8c7d7719d9be6c775bb74afc97a88238ba4.zip
Reapply r260096.
Expand the simplify boolean expression check to handle implicit conversion of integral types to bool and improve the handling of implicit conversion of member pointers to bool. Implicit conversion of member pointers are replaced with explicit comparisons to nullptr. Implicit conversions of integral types are replaced with explicit comparisons to 0. Patch by Richard Thomson. llvm-svn: 260681
Diffstat (limited to 'clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.h')
-rw-r--r--clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.h71
1 files changed, 2 insertions, 69 deletions
diff --git a/clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.h b/clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.h
index c74e6c45c5a..4a8076582a4 100644
--- a/clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.h
+++ b/clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.h
@@ -19,75 +19,8 @@ namespace readability {
/// Looks for boolean expressions involving boolean constants and simplifies
/// them to use the appropriate boolean expression directly.
///
-/// Examples:
-///
-/// =========================================== ================
-/// Initial expression Result
-/// ------------------------------------------- ----------------
-/// `if (b == true)` `if (b)`
-/// `if (b == false)` `if (!b)`
-/// `if (b && true)` `if (b)`
-/// `if (b && false)` `if (false)`
-/// `if (b || true)` `if (true)`
-/// `if (b || false)` `if (b)`
-/// `e ? true : false` `e`
-/// `e ? false : true` `!e`
-/// `if (true) t(); else f();` `t();`
-/// `if (false) t(); else f();` `f();`
-/// `if (e) return true; else return false;` `return e;`
-/// `if (e) return false; else return true;` `return !e;`
-/// `if (e) b = true; else b = false;` `b = e;`
-/// `if (e) b = false; else b = true;` `b = !e;`
-/// `if (e) return true; return false;` `return e;`
-/// `if (e) return false; return true;` `return !e;`
-/// =========================================== ================
-///
-/// The resulting expression `e` is modified as follows:
-/// 1. Unnecessary parentheses around the expression are removed.
-/// 2. Negated applications of `!` are eliminated.
-/// 3. Negated applications of comparison operators are changed to use the
-/// opposite condition.
-/// 4. Implicit conversions of pointer to `bool` are replaced with explicit
-/// comparisons to `nullptr`.
-/// 5. Implicit casts to `bool` are replaced with explicit casts to `bool`.
-/// 6. Object expressions with `explicit operator bool` conversion operators
-/// are replaced with explicit casts to `bool`.
-///
-/// Examples:
-/// 1. The ternary assignment `bool b = (i < 0) ? true : false;` has redundant
-/// parentheses and becomes `bool b = i < 0;`.
-///
-/// 2. The conditional return `if (!b) return false; return true;` has an
-/// implied double negation and becomes `return b;`.
-///
-/// 3. The conditional return `if (i < 0) return false; return true;` becomes
-/// `return i >= 0;`.
-///
-/// The conditional return `if (i != 0) return false; return true;` becomes
-/// `return i == 0;`.
-///
-/// 4. The conditional return `if (p) return true; return false;` has an
-/// implicit conversion of a pointer to `bool` and becomes
-/// `return p != nullptr;`.
-///
-/// The ternary assignment `bool b = (i & 1) ? true : false;` has an
-/// implicit conversion of `i & 1` to `bool` and becomes
-/// `bool b = static_cast<bool>(i & 1);`.
-///
-/// 5. The conditional return `if (i & 1) return true; else return false;` has
-/// an implicit conversion of an integer quantity `i & 1` to `bool` and
-/// becomes `return static_cast<bool>(i & 1);`
-///
-/// 6. Given `struct X { explicit operator bool(); };`, and an instance `x` of
-/// `struct X`, the conditional return `if (x) return true; return false;`
-/// becomes `return static_cast<bool>(x);`
-///
-/// When a conditional boolean return or assignment appears at the end of a
-/// chain of `if`, `else if` statements, the conditional statement is left
-/// unchanged unless the option `ChainedConditionalReturn` or
-/// `ChainedConditionalAssignment`, respectively, is specified as non-zero.
-/// The default value for both options is zero.
-///
+/// For the user-facing documentation see:
+/// http://clang.llvm.org/extra/clang-tidy/checks/readability-simplify-boolean-expr.html
class SimplifyBooleanExprCheck : public ClangTidyCheck {
public:
SimplifyBooleanExprCheck(StringRef Name, ClangTidyContext *Context);
OpenPOWER on IntegriCloud