|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## 0.15.3 |
| 4 | + |
| 5 | +Released on 2026-02-26. |
| 6 | + |
| 7 | +### Preview features |
| 8 | + |
| 9 | +- Drop explicit support for `.qmd` file extension ([#23572](https://github.com/astral-sh/ruff/pull/23572)) |
| 10 | + |
| 11 | + This can now be enabled instead by setting the [`extension`](https://docs.astral.sh/ruff/settings/#extension) option: |
| 12 | + |
| 13 | + ```toml |
| 14 | + # ruff.toml |
| 15 | + extension = { qmd = "markdown" } |
| 16 | + |
| 17 | + # pyproject.toml |
| 18 | + [tool.ruff] |
| 19 | + extension = { qmd = "markdown" } |
| 20 | + ``` |
| 21 | + |
| 22 | +- Include configured extensions in file discovery ([#23400](https://github.com/astral-sh/ruff/pull/23400)) |
| 23 | + |
| 24 | +- \[`flake8-bandit`\] Allow suspicious imports in `TYPE_CHECKING` blocks (`S401`-`S415`) ([#23441](https://github.com/astral-sh/ruff/pull/23441)) |
| 25 | + |
| 26 | +- \[`flake8-bugbear`\] Allow `B901` in pytest hook wrappers ([#21931](https://github.com/astral-sh/ruff/pull/21931)) |
| 27 | + |
| 28 | +- \[`flake8-import-conventions`\] Add missing conventions from upstream (`ICN001`, `ICN002`) ([#21373](https://github.com/astral-sh/ruff/pull/21373)) |
| 29 | + |
| 30 | +- \[`pydocstyle`\] Add rule to enforce docstring section ordering (`D420`) ([#23537](https://github.com/astral-sh/ruff/pull/23537)) |
| 31 | + |
| 32 | +- \[`pylint`\] Implement `swap-with-temporary-variable` (`PLR1712`) ([#22205](https://github.com/astral-sh/ruff/pull/22205)) |
| 33 | + |
| 34 | +- \[`ruff`\] Add `unnecessary-assign-before-yield` (`RUF070`) ([#23300](https://github.com/astral-sh/ruff/pull/23300)) |
| 35 | + |
| 36 | +- \[`ruff`\] Support file-level noqa in `RUF102` ([#23535](https://github.com/astral-sh/ruff/pull/23535)) |
| 37 | + |
| 38 | +- \[`ruff`\] Suppress diagnostic for invalid f-strings before Python 3.12 (`RUF027`) ([#23480](https://github.com/astral-sh/ruff/pull/23480)) |
| 39 | + |
| 40 | +- \[`flake8-bandit`\] Don't flag `BaseLoader`/`CBaseLoader` as unsafe (`S506`) ([#23510](https://github.com/astral-sh/ruff/pull/23510)) |
| 41 | + |
| 42 | +### Bug fixes |
| 43 | + |
| 44 | +- Avoid infinite loop between `I002` and `PYI025` ([#23352](https://github.com/astral-sh/ruff/pull/23352)) |
| 45 | +- \[`pyflakes`\] Fix false positive for `@overload` from `lint.typing-modules` (`F811`) ([#23357](https://github.com/astral-sh/ruff/pull/23357)) |
| 46 | +- \[`pyupgrade`\] Fix false positive for `TypeVar` default before Python 3.12 (`UP046`) ([#23540](https://github.com/astral-sh/ruff/pull/23540)) |
| 47 | +- \[`pyupgrade`\] Fix handling of `\N` in raw strings (`UP032`) ([#22149](https://github.com/astral-sh/ruff/pull/22149)) |
| 48 | + |
| 49 | +### Rule changes |
| 50 | + |
| 51 | +- Render sub-diagnostics in the GitHub output format ([#23455](https://github.com/astral-sh/ruff/pull/23455)) |
| 52 | + |
| 53 | +- \[`flake8-bugbear`\] Tag certain `B007` diagnostics as unnecessary ([#23453](https://github.com/astral-sh/ruff/pull/23453)) |
| 54 | + |
| 55 | +- \[`ruff`\] Ignore unknown rule codes in `RUF100` ([#23531](https://github.com/astral-sh/ruff/pull/23531)) |
| 56 | + |
| 57 | + These are now flagged by [`RUF102`](https://docs.astral.sh/ruff/rules/invalid-rule-code/) instead. |
| 58 | + |
| 59 | +### Documentation |
| 60 | + |
| 61 | +- Fix missing settings links for several linters ([#23519](https://github.com/astral-sh/ruff/pull/23519)) |
| 62 | +- Update isort action comments heading ([#23515](https://github.com/astral-sh/ruff/pull/23515)) |
| 63 | +- \[`pydocstyle`\] Fix double comma in description of `D404` ([#23440](https://github.com/astral-sh/ruff/pull/23440)) |
| 64 | + |
| 65 | +### Other changes |
| 66 | + |
| 67 | +- Update the Python module (notably `find_ruff_bin`) for parity with uv ([#23406](https://github.com/astral-sh/ruff/pull/23406)) |
| 68 | + |
| 69 | +### Contributors |
| 70 | + |
| 71 | +- [@zanieb](https://github.com/zanieb) |
| 72 | +- [@o1x3](https://github.com/o1x3) |
| 73 | +- [@assadyousuf](https://github.com/assadyousuf) |
| 74 | +- [@kar-ganap](https://github.com/kar-ganap) |
| 75 | +- [@denyszhak](https://github.com/denyszhak) |
| 76 | +- [@amyreese](https://github.com/amyreese) |
| 77 | +- [@carljm](https://github.com/carljm) |
| 78 | +- [@anishgirianish](https://github.com/anishgirianish) |
| 79 | +- [@Bnyro](https://github.com/Bnyro) |
| 80 | +- [@danparizher](https://github.com/danparizher) |
| 81 | +- [@ntBre](https://github.com/ntBre) |
| 82 | +- [@gcomneno](https://github.com/gcomneno) |
| 83 | +- [@jaap3](https://github.com/jaap3) |
| 84 | +- [@stakeswky](https://github.com/stakeswky) |
| 85 | + |
3 | 86 | ## 0.15.2 |
4 | 87 |
|
5 | 88 | Released on 2026-02-19. |
|
0 commit comments