Visitar URL original
Releases · PyCQA/flake8-bugbear · GitHub
Skip to content

Releases: PyCQA/flake8-bugbear

26.10.27

Choose a tag to compare

@cooperlees cooperlees released this 27 Oct 16:08

* B007: don't flag a loop variable that is read by a function or lambda defined
  in the same scope as the loop (#175)
* B049: New check for ``@abstractmethod`` listed before ``@property``,
  ``@classmethod`` or ``@staticmethod`` (or a property ``.setter``/``.getter``/
  ``.deleter``). It must be the innermost decorator, otherwise the class definition
  raises ``AttributeError`` (#279)
* B906: don't flag ``visit_`` methods of libcst visitors (classes inheriting
  from ``libcst``), which have no ``generic_visit`` (#359)
* B045: detect reuse of an enclosing loop's control variable in a nested loop
  in the same scope (#360).
* B046: New check for ``dict.fromkeys()`` called with a mutable value, which is
  shared by every key (#387)
* B005: say in the message that only strings with repeated characters are
  reported, since ``.strip("abc")`` style character sets are fine (#91)
* B047: New check for ``except`` handlers that can never run because an earlier
  handler already catches a builtin parent exception (#349)
* B044: also report asserts on other always-true values, such as a message
  without a condition (``assert "x must be positive"``), non-zero numbers,
  f-strings with literal text, non-empty list/set/dict literals and lambdas
  (#534, #440)
* B031: only treat a bare ``groupby()`` call as ``itertools.groupby`` when the
  module doesn't bind ``groupby`` to something else, such as its own
  ``def groupby`` (#356)
* B025: fix the message running ``except`` and the exception name together
  (``exceptValueError``) and dropping the ``*`` for ``except*`` handlers
* B903: don't flag classes that inherit from another class, like an exception
  or ``dict`` subclass, which a namedtuple can't replace, and fix ``__slot__``
  in the message to ``__slots__`` (#63)
* B950: respect the ``max-doc-length`` option for docstring and comment-only lines,
  as ``pycodestyle``'s ``W505`` does; behavior is unchanged when it is not set (#285)
* B902: treat ``abc.abstractclassmethod`` and ``abc.abstractstaticmethod`` like
  ``classmethod`` and ``staticmethod`` instead of expecting ``self`` (#33)
* B909: also check loops over ``d.keys()``, ``d.values()`` and ``d.items()``,
  which are views of ``d``, so ``for k in d.keys(): d.pop(k)`` is reported like
  ``for k in d: d.pop(k)``
* B012: don't flag ``break`` or ``continue`` in an ``async for`` loop inside a
  ``finally`` block, as for ``for`` and ``while`` loops
* B018: also report generator expressions and lambdas used as statements. A
  statement like ``(print(x) for x in items)`` never runs its body, and a bare
  ``lambda x: True`` is usually an assignment that lost its target (#452)
* B018: also report ``map()``, ``filter()``, ``reversed()``, ``zip()`` and
  ``enumerate()`` calls used as statements. They return lazy iterators, so
  ``map(print, items)`` on its own line never calls ``print`` (#452)
* B909: also check mutations in ``if`` conditions and ``elif``/``else``
  branches inside loops (#606)
* B042: don't treat a class named like an exception as one when its only base is
  ``object``, as in ``class ParsedException(object)`` (#538)
* B911: only treat a bare ``batched()`` call as ``itertools.batched`` when the
  module doesn't bind ``batched`` to something else, such as its own
  ``def batched``, the same way B031 handles ``groupby()``

26.9.30

Choose a tag to compare

@cooperlees cooperlees released this 30 Sep 14:41
  • B008: resolve direct module-level imports and aliases when matching extend-immutable-calls (#252)
  • B015: allow comparisons inside pytest/unittest exception and warning assertion context managers, where an overloaded comparison may intentionally raise (#462).
  • B020: stop flagging names bound inside nested destructuring patterns, like series in for i, (ax, (series, name)) in enumerate(zip(axs, series)); the loop rebinds the top-level targets, not those names (#521)
  • Add Python 3.15 support / CI
  • B913: fix crash on {**d for d in ...} dict unpacking in comprehensions, new in Python 3.15; B035 no longer mistakes the unpacked expression for a static key
  • B018: also report unary and arithmetic operations used as statements, such as a +c * d continuation line that lost its parentheses (#452)
  • B042: don't treat a class named like an exception as one when its only bases are parameterized generics such as ContextManager[T]; a generic base named like an exception, such as MyError[int], now counts (#538)

26.9.9

Choose a tag to compare

@cooperlees cooperlees released this 09 Sep 21:50
  • B044: New check for assert <generator_expression>, which is always true (#534)
  • B031: allow reusing a group after assigning list(group) or tuple(group) back to the same name (#395)
  • B028: report warnings.warn calls that pass an explicitly empty skip_file_prefixes tuple (#510)
  • B019: also flag async_lru.alru_cache and check cache decorators on async def methods (#488)
  • B023: don't flag a function whose every reference is a direct call inside the loop body (#468, #380)
  • B020: don't flag for self.a in self.b: rebinding an attribute is not rebinding the base name (#248)
  • B018: handle also useless calls such as isinstance(x, int) without assigning or using the result
  • B031: don't count a store-context reference as a use of the groupby generator, and don't treat references in mutually exclusive if/elif/else branches as multiple uses (#465)
  • B902: don't raise a false positive on a metaclass defined with a dotted base such as abc.ABCMeta or enum.EnumMeta (#411)
  • B913: Add an optional check for unused _ targets in zip() loops (#545)
  • B912: only emit on Python 3.14+ where map() supports strict= (#548)

25.11.29

Choose a tag to compare

@cooperlees cooperlees released this 29 Nov 20:51
  • B043: Add new check to state don't call delattr with constant (#514)
  • B042: ignore overloaded init, ignore if str+pickle dunder, improve README

25.10.21

Choose a tag to compare

@cooperlees cooperlees released this 22 Oct 01:26
  • B042: New check for reminding to call super().init in custom exceptions
  • B028: Skip if skip_file_prefixes is used (#503)
  • B912: New check for map() without an explicit strict= parameter. (#516)
  • Add python3.14 Support / CI
  • Remove python3.9 support / CI
  • flake8-bugbear now requires at least Python 3.10, like the next release of flake8

24.12.12

Choose a tag to compare

@cooperlees cooperlees released this 12 Dec 16:48
  • B012 and B025 now also handle try/except* (#500)
  • Skip B028 if warnings.warn is called with *args or **kwargs (#501)
  • Add B911: itertools.batched without strict= (#502)
  • Readme has anchors per check (they do not seem to render on GitHub tho)

24.10.31

Choose a tag to compare

@cooperlees cooperlees released this 31 Oct 18:24
  • B041: New dictionary same key AND value check (#496)
  • B037: Fix typo in error message
  • B024: No longer treats assigned class variables as abstract (#471)
  • Bump required attrs version to 22.2.0

24.8.19

Choose a tag to compare

@cooperlees cooperlees released this 20 Aug 02:15
  • B910: implement to suggest using Counter() instead of defaultdict(int) (#489)
  • B901: Do not trigger with explicit Generator return type (#481)
  • B008: add some comments, rename b008_extend_immutable_calls (#476)
  • B040: exception with note added not reraised or used (#477)
  • B039, Add ContextVar with mutable literal or function call as default
  • B040: Add Exception with added note not reraised. (#474)
  • Run tests in Python 3.13
  • Type annotated code (#481 + #483)
  • Replace hash with unsafe_hash (#486)

24.4.26

Choose a tag to compare

@cooperlees cooperlees released this 26 Apr 14:50
  • B909: Fix false positive affecting containers of mutables (#469)

24.4.21

Choose a tag to compare

@cooperlees cooperlees released this 21 Apr 15:52
  • B950: Add pragma comment to line length ignores (#463)
  • B909: Add more cases to detect + more container mutating functions (#460)