This is a follow-up release to 0.15.3 that resolves a panic when the new rule PLR1712 was enabled with any rule that analyzes definitions, such as many of the ANN or D rules.
Bug fixes
Fix panic on access to definitions after analyzing definitions (#23588)
[pyflakes] Suppress false positive in F821 for names used before del in stub files (#23550)
Documentation
Clarify first-party import detection in Ruff (#23591)
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.2` -> `==0.15.5` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) |
---
### Release Notes
<details>
<summary>astral-sh/ruff (ruff)</summary>
### [`v0.15.5`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0155)
[Compare Source](https://github.com/astral-sh/ruff/compare/0.15.4...0.15.5)
Released on 2026-03-05.
##### Preview features
- Discover Markdown files by default in preview mode ([#​23434](https://github.com/astral-sh/ruff/pull/23434))
- \[`perflint`] Extend `PERF102` to comprehensions and generators ([#​23473](https://github.com/astral-sh/ruff/pull/23473))
- \[`refurb`] Fix `FURB101` and `FURB103` false positives when I/O variable is used later ([#​23542](https://github.com/astral-sh/ruff/pull/23542))
- \[`ruff`] Add fix for `none-not-at-end-of-union` (`RUF036`) ([#​22829](https://github.com/astral-sh/ruff/pull/22829))
- \[`ruff`] Fix false positive for `re.split` with empty string pattern (`RUF055`) ([#​23634](https://github.com/astral-sh/ruff/pull/23634))
##### Bug fixes
- \[`fastapi`] Handle callable class dependencies with `__call__` method (`FAST003`) ([#​23553](https://github.com/astral-sh/ruff/pull/23553))
- \[`pydocstyle`] Fix numpy section ordering (`D420`) ([#​23685](https://github.com/astral-sh/ruff/pull/23685))
- \[`pyflakes`] Fix false positive for names shadowing re-exports (`F811`) ([#​23356](https://github.com/astral-sh/ruff/pull/23356))
- \[`pyupgrade`] Avoid inserting redundant `None` elements in `UP045` ([#​23459](https://github.com/astral-sh/ruff/pull/23459))
##### Documentation
- Document extension mapping for Markdown code formatting ([#​23574](https://github.com/astral-sh/ruff/pull/23574))
- Update default Python version examples ([#​23605](https://github.com/astral-sh/ruff/pull/23605))
##### Other changes
- Publish releases to Astral mirror ([#​23616](https://github.com/astral-sh/ruff/pull/23616))
##### Contributors
- [@​amyreese](https://github.com/amyreese)
- [@​stakeswky](https://github.com/stakeswky)
- [@​chirizxc](https://github.com/chirizxc)
- [@​anishgirianish](https://github.com/anishgirianish)
- [@​bxff](https://github.com/bxff)
- [@​zsol](https://github.com/zsol)
- [@​charliermarsh](https://github.com/charliermarsh)
- [@​ntBre](https://github.com/ntBre)
- [@​kar-ganap](https://github.com/kar-ganap)
### [`v0.15.4`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0154)
[Compare Source](https://github.com/astral-sh/ruff/compare/0.15.3...0.15.4)
Released on 2026-02-26.
This is a follow-up release to 0.15.3 that resolves a panic when the new rule `PLR1712` was enabled with any rule that analyzes definitions, such as many of the `ANN` or `D` rules.
##### Bug fixes
- Fix panic on access to definitions after analyzing definitions ([#​23588](https://github.com/astral-sh/ruff/pull/23588))
- \[`pyflakes`] Suppress false positive in `F821` for names used before `del` in stub files ([#​23550](https://github.com/astral-sh/ruff/pull/23550))
##### Documentation
- Clarify first-party import detection in Ruff ([#​23591](https://github.com/astral-sh/ruff/pull/23591))
- Fix incorrect `import-heading` example ([#​23568](https://github.com/astral-sh/ruff/pull/23568))
##### Contributors
- [@​stakeswky](https://github.com/stakeswky)
- [@​ntBre](https://github.com/ntBre)
- [@​thejcannon](https://github.com/thejcannon)
- [@​GeObts](https://github.com/GeObts)
### [`v0.15.3`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0153)
[Compare Source](https://github.com/astral-sh/ruff/compare/0.15.2...0.15.3)
Released on 2026-02-26.
##### Preview features
- Drop explicit support for `.qmd` file extension ([#​23572](https://github.com/astral-sh/ruff/pull/23572))
This can now be enabled instead by setting the [`extension`](https://docs.astral.sh/ruff/settings/#extension) option:
```toml
# ruff.toml
extension = { qmd = "markdown" }
# pyproject.toml
[tool.ruff]
extension = { qmd = "markdown" }
```
- Include configured extensions in file discovery ([#​23400](https://github.com/astral-sh/ruff/pull/23400))
- \[`flake8-bandit`] Allow suspicious imports in `TYPE_CHECKING` blocks (`S401`-`S415`) ([#​23441](https://github.com/astral-sh/ruff/pull/23441))
- \[`flake8-bugbear`] Allow `B901` in pytest hook wrappers ([#​21931](https://github.com/astral-sh/ruff/pull/21931))
- \[`flake8-import-conventions`] Add missing conventions from upstream (`ICN001`, `ICN002`) ([#​21373](https://github.com/astral-sh/ruff/pull/21373))
- \[`pydocstyle`] Add rule to enforce docstring section ordering (`D420`) ([#​23537](https://github.com/astral-sh/ruff/pull/23537))
- \[`pylint`] Implement `swap-with-temporary-variable` (`PLR1712`) ([#​22205](https://github.com/astral-sh/ruff/pull/22205))
- \[`ruff`] Add `unnecessary-assign-before-yield` (`RUF070`) ([#​23300](https://github.com/astral-sh/ruff/pull/23300))
- \[`ruff`] Support file-level noqa in `RUF102` ([#​23535](https://github.com/astral-sh/ruff/pull/23535))
- \[`ruff`] Suppress diagnostic for invalid f-strings before Python 3.12 (`RUF027`) ([#​23480](https://github.com/astral-sh/ruff/pull/23480))
- \[`flake8-bandit`] Don't flag `BaseLoader`/`CBaseLoader` as unsafe (`S506`) ([#​23510](https://github.com/astral-sh/ruff/pull/23510))
##### Bug fixes
- Avoid infinite loop between `I002` and `PYI025` ([#​23352](https://github.com/astral-sh/ruff/pull/23352))
- \[`pyflakes`] Fix false positive for `@overload` from `lint.typing-modules` (`F811`) ([#​23357](https://github.com/astral-sh/ruff/pull/23357))
- \[`pyupgrade`] Fix false positive for `TypeVar` default before Python 3.12 (`UP046`) ([#​23540](https://github.com/astral-sh/ruff/pull/23540))
- \[`pyupgrade`] Fix handling of `\N` in raw strings (`UP032`) ([#​22149](https://github.com/astral-sh/ruff/pull/22149))
##### Rule changes
- Render sub-diagnostics in the GitHub output format ([#​23455](https://github.com/astral-sh/ruff/pull/23455))
- \[`flake8-bugbear`] Tag certain `B007` diagnostics as unnecessary ([#​23453](https://github.com/astral-sh/ruff/pull/23453))
- \[`ruff`] Ignore unknown rule codes in `RUF100` ([#​23531](https://github.com/astral-sh/ruff/pull/23531))
These are now flagged by [`RUF102`](https://docs.astral.sh/ruff/rules/invalid-rule-code/) instead.
##### Documentation
- Fix missing settings links for several linters ([#​23519](https://github.com/astral-sh/ruff/pull/23519))
- Update isort action comments heading ([#​23515](https://github.com/astral-sh/ruff/pull/23515))
- \[`pydocstyle`] Fix double comma in description of `D404` ([#​23440](https://github.com/astral-sh/ruff/pull/23440))
##### Other changes
- Update the Python module (notably `find_ruff_bin`) for parity with uv ([#​23406](https://github.com/astral-sh/ruff/pull/23406))
##### Contributors
- [@​zanieb](https://github.com/zanieb)
- [@​o1x3](https://github.com/o1x3)
- [@​assadyousuf](https://github.com/assadyousuf)
- [@​kar-ganap](https://github.com/kar-ganap)
- [@​denyszhak](https://github.com/denyszhak)
- [@​amyreese](https://github.com/amyreese)
- [@​carljm](https://github.com/carljm)
- [@​anishgirianish](https://github.com/anishgirianish)
- [@​Bnyro](https://github.com/Bnyro)
- [@​danparizher](https://github.com/danparizher)
- [@​ntBre](https://github.com/ntBre)
- [@​gcomneno](https://github.com/gcomneno)
- [@​jaap3](https://github.com/jaap3)
- [@​stakeswky](https://github.com/stakeswky)
</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.2->==0.15.5Release Notes
astral-sh/ruff (ruff)
v0.15.5Compare Source
Released on 2026-03-05.
Preview features
perflint] ExtendPERF102to comprehensions and generators (#23473)refurb] FixFURB101andFURB103false positives when I/O variable is used later (#23542)ruff] Add fix fornone-not-at-end-of-union(RUF036) (#22829)ruff] Fix false positive forre.splitwith empty string pattern (RUF055) (#23634)Bug fixes
fastapi] Handle callable class dependencies with__call__method (FAST003) (#23553)pydocstyle] Fix numpy section ordering (D420) (#23685)pyflakes] Fix false positive for names shadowing re-exports (F811) (#23356)pyupgrade] Avoid inserting redundantNoneelements inUP045(#23459)Documentation
Other changes
Contributors
v0.15.4Compare Source
Released on 2026-02-26.
This is a follow-up release to 0.15.3 that resolves a panic when the new rule
PLR1712was enabled with any rule that analyzes definitions, such as many of theANNorDrules.Bug fixes
pyflakes] Suppress false positive inF821for names used beforedelin stub files (#23550)Documentation
import-headingexample (#23568)Contributors
v0.15.3Compare Source
Released on 2026-02-26.
Preview features
Drop explicit support for
.qmdfile extension (#23572)This can now be enabled instead by setting the
extensionoption:Include configured extensions in file discovery (#23400)
[
flake8-bandit] Allow suspicious imports inTYPE_CHECKINGblocks (S401-S415) (#23441)[
flake8-bugbear] AllowB901in pytest hook wrappers (#21931)[
flake8-import-conventions] Add missing conventions from upstream (ICN001,ICN002) (#21373)[
pydocstyle] Add rule to enforce docstring section ordering (D420) (#23537)[
pylint] Implementswap-with-temporary-variable(PLR1712) (#22205)[
ruff] Addunnecessary-assign-before-yield(RUF070) (#23300)[
ruff] Support file-level noqa inRUF102(#23535)[
ruff] Suppress diagnostic for invalid f-strings before Python 3.12 (RUF027) (#23480)[
flake8-bandit] Don't flagBaseLoader/CBaseLoaderas unsafe (S506) (#23510)Bug fixes
I002andPYI025(#23352)pyflakes] Fix false positive for@overloadfromlint.typing-modules(F811) (#23357)pyupgrade] Fix false positive forTypeVardefault before Python 3.12 (UP046) (#23540)pyupgrade] Fix handling of\Nin raw strings (UP032) (#22149)Rule changes
Render sub-diagnostics in the GitHub output format (#23455)
[
flake8-bugbear] Tag certainB007diagnostics as unnecessary (#23453)[
ruff] Ignore unknown rule codes inRUF100(#23531)These are now flagged by
RUF102instead.Documentation
pydocstyle] Fix double comma in description ofD404(#23440)Other changes
find_ruff_bin) for parity with uv (#23406)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.
f5657cdc6cto54befb6c64Update dependency ruff to v0.15.3to Update dependency ruff to v0.15.454befb6c64tod38c0d0a24Update dependency ruff to v0.15.4to Update dependency ruff to v0.15.5