@astral-sh/ruff-wasm-bundler
Advanced tools
Changelog
0.8.0
Check out the blog post for a migration guide and overview of the changes!
See also, the "Remapped rules" section which may result in disabled rules.
Default to Python 3.9
Ruff now defaults to Python 3.9 instead of 3.8 if no explicit Python version is configured using ruff.target-version
or project.requires-python
(#13896)
Changed location of pydoclint
diagnostics
pydoclint
diagnostics now point to the first-line of the problematic docstring. Previously, this was not the case.
If you've opted into these preview rules but have them suppressed using
noqa
comments in
some places, this change may mean that you need to move the noqa
suppression
comments. Most users should be unaffected by this change.
Use XDG (i.e. ~/.local/bin
) instead of the Cargo home directory in the standalone installer
Previously, Ruff's installer used $CARGO_HOME
or ~/.cargo/bin
for its target install directory. Now, Ruff will be installed into $XDG_BIN_HOME
, $XDG_DATA_HOME/../bin
, or ~/.local/bin
(in that order).
This change is only relevant to users of the standalone Ruff installer (using the shell or PowerShell script). If you installed Ruff using uv or pip, you should be unaffected.
Changes to the line width calculation
Ruff now uses a new version of the unicode-width Rust crate to calculate the line width. In very rare cases, this may lead to lines containing Unicode characters being reformatted, or being considered too long when they were not before (E501
).
The following deprecated rules have been removed:
missing-type-self
(ANN101
)missing-type-cls
(ANN102
)syntax-error
(E999
)pytest-missing-fixture-name-underscore
(PT004
)pytest-incorrect-fixture-name-underscore
(PT005
)unpacked-list-comprehension
(UP027
)The following rules have been remapped to new rule codes:
flake8-type-checking
: TCH
to TC
The following rules have been stabilized and are no longer in preview:
builtin-import-shadowing
(A004
)mutable-contextvar-default
(B039
)fast-api-redundant-response-model
(FAST001
)fast-api-non-annotated-dependency
(FAST002
)dict-index-missing-items
(PLC0206
)pep484-style-positional-only-parameter
(PYI063
)redundant-final-literal
(PYI064
)bad-version-info-order
(PYI066
)parenthesize-chained-operators
(RUF021
)unsorted-dunder-all
(RUF022
)unsorted-dunder-slots
(RUF023
)assert-with-print-message
(RUF030
)unnecessary-default-type-args
(UP043
)The following behaviors have been stabilized:
ambiguous-variable-name
(E741
): Violations in stub files are now ignored. Stub authors typically don't control variable names.printf-string-formatting
(UP031
): Report all printf
-like usages even if no autofix is availableThe following fixes have been stabilized:
zip-instead-of-pairwise
(RUF007
)flake8-datetimez
] Exempt min.time()
and max.time()
(DTZ901
) (#14394)flake8-pie
] Mark fix as unsafe if the following statement is a string literal (PIE790
) (#14393)flake8-pyi
] New rule redundant-none-literal
(PYI061
) (#14316)flake8-pyi
] Add autofix for redundant-numeric-union
(PYI041
) (#14273)ruff
] New rule map-int-version-parsing
(RUF048
) (#14373)ruff
] New rule redundant-bool-literal
(RUF038
) (#14319)ruff
] New rule unraw-re-pattern
(RUF039
) (#14446)pycodestyle
] Exempt pytest.importorskip()
calls (E402
) (#14474)pylint
] Autofix suggests using sets when possible (PLR1714
) (#14372)invalid-pyproject-toml
(RUF200
): Updated to reflect the provisionally accepted PEP 639.flake8-pyi
] Avoid panic in unfixable case (PYI041
) (#14402)flake8-type-checking
] Correctly handle quotes in subscript expression when generating an autofix (#14371)pylint
] Suggest correct autofix for __contains__
(PLC2801
) (#14424)Changelog
0.7.4
flake8-datetimez
] Detect usages of datetime.max
/datetime.min
(DTZ901
) (#14288)flake8-logging
] Implement root-logger-calls
(LOG015
) (#14302)flake8-no-pep420
] Detect empty implicit namespace packages (INP001
) (#14236)flake8-pyi
] Add "replace with Self
" fix (PYI019
) (#14238)perflint
] Implement quick-fix for manual-list-comprehension
(PERF401
) (#13919)pylint
] Implement shallow-copy-environ
(W1507
) (#14241)ruff
] Implement none-not-at-end-of-union
(RUF036
) (#14314)ruff
] Implementation unsafe-markup-call
from flake8-markupsafe
plugin (RUF035
) (#14224)ruff
] Report problems for attrs
dataclasses (RUF008
, RUF009
) (#14327)flake8-boolean-trap
] Exclude dunder methods that define operators (FBT001
) (#14203)flake8-pyi
] Add "replace with Self
" fix (PYI034
) (#14217)flake8-pyi
] Always autofix duplicate-union-members
(PYI016
) (#14270)flake8-pyi
] Improve autofix for nested and mixed type unions for unnecessary-type-union
(PYI055
) (#14272)flake8-pyi
] Mark fix as unsafe when type annotation contains comments for duplicate-literal-member
(PYI062
) (#14268)ruff.configuration
(#14352)PLC014
(useless-import-alias
) and I002
(missing-required-import
) by considering lint.isort.required-imports
for PLC014
(#14287)flake8-type-checking
] Skip quoting annotation if it becomes invalid syntax (TCH001
)flake8-pyi
] Avoid using typing.Self
in stub files pre-Python 3.11 (PYI034
) (#14230)flake8-pytest-style
] Flag pytest.raises
call with keyword argument expected_exception
(PT011
) (#14298)flake8-simplify
] Infer "unknown" truthiness for literal iterables whose items are all unpacks (SIM222
) (#14263)flake8-type-checking
] Fix false positives for typing.Annotated
(TCH001
) (#14311)pylint
] Allow await
at the top-level scope of a notebook (PLE1142
) (#14225)pylint
] Fix miscellaneous issues in await-outside-async
detection (PLE1142
) (#14218)pyupgrade
] Avoid applying PEP 646 rewrites in invalid contexts (UP044
) (#14234)pyupgrade
] Detect permutations in redundant open modes (UP015
) (#14255)refurb
] Avoid triggering hardcoded-string-charset
for reordered sets (FURB156
) (#14233)refurb
] Further special cases added to verbose-decimal-constructor
(FURB157
) (#14216)refurb
] Use UserString
instead of non-existent UserStr
(FURB189
) (#14209)ruff
] Avoid treating lowercase letters as # noqa
codes (RUF100
) (#14229)ruff
] Do not report when Optional
has no type arguments (RUF013
) (#14181)Changelog
0.7.3
flake8-pyi
] Include all Python file types for PYI006
and PYI066
(#14059)flake8-simplify
] Implement split-of-static-string
(SIM905
) (#14008)refurb
] Implement subclass-builtin
(FURB189
) (#14105)ruff
] Improve diagnostic messages and docs (RUF031
, RUF032
, RUF034
) (#14068)B033
, PLC0208
) (#14064)eradicate
] Better detection of IntelliJ language injection comments (ERA001
) (#14094)flake8-pyi
] Add autofix for docstring-in-stub
(PYI021
) (#14150)flake8-pyi
] Update duplicate-literal-member
(PYI062
) to alawys provide an autofix (#14188)pyflakes
] Detect items that hash to same value in duplicate dictionaries (F601
) (#14065)ruff
] Fix false positive for decorators (RUF028
) (#14061)# noqa
(#12809)eradicate
] ignore # language=
in commented-out-code rule (ERA001) (#14069)flake8-bugbear
] - do not run mutable-argument-default
on stubs (B006
) (#14058)flake8-builtins
] Skip lambda expressions in builtin-argument-shadowing (A002)
(#14144)flake8-comprehension
] Also remove trailing comma while fixing C409
and C419
(#14097)flake8-simplify
] Allow open
without context manager in return
statement (SIM115
) (#14066)pylint
] Respect hash-equivalent literals in iteration-over-set
(PLC0208
) (#14063)pylint
] Update known dunder methods for Python 3.13 (PLW3201
) (#14146)pyupgrade
] - ignore kwarg unpacking for UP044
(#14053)refurb
] Parse more exotic decimal strings in verbose-decimal-constructor
(FURB157
) (#14098)Changelog
0.7.2
pyupgrade
] Add PEP 646 Unpack
conversion to *
with fix (UP044
) (#13988)known_stdlibs.rs
with stdlibs 2024.10.25 (#13963)flake8-no-pep420
] Skip namespace package enforcement for PEP 723 scripts (INP001
) (#13974)flake8-type-checking
] Fix false positive for singledispatchmethod
(TCH003
) (#13941)flake8-type-checking
] Treat return type of singledispatch
as runtime-required (TCH003
) (#13957)flake8-simplify
] Include caveats of enabling if-else-block-instead-of-if-exp
(SIM108
) (#14019)Changelog
0.7.1
E221
and E222
to flag missing or extra whitespace around ==
operator (#13890)pylint
] Restrict iteration-over-set
to only work on sets of literals (PLC0208
) (#13731)flake8-type-checking
] Support auto-quoting when annotations contain quotes (#11811)ARG002
compatible with EM101
when raising NotImplementedError
(#13714)Changelog
0.7.0
Check out the blog post for a migration guide and overview of the changes!
PT001
and PT023
now default to omitting the decorator parentheses when there are no arguments
(#12838, #13292).
This was a change that we attempted to make in Ruff v0.6.0, but only partially made due to an error on our part.
See the blog post for more details.useless-try-except
rule (in our tryceratops
category) has been recoded from TRY302
to
TRY203
(#13502). This ensures Ruff's code is consistent with
the same rule in the tryceratops
linter.lint.allow-unused-imports
setting has been removed (#13677). Use
lint.pyflakes.allow-unused-imports
instead.refurb
] implement hardcoded-string-charset
(FURB156) (#13530)refurb
] Count codepoints not bytes for slice-to-remove-prefix-or-suffix (FURB188)
(#13631)pylint
] Mark PLE1141
fix as unsafe (#13629)flake8-async
] Consider async generators to be "checkpoints" for cancel-scope-no-checkpoint
(ASYNC100
) (#13639)flake8-bugbear
] Do not suggest setting parameter strict=
to False
in B905
diagnostic message (#13656)flake8-todos
] Only flag the word "TODO", not words starting with "todo" (TD006
) (#13640)pycodestyle
] Fix whitespace-related false positives and false negatives inside type-parameter lists (E231
, E251
) (#13704)flake8-simplify
] Stabilize preview behavior for SIM115
so that the rule can detect files
being opened from a wider range of standard-library functions (#12959).--statistics
command (#13774)Changelog
0.6.9
refurb
] Mark FURB118
fix as unsafe (#13613)pydocstyle
] Don't raise D208
when last line is non-empty (#13372)pylint
] Preserve trivia (i.e. comments) in PLR5501
autofix (#13573)pyflakes
] Add allow-unused-imports
setting for unused-import
rule (F401
) (#13601)flake8-bugbear
] Avoid short circuiting B017
for multiple context managers (#13609)pylint
] Do not offer an invalid fix for PLR1716
when the comparisons contain parenthesis (#13527)pyupgrade
] Fix UP043
to apply to collections.abc.Generator
and collections.abc.AsyncGenerator
(#13611)refurb
] Fix handling of slices in tuples for FURB118
, e.g., x[:, 1]
(#13518)astral-sh/ruff-action
(#13551)Changelog
0.6.8
match case
clauses (#13510)if
guards in match..case
clauses (#13513)ruff analyze graph
(#13486)pylint
] Implement boolean-chained-comparison
(R1716
) (#13435)lake8-simplify
] Detect SIM910
when using variadic keyword arguments, i.e., **kwargs
(#13503)pyupgrade
] Avoid false negatives with non-reference shadowed bindings of loop variables (UP028
) (#13504)*args
(#13512)Changelog
0.6.7
exclude
support to ruff analyze
(#13425)pycodestyle
] Fix: Don't autofix if the first line ends in a question mark? (D400) (#13399)lint.exclude
in ruff check --add-noqa
(#13427)Changelog
0.6.6
refurb
] Skip slice-to-remove-prefix-or-suffix
(FURB188
) when non-trivial slice steps are present (#13405)LineIndex::offset
calculation (#13407)fastapi
] Respect FastAPI aliases in route definitions (#13394)pydocstyle
] Respect word boundaries when detecting function signature in docs (#13388)