changelogs/0.14.x.md
Released on 2025-10-07.
flake8-bugbear] Include certain guaranteed-mutable expressions: tuples, generators, and assignment expressions (B006) (#20024)refurb] Add fixes for FURB101 and FURB103 (#20520)ruff] Extend FA102 with listed PEP 585-compatible APIs (#20659)flake8-annotations] Fix return type annotations to handle shadowed builtin symbols (ANN201, ANN202, ANN204, ANN205, ANN206) (#20612)flynt] Fix f-string quoting for mixed quote joiners (FLY002) (#20662)isort] Fix inserting required imports before future imports (I002) (#20676)ruff] Handle argfile expansion errors gracefully (#20691)ruff] Skip RUF051 if else/elif block is present (#20705)ruff] Improve handling of intermixed comments inside from-imports (#20561)flake8-comprehensions] Clarify fix safety documentation (C413) (#20640)Released on 2025-10-16.
flake8-bugbear] Omit annotation in preview fix for B006 (#20877)flake8-logging-format] Avoid dropping implicitly concatenated pieces in the G004 fix (#20793)pydoclint] Implement docstring-extraneous-parameter (DOC102) (#20376)pyupgrade] Extend UP019 to detect typing_extensions.Text (UP019) (#20825)pyupgrade] Fix false negative for TypeVar with default argument in non-pep695-generic-class (UP046) (#20660)Truthiness::from_expr for lambdas, generators, and f-strings (#20704)fastapi] Fix false positives for path parameters that FastAPI doesn't recognize (FAST003) (#20687)flake8-pyi] Fix operator precedence by adding parentheses when needed (PYI061) (#20508)ruff] Suppress diagnostic for f-string interpolations with debug text (RUF010) (#20525)airflow] Add warning to airflow.datasets.DatasetEvent usage (AIR301) (#20551)flake8-bugbear] Mark B905 and B912 fixes as unsafe (#20695)DiagnosticTag for more rules - changes display in editors (#20758,#20734)lint.flake8-type-checking.quoted-annotations docs (#20765)flake8-datetimez] Clarify docs for several rules (#20778)RUF015 description (#20873)Released on 2025-10-23.
flake8-gettext] Resolve qualified names and built-in bindings (INT001, INT002, INT003) (#19045)fastapi] Handle ellipsis defaults in FAST002 autofix (#20810)flake8-simplify] Skip SIM911 when unknown arguments are present (#20697)pyupgrade] Always parenthesize assignment expressions in fix for f-string (UP032) (#21003)pyupgrade] Fix UP032 conversion for decimal ints with underscores (#21022)fastapi] Skip autofix for keyword and __debug__ path params (FAST003) (#20960)flake8-bugbear] Skip B905 and B912 for fewer than two iterables and no starred arguments (#20998)ruff] Use DiagnosticTag for more pyflakes and pandas rules (#20801)ruff rule (#20168)match patterns bind different names (#20682)Released on 2025-10-30.
--output-format with --watch (#21097)pydoclint] Fix false positive on explicit exception re-raising (DOC501, DOC502) (#21011)pyflakes] Revert to stable behavior if imports for module lie in alternate branches for F401 (#20878)pylint] Implement stop-iteration-return (PLR1708) (#20733)ruff] Add support for additional eager conversion patterns (RUF065) (#20657)ISC001] Fix panic when string literals are unclosed (#21034)flake8-django] Apply DJ001 to annotated fields (#20907)flake8-pyi] Fix PYI034 to not trigger on metaclasses (PYI034) (#20881)flake8-type-checking] Fix TC003 false positive with future-annotations (#21125)pyflakes] Fix false positive for __class__ in lambda expressions within class definitions (F821) (#20564)pyupgrade] Fix false positive for TypeVar with default on Python <3.13 (UP046,UP047) (#21045)airflow] Extend airflow.models..Param check (AIR311) (#21043)airflow] Warn that airflow....DAG.create_dagrun has been removed (AIR301) (#21093)refurb] Preserve digit separators in Decimal constructor (FURB157) (#20588)flake8-bandit] Fix correct example for S308 (#21128)line-length goes beyond threshold (#21072)Released on 2025-11-06.
match patterns with as captures (#21176)refurb] Expand fix safety for keyword arguments and Decimals (FURB164) (#21259)refurb] Preserve argument ordering in autofix (FURB103) (#20790)flake8-bugbear] Ignore non-NFKC attribute names in B009 and B010 (#21131)refurb] Fix false negative for underscores before sign in Decimal constructor (FURB157) (#21190)ruff] Fix false positives on starred arguments (RUF057) (#21256)airflow] extend deprecated argument concurrency in airflow..DAG (AIR301) (#21220)extend docs (#21135)flake8-comprehensions] Fix typo in C416 documentation (#21184)ruff analyze graph work with jupyter notebooks (#21161)Released on 2025-11-13.
flake8-simplify] Apply SIM113 when index variable is of type int (#21395)pydoclint] Fix false positive when Sphinx directives follow a "Raises" section (DOC502) (#20535)pydoclint] Support NumPy-style comma-separated parameters (DOC102) (#20972)refurb] Auto-fix annotated assignments (FURB101) (#21278)ruff] Ignore str() when not used for simple conversion (RUF065) (#21330)match patterns (#21362)flake8-simplify] Fix false positive for iterable initializers with generator arguments (SIM222) (#21187)pyupgrade] Fix false positive on relative imports from local .builtins module (UP029) (#21309)pyupgrade] Consistently set the deprecated tag (UP035) (#21396)refurb] Detect empty f-strings (FURB105) (#21348)--add-noqa (#21294)ruff linter --output-format=json (#21316)--help (#21337)flake8-annotations] Add link to allow-star-arg-any option (ANN401) (#21326)configuration] Improve error message when line-length exceeds u16::MAX (#21329)Released on 2025-11-21.
flake8-bandit] Support new PySNMP API paths (S508, S509) (#21374)fmt: skip for compound statements on a single line (#20633)refurb] Fix FURB103 autofix (#21454)ruff] Fix false positive for complex conversion specifiers in logging-eager-conversion (RUF065) (#21464)ruff] Avoid false positive on ClassVar reassignment (RUF012) (#21478)ruff analyze option to skip over imports in TYPE_CHECKING blocks (#21472)eglot-format hook to eglot-managed Python buffers (#21459)force-exclude in "Configuration > Python file discovery" (#21500)Released on 2025-11-28.
flake8-bandit] Handle string literal bindings in suspicious-url-open-usage (S310) (#21469)pylint] Fix PLR1708 false positives on nested functions (#21177)pylint] Fix suppression for empty dict without tuple key annotation (PLE1141) (#21290)ruff] Add rule RUF066 to detect unnecessary class properties (#21535)ruff] Catch more dummy variable uses (RUF052) (#19799)flake8-implicit-str-concat] Avoid invalid fix in (ISC003) (#21517)parser] Fix panic when parsing IPython escape command expressions (#21480)Released on 2025-12-04.
flake8-bugbear] Catch yield expressions within other statements (B901) (#21200)flake8-use-pathlib] Mark fixes unsafe for return type changes (PTH104, PTH105, PTH109, PTH115) (#21440)await outside functions (#21763)flake8-simplify] Fix truthiness assumption for non-iterable arguments in tuple/list/set calls (SIM222, SIM223) (#21479)--output-file option in GitLab integration (#21706)Released on 2025-12-11.
ruff] New RUF100 diagnostics for unused range suppressions (#21783)pylint] Detect subclasses of builtin exceptions (PLW0133) (#21382)flake8-bandit] Fix false positive when using non-standard CSafeLoader path (S506). (#21830)flake8-bugbear] Accept immutable slice default arguments (B008) (#21823)pydocstyle] Suppress D417 for parameters with Unpack annotations (#21816)memchr for computing line indexes (#21838)*.pyw is included by default in preview (#21885)Released on 2025-12-18.
flake8-implicit-str-concat] New rule to prevent implicit string concatenation in collections (ISC004) (#21972)flake8-use-pathlib] Make fixes unsafe when types change in compound statements (PTH104, PTH105, PTH109, PTH115) (#22009)refurb] Extend support for Path.open (FURB101, FURB103) (#21080)pyupgrade] Fix parsing named Unicode escape sequences (UP032) (#21901)eradicate] Ignore ruff:disable and ruff:enable comments in ERA001 (#22038)flake8-pytest-style] Allow match and check keyword arguments without an expected exception type (PT010) (#21964)uv and ty to the Ruff README (#21996)setup.md (#22024)flake8-bandit] Fix broken link (S704) (#22039)Released on 2026-01-08.
airflow] Passing positional argument into airflow.lineage.hook.HookLineageCollector.create_asset is not allowed (AIR303) (#22046)refurb] Mark FURB192 fix as always unsafe (#22210)ruff] Add non-empty-init-module (RUF067) (#22143)flake8-unused-arguments] Mark **kwargs in TypeVar as used (ARG001) (#22214)help: subdiagnostics for several Ruff rules that can sometimes appear to disagree with ty (#22331)pylint] Demote PLW1510 fix to display-only (#22318)pylint] Ignore identical members (PLR1714) (#22220)pylint] Improve diagnostic range for PLC0206 (#22312)ruff] Improve fix title for RUF102 invalid rule code (#22100)flake8-simplify]: Avoid unnecessary builtins import for SIM105 (#22358)target-version value in preview (#22419)required-version before parsing rules (#22410)src directories when resolving graphs (#22451)T201 suggestion to not use root logger to satisfy LOG015 (#22059)iter example in unsafe fixes doc (#22118)flake8_print] better suggestion for basicConfig in T201 docs (#22101)pylint] Restore the fix safety docs for PLW0133 (#22211)Released on 2026-01-15.
flake8-blind-except] Allow more logging methods (BLE001) (#22057)ruff] Respect lint.pydocstyle.property-decorators in RUF066 (#22515)--show-settings (#22478)fmt: skip for multiple statements on the same logical line (#22119)pydocstyle] Update Rust crate imperative to v1.0.7 (D401) (#22519)isort] Insert imports in alphabetical order (I002) (#22493)flake8-pytest-style] Add check parameter example to PT017 docs (#22546)ruff] Make example error out-of-the-box (RUF103) (#22558)ruff] document RUF100 trailing comment fix behavior (#22479)Released on 2026-01-15.
This is a follow-up release to 0.14.12. Because of an issue publishing the WASM packages, there is no GitHub release or Git tag for 0.14.12, although the package was published to PyPI. The contents of the 0.14.13 release are identical to 0.14.12.
Released on 2026-01-22.
airflow] Second positional argument to Asset/Dataset should not be a dictionary (AIR303) (#22453)ruff] Detect duplicate entries in __all__ (RUF068) (#22114)pyupgrade] Allow shadowing non-builtin bindings (UP029) (#22749)pyupgrade] Apply UP045 to string arguments of typing.cast (#22320)flake8-pie] Detect duplicated declared class fields in PIE794 (#22717)flake8-pyi] Fix inconsistent handling of forward references for __new__, __enter__, __aenter__ in PYI034 (#22798)flake8-pytest-style] Support check parameter in PT011 (#22725)ruff] Add exception for ctypes.Structure._fields_ (RUF012) (#22559)--exit-non-zero-on-format to formatter exit codes section (#22761)FastAPI] Document fix safety for FAST001 (#22655)flake8-async] Tweak explanation to focus on latency/efficiency tradeoff (ASYNC110) (#22715)pandas-vet] Make example error out-of-the-box (PD002) (#22561)refurb] Make the example work out of box (FURB101) (#22770)refurb] Make the example work out of box (FURB103) (#22769)