[llvm-branch-commits] [clang-tools-extra] [clang-tidy][docs] Rewrite readability check docs to Markdown [4/5] (PR #221641)

Baranov Victor via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Sep 7 01:30:35 PDT 2026


================
@@ -1,125 +1,119 @@
-.. title:: clang-tidy - readability-simplify-boolean-expr
+```{title} clang-tidy - readability-simplify-boolean-expr
+```
 
-readability-simplify-boolean-expr
-=================================
+# readability-simplify-boolean-expr
 
 Looks for boolean expressions involving boolean constants and simplifies
-them to use the appropriate boolean expression directly.  Simplifies
+them to use the appropriate boolean expression directly. Simplifies
 boolean expressions by application of DeMorgan's Theorem.
 
 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;``
-``!(!a || b)``                                 ``a && !b``
-``!(a || !b)``                                 ``!a && b``
-``!(!a || !b)``                                ``a && b``
-``!(!a && b)``                                 ``a || !b``
-``!(a && !b)``                                 ``!a || b``
-``!(!a && !b)``                                ``a || b``
-===========================================  ================
-
-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 pointers, including pointers to members, to
-     ``bool`` are replaced with explicit comparisons to ``nullptr`` in C++11
-     or ``NULL`` in C++98/03.
-  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``.
-  7. Implicit conversions of integral types to ``bool`` are replaced with
-     explicit comparisons to ``0``.
+| 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;`  |
+| `!(!a \|\| b)`                             | `a && !b`     |
+| `!(a \|\| !b)`                             | `!a && b`     |
+| `!(!a \|\| !b)`                            | `a && b`      |
+| `!(!a && b)`                               | `a \|\| !b`  |
+| `!(a && !b)`                               | `!a \|\| b`  |
+| `!(!a && !b)`                              | `a \|\| b`   |
+
+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 pointers, including pointers to members, to
+   `bool` are replaced with explicit comparisons to `nullptr` in C++11
+   or `NULL` in C++98/03.
+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`.
+7. Implicit conversions of integral types to `bool` are replaced with
+   explicit comparisons to `0`.
 
 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 = (i & 1) != 0;``.
-
-  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 (i & 1) != 0;``
-
-  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);``
-
-Options
--------
-
-.. option:: IgnoreMacros
-
-   If `true`, ignore boolean expressions originating from expanded macros.
-   Default is `false`.
-
-.. option:: ChainedConditionalReturn
-
-   If `true`, conditional boolean return statements at the end of an
-   ``if/else if`` chain will be transformed. Default is `false`.
-
-.. option:: ChainedConditionalAssignment
-
-   If `true`, conditional boolean assignments at the end of an ``if/else
-   if`` chain will be transformed. Default is `false`.
-
-.. option:: SimplifyDeMorgan
-
-   If `true`, DeMorgan's Theorem will be applied to simplify negated
-   conjunctions and disjunctions.  Default is `true`.
-
-.. option:: SimplifyDeMorganRelaxed
-
-   If `true`, :option:`SimplifyDeMorgan` will also transform negated
-   conjunctions and disjunctions where there is no negation on either operand.
-   This option has no effect if :option:`SimplifyDeMorgan` is `false`.
-   Default is `false`.
-
-   When Enabled:
-
-   .. code-block::
-
-      bool X = !(A && B)
-      bool Y = !(A || B)
-
-   Would be transformed to:
-
-   .. code-block::
-
-      bool X = !A || !B
-      bool Y = !A && !B
+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 = (i & 1) != 0;`.
+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 (i & 1) != 0;`
+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);`
+
+## Options
+
+```{option} IgnoreMacros
+If `true`, ignore boolean expressions originating from expanded macros.
+Default is `false`.
+```
+
+```{option} ChainedConditionalReturn
+If `true`, conditional boolean return statements at the end of an
+`if/else if` chain will be transformed. Default is `false`.
+```
+
+```{option} ChainedConditionalAssignment
+If `true`, conditional boolean assignments at the end of an `if/else
+if` chain will be transformed. Default is `false`.
+```
+
+```{option} SimplifyDeMorgan
+If `true`, DeMorgan's Theorem will be applied to simplify negated
+conjunctions and disjunctions. Default is `true`.
+```
+
+````{option} SimplifyDeMorganRelaxed
+If `true`, {option}`SimplifyDeMorgan` will also transform negated
+conjunctions and disjunctions where there is no negation on either operand.
+This option has no effect if {option}`SimplifyDeMorgan` is `false`.
+Default is `false`.
+
+When enabled:
+
+```
----------------
vbvictor wrote:

Can we add C++ tag here

https://github.com/llvm/llvm-project/pull/221641


More information about the llvm-branch-commits mailing list