⬆️ Update dependency ruff to ^0.9.0
This MR contains the following updates:
Package | Type | Update | Change |
---|---|---|---|
ruff (source, changelog) | dev | minor |
^0.8.0 -> ^0.9.0
|
Release Notes
astral-sh/ruff (ruff)
v0.9.2
Preview features
- [
airflow
] Fix typo "security_managr" to "security_manager" (AIR303
) (#15463) - [
airflow
] extend and fix AIR302 rules (#15525) - [
fastapi
] Handle parameters withDepends
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|
inTC008
(#15201)
Rule changes
- [
flake8-todos
] Allow VSCode GitHub MR extension style links inmissing-todo-link
(TD003
) (#15519) - [
pyflakes
] Show syntax error message forF722
(#15523)
Formatter
- Fix curly bracket spacing around f-string expressions containing curly braces (#15471)
- Fix joining of f-strings with different quotes when using quote style
Preserve
(#15524)
Server
- Avoid indexing the same workspace multiple times (#15495)
- Display context for
ruff.configuration
errors (#15452)
Configuration
- Remove
flatten
to improve deserialization error messages (#15414)
Bug fixes
- Parse triple-quoted string annotations as if parenthesized (#15387)
- [
fastapi
] UpdateAnnotated
fixes (FAST002
) (#15462) - [
flake8-bandit
] Check forbuiltins
instead ofbuiltin
(S102
,PTH123
) (#15443) - [
flake8-pathlib
] Fix--select
foros-path-dirname
(PTH120
) (#15446) - [
ruff
] Fix false positive on global keyword (RUF052
) (#15235)
v0.9.1
Preview features
- [
pycodestyle
] Runtoo-many-newlines-at-end-of-file
on each cell in notebooks (W391
) (#15308) - [
ruff
] Omit diagnostic for shadowed private function parameters inused-dummy-variable
(RUF052
) (#15376)
Rule changes
- [
flake8-bugbear
] Improveassert-raises-exception
message (B017
) (#15389)
Formatter
- Preserve trailing end-of line comments for the last string literal in implicitly concatenated strings (#15378)
Server
- Fix a bug where the server and client notebooks were out of sync after reordering cells (#15398)
Bug fixes
- [
flake8-pie
] Correctly remove wrapping parentheses (PIE800
) (#15394) - [
pyupgrade
] Handle comments and multiline expressions correctly (UP037
) (#15337)
v0.9.0
Check out the blog post for a migration guide and overview of the changes!
Breaking 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.
Stabilization
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 calledbuiltin-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
): Detectpytest.parametrize
calls outside decorators and calls with keyword arguments. -
module-import-not-at-top-of-file
(E402
): Ignorepytest.importorskip
calls between import statements. -
mutable-dataclass-default
(RUF008
) andfunction-call-in-dataclass-default-argument
(RUF009
): Add support forattrs
. -
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
)
Formatter
This release introduces the new 2025 stable style (#13371), stabilizing the following changes:
- Format expressions in f-string elements (#7594)
- Alternate quotes for strings inside f-strings (#13860)
- Preserve the casing of hex codes in f-string debug expressions (#14766)
- Choose the quote style for each string literal in an implicitly concatenated f-string rather than for the entire string (#13539)
- Automatically join an implicitly concatenated string into a single string literal if it fits on a single line (#9457)
- Remove the
ISC001
incompatibility warning (#15123) - Prefer parenthesizing the
assert
message over breaking the assertion expression (#9457) - Automatically parenthesize over-long
if
guards inmatch
case
clauses (#13513) - More consistent formatting for
match
case
patterns (#6933) - Avoid unnecessary parentheses around return type annotations (#13381)
- Keep the opening parentheses on the same line as the
if
keyword for comprehensions where the condition has a leading comment (#12282) - More consistent formatting for
with
statements with a single context manager for Python 3.8 or older (#10276) - Correctly calculate the line-width for code blocks in docstrings when using
max-doc-code-line-length = "dynamic"
(#13523)
Preview features
- [
flake8-bugbear
] Implementclass-as-data-structure
(B903
) (#9601) - [
flake8-type-checking
] Applyquoted-type-alias
more eagerly inTYPE_CHECKING
blocks and ignore it in stubs (TC008
) (#15180) - [
pylint
] Ignoreeq-without-hash
in stub files (PLW1641
) (#15310) - [
pyupgrade
] SplitUP007
into two individual rules:UP007
forUnion
andUP045
forOptional
(UP007
,UP045
) (#15313) - [
ruff
] New rule that detects classes that are both an enum and adataclass
(RUF049
) (#15299) - [
ruff
] RecodeRUF025
toRUF037
(RUF037
) (#15258)
Rule changes
- [
flake8-builtins
] Ignorestdlib-module-shadowing
in stub files(A005
) (#15350) - [
flake8-return
] Add support for functions returningtyping.Never
(RET503
) (#15298)
Server
- Improve the observability by removing the need for the "trace" value to turn on or off logging. The server logging is solely controlled using the
logLevel
server setting which defaults toinfo
. 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) - Ignore diagnostics from other sources for code action requests (#15373)
CLI
- Improve the error message for
--config key=value
when thekey
is for a table and it’s a simplevalue
Bug fixes
- [
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 fromformat
(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 theint
-call argument when removing theint
call would change semantics (RUF046
) (#15277)
v0.8.6
Preview features
- [
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 whenndigits
is possibly negative (RUF057
) (#15234)
Rule changes
- [
flake8-todos
] remove issue code length restriction (TD003
) (#15175) - [
pyflakes
] Ignore errors in@no_type_check
string annotations (F722
,F821
) (#15215)
CLI
- Show errors for attempted fixes only when passed
--verbose
(#15237)
Bug fixes
- [
ruff
] Avoid syntax error when removing int over multiple lines (RUF046
) (#15230) - [
pyupgrade
] Revert "Add all PEP-585 names toUP006
rule" (#15250)
v0.8.5
Preview features
- [
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
] UpdateFAST002
to check keyword-only arguments (#15119) - [
flake8-type-checking
] DisableTC006
andTC007
in stub files (#15179) - [
pylint
] Detect nested methods correctly (PLW1641
) (#15032) - [
ruff
] Detect more strict-integer expressions (RUF046
) (#14833) - [
ruff
] Implementfalsy-dict-get-fallback
(RUF056
) (#15160) - [
ruff
] Implementunnecessary-round
(RUF057
) (#14828)
Rule changes
- Visit PEP 764 inline
TypedDict
keys as non-type-expressions (#15073) - [
flake8-comprehensions
] SkipC416
if comprehension contains unpacking (#14909) - [
flake8-pie
] Allowcast(SomeType, ...)
(PIE796
) (#15141) - [
flake8-simplify
] More precise inference for dictionaries (SIM300
) (#15164) - [
flake8-use-pathlib
] Catch redundant joins inPTH201
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 toUP006
rule (#5454)
Configuration
- [
flake8-type-checking
] Improve flexibility ofruntime-evaluated-decorators
(#15204) - [
pydocstyle
] Add setting to ignore missing documentation for*args
and**kwargs
parameters (D417
) (#15210) - [
ruff
] Add an allowlist forunsafe-markup-use
(RUF035
) (#15076)
Bug fixes
- Fix type subscript on older python versions (#15090)
- Use
TypeChecker
for detectingfastapi
routes (#15093) - [
pycodestyle
] Avoid false positives and negatives related to type parameter default syntax (E225
,E251
) (#15214)
Documentation
- Fix incorrect doc in
shebang-not-executable
(EXE001
) and add git+windows solution to executable bit (#15208) - Rename rules currently not conforming to naming convention (#15102)
v0.8.4
Preview features
- [
airflow
] ExtendAIR302
with additional functions and classes (#15015) - [
airflow
] Implementmoved-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 inPERF401
when list variable is after thefor
loop (#14971) - [
perflint
] Simplify finding the loop target inPERF401
(#15025) - [
pylint
] Preserve original value format (PLR6104
) (#14978) - [
ruff
] Avoid false positives forRUF027
for typing context bindings (#15037) - [
ruff
] Check for ambiguous pattern passed topytest.raises()
(RUF043
) (#14966)
Rule changes
- [
flake8-bandit
] CheckS105
for annotated assignment (#15059) - [
flake8-pyi
] More autofixes forredundant-none-literal
(PYI061
) (#14872) - [
pydocstyle
] Skip leading whitespace forD403
(#14963) - [
ruff
] SkipSQLModel
base classes formutable-class-default
(RUF012
) (#14949)
Bug
- [
perflint
] Parenthesize walrus expressions in autofix formanual-list-comprehension
(PERF401
) (#15050)
Server
- Check diagnostic refresh support from client capability which enables dynamic configuration for various editors (#15014)
v0.8.3
Preview features
- Fix fstring formatting removing overlong implicit concatenated string in expression part (#14811)
- [
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 forexcept*
(B025
,B029
,B030
,B904
) (#14815) - [
flake8-bugbear
]itertools.batched()
without explicitstrict
(B911
) (#14408) - [
flake8-use-pathlib
] Dotless suffix passed toPath.with_suffix()
(PTH210
) (#14779) - [
pylint
] Include parentheses and multiple comparators in check forboolean-chained-comparison
(PLR1716
) (#14781) - [
ruff
] Do not simplifyround()
calls (RUF046
) (#14832) - [
ruff
] Don't emitused-dummy-variable
on function parameters (RUF052
) (#14818) - [
ruff
] Implementif-key-in-dict-del
(RUF051
) (#14553) - [
ruff
] Mark autofix forRUF052
as always unsafe (#14824) - [
ruff
] Teach autofix forused-dummy-variable
about TypeVars etc. (RUF052
) (#14819)
Rule changes
- [
flake8-bugbear
] Offer unsafe autofix forno-explicit-stacklevel
(B028
) (#14829) - [
flake8-pyi
] Skip all type definitions instring-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 forconvert-typed-dict-functional-to-class
andconvert-named-tuple-functional-to-class
as unsafe if they will remove comments (UP013
,UP014
) (#14842)
Bug fixes
- Raise syntax error for mixing
except
andexcept*
(#14895) - [
flake8-bugbear
] FixB028
to allowstacklevel
to be explicitly assigned as a positional argument (#14868) - [
flake8-bugbear
] SkipB028
ifwarnings.warn
is called with*args
or**kwargs
(#14870) - [
flake8-comprehensions
] Skip iterables with named expressions inunnecessary-map
(C417
) (#14827) - [
flake8-pyi
] Also removeself
andcls
's annotation (PYI034
) (#14801) - [
flake8-pytest-style
] Fixpytest-parametrize-names-wrong-type
(PT006
) to edit bothargnames
andargvalues
if both of them are single-element tuples/lists (#14699) - [
perflint
] Improve autofix forPERF401
(#14369) - [
pylint
] FixPLW1508
false positive for default string created via a mult operation (#14841)
Configuration
-
If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot.