Release Notes
Preview features
- [
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)
Rule changes
- [
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)
Formatter
- Fix bracket spacing for single-element tuples in f-string expressions (#15537)
- Fix unstable f-string formatting for expressions containing a trailing comma (#15545)
Performance
- Avoid quadratic membership check in import fixes (#15576)
Server
- Allow
unsafe-fixes
settings for code actions (#15666)
Bug fixes
- [
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)
- Preserve raw string prefix and escapes in all codegen fixes (#15694)
Documentation
- Generate documentation redirects for lowercase rule codes (#15564)
TRY300
: Add some extra notes on not catching exceptions you didn't expect (#15036)
Contributors
Install ruff 0.9.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-installer.ps1 | iex"
Download ruff 0.9.3