From 8823634ac8105c097d08dd636cdab7fadb1afbbd Mon Sep 17 00:00:00 2001 From: Ganden Schaffner Date: Tue, 16 Dec 2025 00:00:00 -0800 Subject: [PATCH] Add B044: assert --- README.rst | 9 +++++++++ bugbear.py | 10 ++++++++++ tests/eval_files/b044.py | 4 ++++ 3 files changed, 23 insertions(+) create mode 100644 tests/eval_files/b044.py diff --git a/README.rst b/README.rst index 8ace44a..64dc77e 100644 --- a/README.rst +++ b/README.rst @@ -304,6 +304,10 @@ If you define `__str__/__reduce__` in super classes this check is unable to dete **B043**: Do not call ``delattr(x, 'attr')``, instead use ``del x.attr``. There is no additional safety in using ``delattr`` if you know the attribute name ahead of time. +.. _B044: + +**B044**: `assert ` is always true. Did you forget `all()`? + Opinionated warnings ~~~~~~~~~~~~~~~~~~~~ @@ -494,6 +498,11 @@ MIT Change Log ---------- +UNRELEASED +~~~~~~~~~~ + +* B044: New check for `assert `, which is always true (#534) + 25.11.29 ~~~~~~~~ diff --git a/bugbear.py b/bugbear.py index 3c7e217..2f473a2 100644 --- a/bugbear.py +++ b/bugbear.py @@ -622,6 +622,7 @@ def visit_GeneratorExp(self, node: ast.GeneratorExp) -> None: def visit_Assert(self, node: ast.Assert) -> None: self.check_for_b011(node) + self.check_for_b044(node) self.generic_visit(node) def visit_AsyncFunctionDef(self, node: ast.AsyncFunctionDef) -> None: @@ -1887,6 +1888,10 @@ def is_exception(s: str): return # no `def __init__` found, which is fine + def check_for_b044(self, node: ast.Assert) -> None: + if isinstance(node.test, ast.GeneratorExp): + self.add_error("B044", node) + def check_for_b909(self, node: ast.For) -> None: if isinstance(node.iter, ast.Name): name = _to_name_str(node.iter) @@ -2521,6 +2526,11 @@ def __call__(self, lineno: int, col: int, vars: tuple[object, ...] = ()) -> erro "it is not any safer than normal property access." ) ), + "B044": Error( + message=( + "B044 `assert ` is always true. Did you forget `all()`?" + ) + ), # Warnings disabled by default. "B901": Error( message=( diff --git a/tests/eval_files/b044.py b/tests/eval_files/b044.py new file mode 100644 index 0000000..432ca59 --- /dev/null +++ b/tests/eval_files/b044.py @@ -0,0 +1,4 @@ +assert (x for x in a) # B044: 0 +assert [x for x in a] +assert {x for x in a} +assert {x: y for x, y in a}