Release Notes
Check out the blog post for a migration guide and overview of the changes!
Breaking 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
orproject.requires-python
(#13896) -
Changed location of
pydoclint
diagnosticspydoclint
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 thenoqa
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 installerPreviously, 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
).
Removed Rules
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
)
Remapped rules
The following rules have been remapped to new rule codes:
flake8-type-checking
:TCH
toTC
Stabilization
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 allprintf
-like usages even if no autofix is available
The following fixes have been stabilized:
zip-instead-of-pairwise
(RUF007
)
Preview features
- [
flake8-datetimez
] Exemptmin.time()
andmax.time()
(DTZ901
) (#14394) - [
flake8-pie
] Mark fix as unsafe if the following statement is a string literal (PIE790
) (#14393) - [
flake8-pyi
] New ruleredundant-none-literal
(PYI061
) (#14316) - [
flake8-pyi
] Add autofix forredundant-numeric-union
(PYI041
) (#14273) - [
ruff
] New rulemap-int-version-parsing
(RUF048
) (#14373) - [
ruff
] New ruleredundant-bool-literal
(RUF038
) (#14319) - [
ruff
] New ruleunraw-re-pattern
(RUF039
) (#14446) - [
pycodestyle
] Exemptpytest.importorskip()
calls (E402
) (#14474) - [
pylint
] Autofix suggests using sets when possible (PLR1714
) (#14372)
Rule changes
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)
Configuration
- Ruff now emits a warning instead of an error when a configuration
ignore
s a rule that has been removed (#14435) - Ruff now validates that
lint.flake8-import-conventions.aliases
only uses valid module names and aliases (#14477)
Contributors
- @AlexWaygood
- @CarrotManMatt
- @Daverball
- @Glyphack
- @InSyncWithFoo
- @MichaReiser
- @cake-monotone
- @charliermarsh
- @dhruvmanila
- @diceroll123
- @dylwil3
- @hauntsaninja
- @konstin
- @sbrugman
- @sharkdp
- @takaya0
- @tjkuson
- @zanieb
Install ruff 0.8.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.8.0/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.8.0/ruff-installer.ps1 | iex"