@astral-sh/ruff-wasm-bundler
Advanced tools
Changelog
0.9.3
airflow
] Argument fail_stop
in DAG has been renamed as fail_fast
(AIR302
) (#15633)airflow
] Extend AIR303
with more symbols (#15611)flake8-bandit
] Report all references to suspicious functions (S3
) (#15541)flake8-pytest-style
] Do not emit diagnostics for empty for
loops (PT012
, PT031
) (#15542)flake8-simplify
] Avoid double negations (SIM103
) (#15562)pyflakes
] Fix infinite loop with unused local import in __init__.py
(F401
) (#15517)pylint
] Do not report methods with only one EM101
-compatible raise
(PLR6301
) (#15507)pylint
] Implement redefined-slots-in-subclass
(W0244
) (#9640)pyupgrade
] Add rules to use PEP 695 generics in classes and functions (UP046
, UP047
) (#15565, #15659)refurb
] Implement for-loop-writes
(FURB122
) (#10630)ruff
] Implement needless-else
clause (RUF047
) (#15051)ruff
] Implement starmap-zip
(RUF058
) (#15483)flake8-bugbear
] Do not raise error if keyword argument is present and target-python version is less or equals than 3.9 (B903
) (#15549)flake8-comprehensions
] strip parentheses around generators in unnecessary-generator-set
(C401
) (#15553)flake8-pytest-style
] Rewrite references to .exception
(PT027
) (#15680)flake8-simplify
] Mark fixes as unsafe (SIM201
, SIM202
) (#15626)flake8-type-checking
] Fix some safe fixes being labeled unsafe (TC006
,TC008
) (#15638)isort
] Omit trailing whitespace in unsorted-imports
(I001
) (#15518)pydoclint
] Allow ignoring one line docstrings for DOC
rules (#13302)pyflakes
] Apply redefinition fixes by source code order (F811
) (#15575)pyflakes
] Avoid removing too many imports in redefined-while-unused
(F811
) (#15585)pyflakes
] Group redefinition fixes by source statement (F811
) (#15574)pylint
] Include name of base class in message for redefined-slots-in-subclass
(W0244
) (#15559)ruff
] Update fix for RUF055
to use var == value
(#15605)unsafe-fixes
settings for code actions (#15666)flake8-bandit
] Add missing single-line/dotall regex flag (S608
) (#15654)flake8-import-conventions
] Fix infinite loop between ICN001
and I002
(ICN001
) (#15480)flake8-simplify
] Do not emit diagnostics for expressions inside string type annotations (SIM222
, SIM223
) (#15405)pyflakes
] Treat arguments passed to the default=
parameter of TypeVar
as type expressions (F821
) (#15679)pyupgrade
] Avoid syntax error when the iterable is a non-parenthesized tuple (UP028
) (#15543)ruff
] Exempt NewType
calls where the original type is immutable (RUF009
) (#15588)Changelog
0.9.2
airflow
] Fix typo "security_managr" to "security_manager" (AIR303
) (#15463)airflow
] extend and fix AIR302 rules (#15525)fastapi
] Handle parameters with Depends
correctly (FAST003
) (#15364)flake8-pytest-style
] Implement pytest.warns diagnostics (PT029
, PT030
, PT031
) (#15444)flake8-pytest-style
] Test function parameters with default arguments (PT028
) (#15449)flake8-type-checking
] Avoid false positives for |
in TC008
(#15201)flake8-todos
] Allow VSCode GitHub PR extension style links in missing-todo-link
(TD003
) (#15519)pyflakes
] Show syntax error message for F722
(#15523)Preserve
(#15524)ruff.configuration
errors (#15452)flatten
to improve deserialization error messages (#15414)fastapi
] Update Annotated
fixes (FAST002
) (#15462)flake8-bandit
] Check for builtins
instead of builtin
(S102
, PTH123
) (#15443)flake8-pathlib
] Fix --select
for os-path-dirname
(PTH120
) (#15446)ruff
] Fix false positive on global keyword (RUF052
) (#15235)Changelog
0.9.1
pycodestyle
] Run too-many-newlines-at-end-of-file
on each cell in notebooks (W391
) (#15308)ruff
] Omit diagnostic for shadowed private function parameters in used-dummy-variable
(RUF052
) (#15376)flake8-bugbear
] Improve assert-raises-exception
message (B017
) (#15389)Changelog
0.9.0
Check out the blog post for a migration guide and overview of the changes!
Ruff now formats your code according to the 2025 style guide. As a result, your code might now get formatted differently. See the formatter section for a detailed list of changes.
This release doesn’t remove or remap any existing stable rules.
The following rules have been stabilized and are no longer in preview:
stdlib-module-shadowing
(A005
).
This rule has also been renamed: previously, it was called builtin-module-shadowing
.builtin-lambda-argument-shadowing
(A006
)slice-to-remove-prefix-or-suffix
(FURB188
)boolean-chained-comparison
(PLR1716
)decimal-from-float-literal
(RUF032
)post-init-default
(RUF033
)useless-if-else
(RUF034
)The following behaviors have been stabilized:
pytest-parametrize-names-wrong-type
(PT006
): Detect pytest.parametrize
calls outside decorators and calls with keyword arguments.module-import-not-at-top-of-file
(E402
): Ignore pytest.importorskip
calls between import statements.mutable-dataclass-default
(RUF008
) and function-call-in-dataclass-default-argument
(RUF009
): Add support for attrs
.bad-version-info-comparison
(PYI006
): Extend the rule to check non-stub files.The following fixes or improvements to fixes have been stabilized:
redundant-numeric-union
(PYI041
)duplicate-union-members
(PYI016
)This release introduces the new 2025 stable style (#13371), stabilizing the following changes:
ISC001
incompatibility warning (#15123)assert
message over breaking the assertion expression (#9457)if
guards in match
case
clauses (#13513)match
case
patterns (#6933)if
keyword for comprehensions where the condition has a leading comment (#12282)with
statements with a single context manager for Python 3.8 or older (#10276)max-doc-code-line-length = "dynamic"
(#13523)flake8-bugbear
] Implement class-as-data-structure
(B903
) (#9601)flake8-type-checking
] Apply quoted-type-alias
more eagerly in TYPE_CHECKING
blocks and ignore it in stubs (TC008
) (#15180)pylint
] Ignore eq-without-hash
in stub files (PLW1641
) (#15310)pyupgrade
] Split UP007
into two individual rules: UP007
for Union
and UP045
for Optional
(UP007
, UP045
) (#15313)ruff
] New rule that detects classes that are both an enum and a dataclass
(RUF049
) (#15299)ruff
] Recode RUF025
to RUF037
(RUF037
) (#15258)flake8-builtins
] Ignore stdlib-module-shadowing
in stub files(A005
) (#15350)flake8-return
] Add support for functions returning typing.Never
(RET503
) (#15298)logLevel
server setting
which defaults to info
. This addresses the issue where users were notified about an error and told to consult the log, but it didn’t contain any messages. (#15232)--config key=value
when the key
is for a table and it’s a simple value
eradicate
] Ignore metadata blocks directly followed by normal blocks (ERA001
) (#15330)flake8-django
] Recognize other magic methods (DJ012
) (#15365)pycodestyle
] Avoid false positives related to type aliases (E252
) (#15356)pydocstyle
] Avoid treating newline-separated sections as sub-sections (D405
) (#15311)pyflakes
] Remove call when removing final argument from format
(F523
) (#15309)refurb
] Mark fix as unsafe when the right-hand side is a string (FURB171
) (#15273)ruff
] Treat )
as a regex metacharacter (RUF043
, RUF055
) (#15318)ruff
] Parenthesize the int
-call argument when removing the int
call would change semantics (RUF046
) (#15277)Changelog
0.8.6
format
]: Preserve multiline implicit concatenated strings in docstring positions (#15126)ruff
] Add rule to detect empty literal in deque call (RUF025
) (#15104)ruff
] Avoid reporting when ndigits
is possibly negative (RUF057
) (#15234)flake8-todos
] remove issue code length restriction (TD003
) (#15175)pyflakes
] Ignore errors in @no_type_check
string annotations (F722
, F821
) (#15215)--verbose
(#15237)Changelog
0.8.5
airflow
] Extend names moved from core to provider (AIR303
) (#15145, #15159, #15196, #15216)airflow
] Extend rule to check class attributes, methods, arguments (AIR302
) (#15054, #15083)fastapi
] Update FAST002
to check keyword-only arguments (#15119)flake8-type-checking
] Disable TC006
and TC007
in stub files (#15179)pylint
] Detect nested methods correctly (PLW1641
) (#15032)ruff
] Detect more strict-integer expressions (RUF046
) (#14833)ruff
] Implement falsy-dict-get-fallback
(RUF056
) (#15160)ruff
] Implement unnecessary-round
(RUF057
) (#14828)TypedDict
keys as non-type-expressions (#15073)flake8-comprehensions
] Skip C416
if comprehension contains unpacking (#14909)flake8-pie
] Allow cast(SomeType, ...)
(PIE796
) (#15141)flake8-simplify
] More precise inference for dictionaries (SIM300
) (#15164)flake8-use-pathlib
] Catch redundant joins in PTH201
and avoid syntax errors (#15177)pycodestyle
] Preserve original value format (E731
) (#15097)pydocstyle
] Split on first whitespace character (D403
) (#15082)pyupgrade
] Add all PEP-585 names to UP006
rule (#5454)flake8-type-checking
] Improve flexibility of runtime-evaluated-decorators
(#15204)pydocstyle
] Add setting to ignore missing documentation for *args
and **kwargs
parameters (D417
) (#15210)ruff
] Add an allowlist for unsafe-markup-use
(RUF035
) (#15076)TypeChecker
for detecting fastapi
routes (#15093)pycodestyle
] Avoid false positives and negatives related to type parameter default syntax (E225
, E251
) (#15214)Changelog
0.8.4
airflow
] Extend AIR302
with additional functions and classes (#15015)airflow
] Implement moved-to-provider-in-3
for modules that has been moved to Airflow providers (AIR303
) (#14764)flake8-use-pathlib
] Extend check for invalid path suffix to include the case "."
(PTH210
) (#14902)perflint
] Fix panic in PERF401
when list variable is after the for
loop (#14971)perflint
] Simplify finding the loop target in PERF401
(#15025)pylint
] Preserve original value format (PLR6104
) (#14978)ruff
] Avoid false positives for RUF027
for typing context bindings (#15037)ruff
] Check for ambiguous pattern passed to pytest.raises()
(RUF043
) (#14966)flake8-bandit
] Check S105
for annotated assignment (#15059)flake8-pyi
] More autofixes for redundant-none-literal
(PYI061
) (#14872)pydocstyle
] Skip leading whitespace for D403
(#14963)ruff
] Skip SQLModel
base classes for mutable-class-default
(RUF012
) (#14949)perflint
] Parenthesize walrus expressions in autofix for manual-list-comprehension
(PERF401
) (#15050)Changelog
0.8.3
airflow
] Add fix to remove deprecated keyword arguments (AIR302
) (#14887)airflow
]: Extend rule to include deprecated names for Airflow 3.0 (AIR302
) (#14765 and #14804)flake8-bugbear
] Improve error messages for except*
(B025
, B029
, B030
, B904
) (#14815)flake8-bugbear
] itertools.batched()
without explicit strict
(B911
) (#14408)flake8-use-pathlib
] Dotless suffix passed to Path.with_suffix()
(PTH210
) (#14779)pylint
] Include parentheses and multiple comparators in check for boolean-chained-comparison
(PLR1716
) (#14781)ruff
] Do not simplify round()
calls (RUF046
) (#14832)ruff
] Don't emit used-dummy-variable
on function parameters (RUF052
) (#14818)ruff
] Implement if-key-in-dict-del
(RUF051
) (#14553)ruff
] Mark autofix for RUF052
as always unsafe (#14824)ruff
] Teach autofix for used-dummy-variable
about TypeVars etc. (RUF052
) (#14819)flake8-bugbear
] Offer unsafe autofix for no-explicit-stacklevel
(B028
) (#14829)flake8-pyi
] Skip all type definitions in string-or-bytes-too-long
(PYI053
) (#14797)pyupgrade
] Do not report when a UTF-8 comment is followed by a non-UTF-8 one (UP009
) (#14728)pyupgrade
] Mark fixes for convert-typed-dict-functional-to-class
and convert-named-tuple-functional-to-class
as unsafe if they will remove comments (UP013
, UP014
) (#14842)except
and except*
(#14895)flake8-bugbear
] Fix B028
to allow stacklevel
to be explicitly assigned as a positional argument (#14868)flake8-bugbear
] Skip B028
if warnings.warn
is called with *args
or **kwargs
(#14870)flake8-comprehensions
] Skip iterables with named expressions in unnecessary-map
(C417
) (#14827)flake8-pyi
] Also remove self
and cls
's annotation (PYI034
) (#14801)flake8-pytest-style
] Fix pytest-parametrize-names-wrong-type
(PT006
) to edit both argnames
and argvalues
if both of them are single-element tuples/lists (#14699)perflint
] Improve autofix for PERF401
(#14369)pylint
] Fix PLW1508
false positive for default string created via a mult operation (#14841)Changelog
0.8.2
airflow
] Avoid deprecated values (AIR302
) (#14582)airflow
] Extend removed names for AIR302
(#14734)ruff
] Extend unnecessary-regular-expression
to non-literal strings (RUF055
) (#14679)ruff
] Implement used-dummy-variable
(RUF052
) (#14611)ruff
] Implement unnecessary-cast-to-int
(RUF046
) (#14697)airflow
] Check AIR001
from builtin or providers operators
module (#14631)flake8-pytest-style
] Remove @
in pytest.mark.parametrize
rule messages (#14770)pandas-vet
] Skip rules if the panda
module hasn't been seen (#14671)pylint
] Fix false negatives for ascii
and sorted
in len-as-condition
(PLC1802
) (#14692)refurb
] Guard hashlib
imports and mark hashlib-digest-hex
fix as safe (FURB181
) (#14694)flake8-import-conventions
] Improve syntax check for aliases supplied in configuration for unconventional-import-alias
(ICN001
) (#14745)@no_type_check
contexts (F821
, F722
) (#14615) (#14726)pep8-naming
] Avoid false positive for class Bar(type(foo))
(N804
) (#14683)pycodestyle
] Handle f-strings properly for invalid-escape-sequence
(W605
) (#14748)pylint
] Ignore @overload
in PLR0904
(#14730)refurb
] Handle non-finite decimals in verbose-decimal-constructor
(FURB157
) (#14596)ruff
] Avoid emitting assignment-in-assert
when all references to the assigned variable are themselves inside assert
s (RUF018
) (#14661)Changelog
0.8.1
**
) in overlong f-string expressions (#14489)airflow
] Avoid implicit schedule
argument to DAG
and @dag
(AIR301
) (#14581)flake8-builtins
] Exempt private built-in modules (A005
) (#14505)flake8-pytest-style
] Fix pytest.mark.parametrize
rules to check calls instead of decorators (#14515)flake8-type-checking
] Implement runtime-cast-value
(TC006
) (#14511)flake8-type-checking
] Implement unquoted-type-alias
(TC007
) and quoted-type-alias
(TC008
) (#12927)flake8-use-pathlib
] Recommend Path.iterdir()
over os.listdir()
(PTH208
) (#14509)pylint
] Extend invalid-envvar-default
to detect os.environ.get
(PLW1508
) (#14512)pylint
] Implement len-test
(PLC1802
) (#14309)refurb
] Fix bug where methods defined using lambdas were flagged by FURB118
(#14639)ruff
] Auto-add r
prefix when string has no backslashes for unraw-re-pattern
(RUF039
) (#14536)ruff
] Implement invalid-assert-message-literal-argument
(RUF040
) (#14488)ruff
] Implement unnecessary-nested-literal
(RUF041
) (#14323)ruff
] Implement unnecessary-regular-expression
(RUF055
) (#14659)pep8-naming
] Eliminate false positives for single-letter names (N811
, N814
) (#14584)pyflakes
] Avoid false positives in @no_type_check
contexts (F821
, F722
) (#14615)ruff
] Detect redirected-noqa in file-level comments (RUF101
) (#14635)ruff
] Mark fixes for unsorted-dunder-all
and unsorted-dunder-slots
as unsafe when there are complex comments in the sequence (RUF022
, RUF023
) (#14560)None | None
for redundant-none-literal
(PYI061
) and never-union
(RUF020
) (#14583, #14589)flake8-bugbear
] Fix mutable-contextvar-default
to resolve annotated function calls properly (B039
) (#14532)flake8-pyi
, ruff
] Fix traversal of nested literals and unions (PYI016
, PYI051
, PYI055
, PYI062
, RUF041
) (#14641)flake8-pyi
] Avoid rewriting invalid type expressions in unnecessary-type-union
(PYI055
) (#14660)flake8-type-checking
] Avoid syntax errors and type checking problem for quoted annotations autofix (TC003
, TC006
) (#14634)pylint
] Do not wrap function calls in parentheses in the fix for unnecessary-dunder-call (PLC2801
) (#14601)ruff
] Handle attrs
's auto_attribs
correctly (RUF009
) (#14520)