In preview, Ruff now enables a significantly expanded default rule set of 412
rules, up from the stable default set of 59 rules. The new rules are mostly a
superset of the stable defaults, with the exception of these rules, which are
removed from the preview defaults:
This PR contains the following updates:
| Package | Change | Age | Confidence |
|---|---|---|---|
| [ruff](https://docs.astral.sh/ruff) ([source](https://github.com/astral-sh/ruff), [changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)) | `==0.15.1` -> `==0.15.2` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) |
---
### Release Notes
<details>
<summary>astral-sh/ruff (ruff)</summary>
### [`v0.15.2`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0152)
[Compare Source](https://github.com/astral-sh/ruff/compare/0.15.1...0.15.2)
Released on 2026-02-19.
##### Preview features
- Expand the default rule set ([#​23385](https://github.com/astral-sh/ruff/pull/23385))
In preview, Ruff now enables a significantly expanded default rule set of 412
rules, up from the stable default set of 59 rules. The new rules are mostly a
superset of the stable defaults, with the exception of these rules, which are
removed from the preview defaults:
- [`multiple-imports-on-one-line`](https://docs.astral.sh/ruff/rules/multiple-imports-on-one-line) (`E401`)
- [`module-import-not-at-top-of-file`](https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file) (`E402`)
- [`module-import-not-at-top-of-file`](https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file) (`E701`)
- [`multiple-statements-on-one-line-semicolon`](https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon) (`E702`)
- [`useless-semicolon`](https://docs.astral.sh/ruff/rules/useless-semicolon) (`E703`)
- [`none-comparison`](https://docs.astral.sh/ruff/rules/none-comparison) (`E711`)
- [`true-false-comparison`](https://docs.astral.sh/ruff/rules/true-false-comparison) (`E712`)
- [`not-in-test`](https://docs.astral.sh/ruff/rules/not-in-test) (`E713`)
- [`not-is-test`](https://docs.astral.sh/ruff/rules/not-is-test) (`E714`)
- [`type-comparison`](https://docs.astral.sh/ruff/rules/type-comparison) (`E721`)
- [`lambda-assignment`](https://docs.astral.sh/ruff/rules/lambda-assignment) (`E731`)
- [`ambiguous-variable-name`](https://docs.astral.sh/ruff/rules/ambiguous-variable-name) (`E741`)
- [`ambiguous-class-name`](https://docs.astral.sh/ruff/rules/ambiguous-class-name) (`E742`)
- [`ambiguous-function-name`](https://docs.astral.sh/ruff/rules/ambiguous-function-name) (`E743`)
- [`undefined-local-with-import-star`](https://docs.astral.sh/ruff/rules/undefined-local-with-import-star) (`F403`)
- [`undefined-local-with-import-star-usage`](https://docs.astral.sh/ruff/rules/undefined-local-with-import-star-usage) (`F405`)
- [`undefined-local-with-nested-import-star-usage`](https://docs.astral.sh/ruff/rules/undefined-local-with-nested-import-star-usage) (`F406`)
- [`forward-annotation-syntax-error`](https://docs.astral.sh/ruff/rules/forward-annotation-syntax-error) (`F722`)
If you use preview and prefer the old defaults, you can restore them with
configuration like:
```toml
# ruff.toml
[lint]
select = ["E4", "E7", "E9", "F"]
# pyproject.toml
[tool.ruff.lint]
select = ["E4", "E7", "E9", "F"]
```
If you do give them a try, feel free to share your feedback in the [GitHub
discussion](https://github.com/astral-sh/ruff/discussions/23203)!
- \[`flake8-pyi`] Also check string annotations (`PYI041`) ([#​19023](https://github.com/astral-sh/ruff/pull/19023))
##### Bug fixes
- \[`flake8-async`] Fix `in_async_context` logic ([#​23426](https://github.com/astral-sh/ruff/pull/23426))
- \[`ruff`] Fix for `RUF102` should delete entire comment ([#​23380](https://github.com/astral-sh/ruff/pull/23380))
- \[`ruff`] Suppress diagnostic for strings with backslashes in interpolations before Python 3.12 (`RUF027`) ([#​21069](https://github.com/astral-sh/ruff/pull/21069))
- \[`flake8-bugbear`] Fix `B023` false positive for immediately-invoked lambdas ([#​23294](https://github.com/astral-sh/ruff/pull/23294))
- \[parser] Fix false syntax error for match-like annotated assignments ([#​23297](https://github.com/astral-sh/ruff/pull/23297))
- \[parser] Fix indentation tracking after line continuations ([#​23417](https://github.com/astral-sh/ruff/pull/23417))
##### Rule changes
- \[`flake8-executable`] Allow global flags in uv shebangs (`EXE003`) ([#​22582](https://github.com/astral-sh/ruff/pull/22582))
- \[`pyupgrade`] Fix handling of `typing.{io,re}` (`UP035`) ([#​23131](https://github.com/astral-sh/ruff/pull/23131))
- \[`ruff`] Detect `PLC0207` on chained `str.split()` calls ([#​23275](https://github.com/astral-sh/ruff/pull/23275))
##### CLI
- Remove invalid inline `noqa` warning ([#​23270](https://github.com/astral-sh/ruff/pull/23270))
##### Configuration
- Add extension mapping to configuration file options ([#​23384](https://github.com/astral-sh/ruff/pull/23384))
##### Documentation
- Add `Q004` to the list of conflicting rules ([#​23340](https://github.com/astral-sh/ruff/pull/23340))
- \[`ruff`] Expand `lint.external` docs and add sub-diagnostic (`RUF100`, `RUF102`) ([#​23268](https://github.com/astral-sh/ruff/pull/23268))
##### Contributors
- [@​dylwil3](https://github.com/dylwil3)
- [@​Jkhall81](https://github.com/Jkhall81)
- [@​danparizher](https://github.com/danparizher)
- [@​dhruvmanila](https://github.com/dhruvmanila)
- [@​harupy](https://github.com/harupy)
- [@​ngnpope](https://github.com/ngnpope)
- [@​amyreese](https://github.com/amyreese)
- [@​kar-ganap](https://github.com/kar-ganap)
- [@​robsdedude](https://github.com/robsdedude)
- [@​shaanmajid](https://github.com/shaanmajid)
- [@​ntBre](https://github.com/ntBre)
- [@​toslunar](https://github.com/toslunar)
</details>
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xMy4wIiwidXBkYXRlZEluVmVyIjoiNDIuMTMuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR contains the following updates:
==0.15.1->==0.15.2Release Notes
astral-sh/ruff (ruff)
v0.15.2Compare Source
Released on 2026-02-19.
Preview features
Expand the default rule set (#23385)
In preview, Ruff now enables a significantly expanded default rule set of 412
rules, up from the stable default set of 59 rules. The new rules are mostly a
superset of the stable defaults, with the exception of these rules, which are
removed from the preview defaults:
multiple-imports-on-one-line(E401)module-import-not-at-top-of-file(E402)module-import-not-at-top-of-file(E701)multiple-statements-on-one-line-semicolon(E702)useless-semicolon(E703)none-comparison(E711)true-false-comparison(E712)not-in-test(E713)not-is-test(E714)type-comparison(E721)lambda-assignment(E731)ambiguous-variable-name(E741)ambiguous-class-name(E742)ambiguous-function-name(E743)undefined-local-with-import-star(F403)undefined-local-with-import-star-usage(F405)undefined-local-with-nested-import-star-usage(F406)forward-annotation-syntax-error(F722)If you use preview and prefer the old defaults, you can restore them with
configuration like:
If you do give them a try, feel free to share your feedback in the GitHub
discussion!
[
flake8-pyi] Also check string annotations (PYI041) (#19023)Bug fixes
flake8-async] Fixin_async_contextlogic (#23426)ruff] Fix forRUF102should delete entire comment (#23380)ruff] Suppress diagnostic for strings with backslashes in interpolations before Python 3.12 (RUF027) (#21069)flake8-bugbear] FixB023false positive for immediately-invoked lambdas (#23294)Rule changes
flake8-executable] Allow global flags in uv shebangs (EXE003) (#22582)pyupgrade] Fix handling oftyping.{io,re}(UP035) (#23131)ruff] DetectPLC0207on chainedstr.split()calls (#23275)CLI
noqawarning (#23270)Configuration
Documentation
Q004to the list of conflicting rules (#23340)ruff] Expandlint.externaldocs and add sub-diagnostic (RUF100,RUF102) (#23268)Contributors
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Renovate Bot.