Skip to content

Commit 213d934

Browse files
authored
chore(deps): update dependency ruff to v0.15.12 (#530)
> ℹ️ **Note** > > This PR body was truncated due to platform limits. This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [ruff](https://docs.astral.sh/ruff) ([source](https://redirect.github.com/astral-sh/ruff), [changelog](https://redirect.github.com/astral-sh/ruff/blob/main/CHANGELOG.md)) | `==0.11.2` → `==0.15.12` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.15.12?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.11.2/0.15.12?slim=true) | --- ### Release Notes <details> <summary>astral-sh/ruff (ruff)</summary> ### [`v0.15.12`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01512) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.11...0.15.12) Released on 2026-04-24. ##### Preview features - Implement `#ruff:file-ignore` file-level suppressions ([#&#8203;23599](https://redirect.github.com/astral-sh/ruff/pull/23599)) - Implement `#ruff:ignore` logical-line suppressions ([#&#8203;23404](https://redirect.github.com/astral-sh/ruff/pull/23404)) - Revert preview changes to displayed diagnostic severity in LSP ([#&#8203;24789](https://redirect.github.com/astral-sh/ruff/pull/24789)) - \[`airflow`] Implement `task-branch-as-short-circuit` (`AIR004`) ([#&#8203;23579](https://redirect.github.com/astral-sh/ruff/pull/23579)) - \[`flake8-bugbear`] Fix `break`/`continue` handling in `loop-iterator-mutation` (`B909`) ([#&#8203;24440](https://redirect.github.com/astral-sh/ruff/pull/24440)) - \[`pylint`] Fix `PLC2701` for type parameter scopes ([#&#8203;24576](https://redirect.github.com/astral-sh/ruff/pull/24576)) ##### Rule changes - \[`pandas-vet`] Suggest `.array` as well in `PD011` ([#&#8203;24805](https://redirect.github.com/astral-sh/ruff/pull/24805)) ##### CLI - Respect default Unix permissions for cache files ([#&#8203;24794](https://redirect.github.com/astral-sh/ruff/pull/24794)) ##### Documentation - \[`pylint`] Fix `PLR0124` description not to claim self-comparison always returns the same value ([#&#8203;24749](https://redirect.github.com/astral-sh/ruff/pull/24749)) - \[`pyupgrade`] Expand docs on reusable `TypeVar`s and scoping (`UP046`) ([#&#8203;24153](https://redirect.github.com/astral-sh/ruff/pull/24153)) - Improve rules table accessibility ([#&#8203;24711](https://redirect.github.com/astral-sh/ruff/pull/24711)) ##### Contributors - [@&#8203;dylwil3](https://redirect.github.com/dylwil3) - [@&#8203;AlexWaygood](https://redirect.github.com/AlexWaygood) - [@&#8203;woodruffw](https://redirect.github.com/woodruffw) - [@&#8203;avasis-ai](https://redirect.github.com/avasis-ai) - [@&#8203;Dev-iL](https://redirect.github.com/Dev-iL) - [@&#8203;denyszhak](https://redirect.github.com/denyszhak) - [@&#8203;ShipItAndPray](https://redirect.github.com/ShipItAndPray) - [@&#8203;anishgirianish](https://redirect.github.com/anishgirianish) - [@&#8203;augustelalande](https://redirect.github.com/augustelalande) - [@&#8203;amyreese](https://redirect.github.com/amyreese) - [@&#8203;majiayu000](https://redirect.github.com/majiayu000) ### [`v0.15.11`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01511) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.10...0.15.11) Released on 2026-04-16. ##### Preview features - \[`ruff`] Ignore `RUF029` when function is decorated with `asynccontextmanager` ([#&#8203;24642](https://redirect.github.com/astral-sh/ruff/pull/24642)) - \[`airflow`] Implement `airflow-xcom-pull-in-template-string` (`AIR201`) ([#&#8203;23583](https://redirect.github.com/astral-sh/ruff/pull/23583)) - \[`flake8-bandit`] Fix `S103` false positives and negatives in mask analysis ([#&#8203;24424](https://redirect.github.com/astral-sh/ruff/pull/24424)) ##### Bug fixes - \[`flake8-async`] Omit overridden methods for `ASYNC109` ([#&#8203;24648](https://redirect.github.com/astral-sh/ruff/pull/24648)) ##### Documentation - \[`flake8-async`] Add override mention to `ASYNC109` docs ([#&#8203;24666](https://redirect.github.com/astral-sh/ruff/pull/24666)) - Update Neovim config examples to use `vim.lsp.config` ([#&#8203;24577](https://redirect.github.com/astral-sh/ruff/pull/24577)) ##### Contributors - [@&#8203;augustelalande](https://redirect.github.com/augustelalande) - [@&#8203;anishgirianish](https://redirect.github.com/anishgirianish) - [@&#8203;benberryallwood](https://redirect.github.com/benberryallwood) - [@&#8203;charliermarsh](https://redirect.github.com/charliermarsh) - [@&#8203;Dev-iL](https://redirect.github.com/Dev-iL) ### [`v0.15.10`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01510) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.9...0.15.10) Released on 2026-04-09. ##### Preview features - \[`flake8-logging`] Allow closures in except handlers (`LOG004`) ([#&#8203;24464](https://redirect.github.com/astral-sh/ruff/pull/24464)) - \[`flake8-self`] Make `SLF` diagnostics robust to non-self-named variables ([#&#8203;24281](https://redirect.github.com/astral-sh/ruff/pull/24281)) - \[`flake8-simplify`] Make the fix for `collapsible-if` safe in `preview` (`SIM102`) ([#&#8203;24371](https://redirect.github.com/astral-sh/ruff/pull/24371)) ##### Bug fixes - Avoid emitting multi-line f-string elements before Python 3.12 ([#&#8203;24377](https://redirect.github.com/astral-sh/ruff/pull/24377)) - Avoid syntax error from `E502` fixes in f-strings and t-strings ([#&#8203;24410](https://redirect.github.com/astral-sh/ruff/pull/24410)) - Strip form feeds from indent passed to `dedent_to` ([#&#8203;24381](https://redirect.github.com/astral-sh/ruff/pull/24381)) - \[`pyupgrade`] Fix panic caused by handling of octals (`UP012`) ([#&#8203;24390](https://redirect.github.com/astral-sh/ruff/pull/24390)) - Reject multi-line f-string elements before Python 3.12 ([#&#8203;24355](https://redirect.github.com/astral-sh/ruff/pull/24355)) ##### Rule changes - \[`ruff`] Treat f-string interpolation as potential side effect (`RUF019`) ([#&#8203;24426](https://redirect.github.com/astral-sh/ruff/pull/24426)) ##### Server - Add support for custom file extensions ([#&#8203;24463](https://redirect.github.com/astral-sh/ruff/pull/24463)) ##### Documentation - Document adding fixes in CONTRIBUTING.md ([#&#8203;24393](https://redirect.github.com/astral-sh/ruff/pull/24393)) - Fix JSON typo in settings example ([#&#8203;24517](https://redirect.github.com/astral-sh/ruff/pull/24517)) ##### Contributors - [@&#8203;charliermarsh](https://redirect.github.com/charliermarsh) - [@&#8203;dylwil3](https://redirect.github.com/dylwil3) - [@&#8203;silverstein](https://redirect.github.com/silverstein) - [@&#8203;anishgirianish](https://redirect.github.com/anishgirianish) - [@&#8203;shizukushq](https://redirect.github.com/shizukushq) - [@&#8203;zanieb](https://redirect.github.com/zanieb) - [@&#8203;AlexWaygood](https://redirect.github.com/AlexWaygood) ### [`v0.15.9`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0159) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.8...0.15.9) Released on 2026-04-02. ##### Preview features - \[`pyflakes`] Flag annotated variable redeclarations as `F811` in preview mode ([#&#8203;24244](https://redirect.github.com/astral-sh/ruff/pull/24244)) - \[`ruff`] Allow dunder-named assignments in non-strict mode for `RUF067` ([#&#8203;24089](https://redirect.github.com/astral-sh/ruff/pull/24089)) ##### Bug fixes - \[`flake8-errmsg`] Avoid shadowing existing `msg` in fix for `EM101` ([#&#8203;24363](https://redirect.github.com/astral-sh/ruff/pull/24363)) - \[`flake8-simplify`] Ignore pre-initialization references in `SIM113` ([#&#8203;24235](https://redirect.github.com/astral-sh/ruff/pull/24235)) - \[`pycodestyle`] Fix `W391` fixes for consecutive empty notebook cells ([#&#8203;24236](https://redirect.github.com/astral-sh/ruff/pull/24236)) - \[`pyupgrade`] Fix `UP008` nested class matching ([#&#8203;24273](https://redirect.github.com/astral-sh/ruff/pull/24273)) - \[`pyupgrade`] Ignore strings with string-only escapes (`UP012`) ([#&#8203;16058](https://redirect.github.com/astral-sh/ruff/pull/16058)) - \[`ruff`] `RUF072`: skip formfeeds on dedent ([#&#8203;24308](https://redirect.github.com/astral-sh/ruff/pull/24308)) - \[`ruff`] Avoid re-using symbol in `RUF024` fix ([#&#8203;24316](https://redirect.github.com/astral-sh/ruff/pull/24316)) - \[`ruff`] Parenthesize expression in `RUF050` fix ([#&#8203;24234](https://redirect.github.com/astral-sh/ruff/pull/24234)) - Disallow starred expressions as values of starred expressions ([#&#8203;24280](https://redirect.github.com/astral-sh/ruff/pull/24280)) ##### Rule changes - \[`flake8-simplify`] Suppress `SIM105` for `except*` before Python 3.12 ([#&#8203;23869](https://redirect.github.com/astral-sh/ruff/pull/23869)) - \[`pyflakes`] Extend `F507` to flag `%`-format strings with zero placeholders ([#&#8203;24215](https://redirect.github.com/astral-sh/ruff/pull/24215)) - \[`pyupgrade`] `UP018` should detect more unnecessarily wrapped literals (UP018) ([#&#8203;24093](https://redirect.github.com/astral-sh/ruff/pull/24093)) - \[`pyupgrade`] Fix `UP008` callable scope handling to support lambdas ([#&#8203;24274](https://redirect.github.com/astral-sh/ruff/pull/24274)) - \[`ruff`] `RUF010`: Mark fix as unsafe when it deletes a comment ([#&#8203;24270](https://redirect.github.com/astral-sh/ruff/pull/24270)) ##### Formatter - Add `nested-string-quote-style` formatting option ([#&#8203;24312](https://redirect.github.com/astral-sh/ruff/pull/24312)) ##### Documentation - \[`flake8-bugbear`] Clarify RUF071 fix safety for non-path string comparisons ([#&#8203;24149](https://redirect.github.com/astral-sh/ruff/pull/24149)) - \[`flake8-type-checking`] Clarify import cycle wording for `TC001`/`TC002`/`TC003` ([#&#8203;24322](https://redirect.github.com/astral-sh/ruff/pull/24322)) ##### Other changes - Avoid rendering fix lines with trailing whitespace after `|` ([#&#8203;24343](https://redirect.github.com/astral-sh/ruff/pull/24343)) ##### Contributors - [@&#8203;charliermarsh](https://redirect.github.com/charliermarsh) - [@&#8203;MichaReiser](https://redirect.github.com/MichaReiser) - [@&#8203;tranhoangtu-it](https://redirect.github.com/tranhoangtu-it) - [@&#8203;dylwil3](https://redirect.github.com/dylwil3) - [@&#8203;zsol](https://redirect.github.com/zsol) - [@&#8203;renovate](https://redirect.github.com/renovate) - [@&#8203;bitloi](https://redirect.github.com/bitloi) - [@&#8203;danparizher](https://redirect.github.com/danparizher) - [@&#8203;chinar-amrutkar](https://redirect.github.com/chinar-amrutkar) - [@&#8203;second-ed](https://redirect.github.com/second-ed) - [@&#8203;getehen](https://redirect.github.com/getehen) - [@&#8203;Redovo1](https://redirect.github.com/Redovo1) - [@&#8203;matthewlloyd](https://redirect.github.com/matthewlloyd) - [@&#8203;zanieb](https://redirect.github.com/zanieb) - [@&#8203;InSyncWithFoo](https://redirect.github.com/InSyncWithFoo) - [@&#8203;RenzoMXD](https://redirect.github.com/RenzoMXD) ### [`v0.15.8`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0158) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.7...0.15.8) Released on 2026-03-26. ##### Preview features - \[`ruff`] New rule `unnecessary-if` (`RUF050`) ([#&#8203;24114](https://redirect.github.com/astral-sh/ruff/pull/24114)) - \[`ruff`] New rule `useless-finally` (`RUF072`) ([#&#8203;24165](https://redirect.github.com/astral-sh/ruff/pull/24165)) - \[`ruff`] New rule `f-string-percent-format` (`RUF073`): warn when using `%` operator on an f-string ([#&#8203;24162](https://redirect.github.com/astral-sh/ruff/pull/24162)) - \[`pyflakes`] Recognize `frozendict` as a builtin for Python 3.15+ ([#&#8203;24100](https://redirect.github.com/astral-sh/ruff/pull/24100)) ##### Bug fixes - \[`flake8-async`] Use fully-qualified `anyio.lowlevel` import in autofix (`ASYNC115`) ([#&#8203;24166](https://redirect.github.com/astral-sh/ruff/pull/24166)) - \[`flake8-bandit`] Check tuple arguments for partial paths in `S607` ([#&#8203;24080](https://redirect.github.com/astral-sh/ruff/pull/24080)) - \[`pyflakes`] Skip `undefined-name` (`F821`) for conditionally deleted variables ([#&#8203;24088](https://redirect.github.com/astral-sh/ruff/pull/24088)) - `E501`/`W505`/formatter: Exclude nested pragma comments from line width calculation ([#&#8203;24071](https://redirect.github.com/astral-sh/ruff/pull/24071)) - Fix `%foo?` parsing in IPython assignment expressions ([#&#8203;24152](https://redirect.github.com/astral-sh/ruff/pull/24152)) - `analyze graph`: resolve string imports that reference attributes, not just modules ([#&#8203;24058](https://redirect.github.com/astral-sh/ruff/pull/24058)) ##### Rule changes - \[`eradicate`] ignore `ty: ignore` comments in `ERA001` ([#&#8203;24192](https://redirect.github.com/astral-sh/ruff/pull/24192)) - \[`flake8-bandit`] Treat `sys.executable` as trusted input in `S603` ([#&#8203;24106](https://redirect.github.com/astral-sh/ruff/pull/24106)) - \[`flake8-self`] Recognize `Self` annotation and `self` assignment in `SLF001` ([#&#8203;24144](https://redirect.github.com/astral-sh/ruff/pull/24144)) - \[`pyflakes`] `F507`: Fix false negative for non-tuple RHS in `%`-formatting ([#&#8203;24142](https://redirect.github.com/astral-sh/ruff/pull/24142)) - \[`refurb`] Parenthesize generator arguments in `FURB142` fixer ([#&#8203;24200](https://redirect.github.com/astral-sh/ruff/pull/24200)) ##### Performance - Speed up diagnostic rendering ([#&#8203;24146](https://redirect.github.com/astral-sh/ruff/pull/24146)) ##### Server - Warn when Markdown files are skipped due to preview being disabled ([#&#8203;24150](https://redirect.github.com/astral-sh/ruff/pull/24150)) ##### Documentation - Clarify `extend-ignore` and `extend-select` settings documentation ([#&#8203;24064](https://redirect.github.com/astral-sh/ruff/pull/24064)) - Mention AI policy in PR template ([#&#8203;24198](https://redirect.github.com/astral-sh/ruff/pull/24198)) ##### Other changes - Use trusted publishing for NPM packages ([#&#8203;24171](https://redirect.github.com/astral-sh/ruff/pull/24171)) ##### Contributors - [@&#8203;bitloi](https://redirect.github.com/bitloi) - [@&#8203;Sim-hu](https://redirect.github.com/Sim-hu) - [@&#8203;mvanhorn](https://redirect.github.com/mvanhorn) - [@&#8203;chinar-amrutkar](https://redirect.github.com/chinar-amrutkar) - [@&#8203;markjm](https://redirect.github.com/markjm) - [@&#8203;RenzoMXD](https://redirect.github.com/RenzoMXD) - [@&#8203;vivekkhimani](https://redirect.github.com/vivekkhimani) - [@&#8203;seroperson](https://redirect.github.com/seroperson) - [@&#8203;moktamd](https://redirect.github.com/moktamd) - [@&#8203;charliermarsh](https://redirect.github.com/charliermarsh) - [@&#8203;ntBre](https://redirect.github.com/ntBre) - [@&#8203;zanieb](https://redirect.github.com/zanieb) - [@&#8203;dylwil3](https://redirect.github.com/dylwil3) - [@&#8203;MichaReiser](https://redirect.github.com/MichaReiser) ### [`v0.15.7`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0157) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.6...0.15.7) Released on 2026-03-19. ##### Preview features - Display output severity in preview ([#&#8203;23845](https://redirect.github.com/astral-sh/ruff/pull/23845)) - Don't show `noqa` hover for non-Python documents ([#&#8203;24040](https://redirect.github.com/astral-sh/ruff/pull/24040)) ##### Rule changes - \[`pycodestyle`] Recognize `pyrefly:` as a pragma comment (`E501`) ([#&#8203;24019](https://redirect.github.com/astral-sh/ruff/pull/24019)) ##### Server - Don't return code actions for non-Python documents ([#&#8203;23905](https://redirect.github.com/astral-sh/ruff/pull/23905)) ##### Documentation - Add company AI policy to contributing guide ([#&#8203;24021](https://redirect.github.com/astral-sh/ruff/pull/24021)) - Document editor features for Markdown code formatting ([#&#8203;23924](https://redirect.github.com/astral-sh/ruff/pull/23924)) - \[`pylint`] Improve phrasing (`PLC0208`) ([#&#8203;24033](https://redirect.github.com/astral-sh/ruff/pull/24033)) ##### Other changes - Use PEP 639 license information ([#&#8203;19661](https://redirect.github.com/astral-sh/ruff/pull/19661)) ##### Contributors - [@&#8203;tmimmanuel](https://redirect.github.com/tmimmanuel) - [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos) - [@&#8203;amyreese](https://redirect.github.com/amyreese) - [@&#8203;statxc](https://redirect.github.com/statxc) - [@&#8203;dylwil3](https://redirect.github.com/dylwil3) - [@&#8203;hunterhogan](https://redirect.github.com/hunterhogan) - [@&#8203;renovate](https://redirect.github.com/renovate) ### [`v0.15.6`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0156) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.5...0.15.6) Released on 2026-03-12. ##### Preview features - Add support for `lazy` import parsing ([#&#8203;23755](https://redirect.github.com/astral-sh/ruff/pull/23755)) - Add support for star-unpacking of comprehensions (PEP 798) ([#&#8203;23788](https://redirect.github.com/astral-sh/ruff/pull/23788)) - Reject semantic syntax errors for lazy imports ([#&#8203;23757](https://redirect.github.com/astral-sh/ruff/pull/23757)) - Drop a few rules from the preview default set ([#&#8203;23879](https://redirect.github.com/astral-sh/ruff/pull/23879)) - \[`airflow`] Flag `Variable.get()` calls outside of task execution context (`AIR003`) ([#&#8203;23584](https://redirect.github.com/astral-sh/ruff/pull/23584)) - \[`airflow`] Flag runtime-varying values in DAG/task constructor arguments (`AIR304`) ([#&#8203;23631](https://redirect.github.com/astral-sh/ruff/pull/23631)) - \[`flake8-bugbear`] Implement `delattr-with-constant` (`B043`) ([#&#8203;23737](https://redirect.github.com/astral-sh/ruff/pull/23737)) - \[`flake8-tidy-imports`] Add `TID254` to enforce lazy imports ([#&#8203;23777](https://redirect.github.com/astral-sh/ruff/pull/23777)) - \[`flake8-tidy-imports`] Allow users to ban lazy imports with `TID254` ([#&#8203;23847](https://redirect.github.com/astral-sh/ruff/pull/23847)) - \[`isort`] Retain `lazy` keyword when sorting imports ([#&#8203;23762](https://redirect.github.com/astral-sh/ruff/pull/23762)) - \[`pyupgrade`] Add `from __future__ import annotations` automatically (`UP006`) ([#&#8203;23260](https://redirect.github.com/astral-sh/ruff/pull/23260)) - \[`refurb`] Support `newline` parameter in `FURB101` for Python 3.13+ ([#&#8203;23754](https://redirect.github.com/astral-sh/ruff/pull/23754)) - \[`ruff`] Add `os-path-commonprefix` (`RUF071`) ([#&#8203;23814](https://redirect.github.com/astral-sh/ruff/pull/23814)) - \[`ruff`] Add unsafe fix for os-path-commonprefix (`RUF071`) ([#&#8203;23852](https://redirect.github.com/astral-sh/ruff/pull/23852)) - \[`ruff`] Limit `RUF036` to typing contexts; make it unsafe for non-typing-only ([#&#8203;23765](https://redirect.github.com/astral-sh/ruff/pull/23765)) - \[`ruff`] Use starred unpacking for `RUF017` in Python 3.15+ ([#&#8203;23789](https://redirect.github.com/astral-sh/ruff/pull/23789)) ##### Bug fixes - Fix `--add-noqa` creating unwanted leading whitespace ([#&#8203;23773](https://redirect.github.com/astral-sh/ruff/pull/23773)) - Fix `--add-noqa` breaking shebangs ([#&#8203;23577](https://redirect.github.com/astral-sh/ruff/pull/23577)) - \[formatter] Fix lambda body formatting for multiline calls and subscripts ([#&#8203;23866](https://redirect.github.com/astral-sh/ruff/pull/23866)) - \[formatter] Preserve required annotation parentheses in annotated assignments ([#&#8203;23865](https://redirect.github.com/astral-sh/ruff/pull/23865)) - \[formatter] Preserve type-expression parentheses in the formatter ([#&#8203;23867](https://redirect.github.com/astral-sh/ruff/pull/23867)) - \[`flake8-annotations`] Fix stack overflow in `ANN401` on quoted annotations with escape sequences ([#&#8203;23912](https://redirect.github.com/astral-sh/ruff/pull/23912)) - \[`pep8-naming`] Check naming conventions in `match` pattern bindings (`N806`, `N815`, `N816`) ([#&#8203;23899](https://redirect.github.com/astral-sh/ruff/pull/23899)) - \[`perflint`] Fix comment duplication in fixes (`PERF401`, `PERF403`) ([#&#8203;23729](https://redirect.github.com/astral-sh/ruff/pull/23729)) - \[`pyupgrade`] Properly trigger `super` change in nested class (`UP008`) ([#&#8203;22677](https://redirect.github.com/astral-sh/ruff/pull/22677)) - \[`ruff`] Avoid syntax errors in `RUF036` fixes ([#&#8203;23764](https://redirect.github.com/astral-sh/ruff/pull/23764)) ##### Rule changes - \[`flake8-bandit`] Flag `S501` with `requests.request` ([#&#8203;23873](https://redirect.github.com/astral-sh/ruff/pull/23873)) - \[`flake8-executable`] Fix WSL detection in non-Docker containers ([#&#8203;22879](https://redirect.github.com/astral-sh/ruff/pull/22879)) - \[`flake8-print`] Ignore `pprint` calls with `stream=` ([#&#8203;23787](https://redirect.github.com/astral-sh/ruff/pull/23787)) ##### Documentation - Update docs for Markdown code block formatting ([#&#8203;23871](https://redirect.github.com/astral-sh/ruff/pull/23871)) - \[`flake8-bugbear`] Fix misleading description for `B904` ([#&#8203;23731](https://redirect.github.com/astral-sh/ruff/pull/23731)) ##### Contributors - [@&#8203;zsol](https://redirect.github.com/zsol) - [@&#8203;carljm](https://redirect.github.com/carljm) - [@&#8203;ntBre](https://redirect.github.com/ntBre) - [@&#8203;Bortlesboat](https://redirect.github.com/Bortlesboat) - [@&#8203;sososonia-cyber](https://redirect.github.com/sososonia-cyber) - [@&#8203;chirizxc](https://redirect.github.com/chirizxc) - [@&#8203;leandrobbraga](https://redirect.github.com/leandrobbraga) - [@&#8203;11happy](https://redirect.github.com/11happy) - [@&#8203;Acelogic](https://redirect.github.com/Acelogic) - [@&#8203;anishgirianish](https://redirect.github.com/anishgirianish) - [@&#8203;amyreese](https://redirect.github.com/amyreese) - [@&#8203;xvchris](https://redirect.github.com/xvchris) - [@&#8203;charliermarsh](https://redirect.github.com/charliermarsh) - [@&#8203;getehen](https://redirect.github.com/getehen) - [@&#8203;Dev-iL](https://redirect.github.com/Dev-iL) ### [`v0.15.5`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0155) [Compare Source](https://redirect.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 ([#&#8203;23434](https://redirect.github.com/astral-sh/ruff/pull/23434)) - \[`perflint`] Extend `PERF102` to comprehensions and generators ([#&#8203;23473](https://redirect.github.com/astral-sh/ruff/pull/23473)) - \[`refurb`] Fix `FURB101` and `FURB103` false positives when I/O variable is used later ([#&#8203;23542](https://redirect.github.com/astral-sh/ruff/pull/23542)) - \[`ruff`] Add fix for `none-not-at-end-of-union` (`RUF036`) ([#&#8203;22829](https://redirect.github.com/astral-sh/ruff/pull/22829)) - \[`ruff`] Fix false positive for `re.split` with empty string pattern (`RUF055`) ([#&#8203;23634](https://redirect.github.com/astral-sh/ruff/pull/23634)) ##### Bug fixes - \[`fastapi`] Handle callable class dependencies with `__call__` method (`FAST003`) ([#&#8203;23553](https://redirect.github.com/astral-sh/ruff/pull/23553)) - \[`pydocstyle`] Fix numpy section ordering (`D420`) ([#&#8203;23685](https://redirect.github.com/astral-sh/ruff/pull/23685)) - \[`pyflakes`] Fix false positive for names shadowing re-exports (`F811`) ([#&#8203;23356](https://redirect.github.com/astral-sh/ruff/pull/23356)) - \[`pyupgrade`] Avoid inserting redundant `None` elements in `UP045` ([#&#8203;23459](https://redirect.github.com/astral-sh/ruff/pull/23459)) ##### Documentation - Document extension mapping for Markdown code formatting ([#&#8203;23574](https://redirect.github.com/astral-sh/ruff/pull/23574)) - Update default Python version examples ([#&#8203;23605](https://redirect.github.com/astral-sh/ruff/pull/23605)) ##### Other changes - Publish releases to Astral mirror ([#&#8203;23616](https://redirect.github.com/astral-sh/ruff/pull/23616)) ##### Contributors - [@&#8203;amyreese](https://redirect.github.com/amyreese) - [@&#8203;stakeswky](https://redirect.github.com/stakeswky) - [@&#8203;chirizxc](https://redirect.github.com/chirizxc) - [@&#8203;anishgirianish](https://redirect.github.com/anishgirianish) - [@&#8203;bxff](https://redirect.github.com/bxff) - [@&#8203;zsol](https://redirect.github.com/zsol) - [@&#8203;charliermarsh](https://redirect.github.com/charliermarsh) - [@&#8203;ntBre](https://redirect.github.com/ntBre) - [@&#8203;kar-ganap](https://redirect.github.com/kar-ganap) ### [`v0.15.4`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0154) [Compare Source](https://redirect.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 ([#&#8203;23588](https://redirect.github.com/astral-sh/ruff/pull/23588)) - \[`pyflakes`] Suppress false positive in `F821` for names used before `del` in stub files ([#&#8203;23550](https://redirect.github.com/astral-sh/ruff/pull/23550)) ##### Documentation - Clarify first-party import detection in Ruff ([#&#8203;23591](https://redirect.github.com/astral-sh/ruff/pull/23591)) - Fix incorrect `import-heading` example ([#&#8203;23568](https://redirect.github.com/astral-sh/ruff/pull/23568)) ##### Contributors - [@&#8203;stakeswky](https://redirect.github.com/stakeswky) - [@&#8203;ntBre](https://redirect.github.com/ntBre) - [@&#8203;thejcannon](https://redirect.github.com/thejcannon) - [@&#8203;GeObts](https://redirect.github.com/GeObts) ### [`v0.15.3`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0153) [Compare Source](https://redirect.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 ([#&#8203;23572](https://redirect.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 ([#&#8203;23400](https://redirect.github.com/astral-sh/ruff/pull/23400)) - \[`flake8-bandit`] Allow suspicious imports in `TYPE_CHECKING` blocks (`S401`-`S415`) ([#&#8203;23441](https://redirect.github.com/astral-sh/ruff/pull/23441)) - \[`flake8-bugbear`] Allow `B901` in pytest hook wrappers ([#&#8203;21931](https://redirect.github.com/astral-sh/ruff/pull/21931)) - \[`flake8-import-conventions`] Add missing conventions from upstream (`ICN001`, `ICN002`) ([#&#8203;21373](https://redirect.github.com/astral-sh/ruff/pull/21373)) - \[`pydocstyle`] Add rule to enforce docstring section ordering (`D420`) ([#&#8203;23537](https://redirect.github.com/astral-sh/ruff/pull/23537)) - \[`pylint`] Implement `swap-with-temporary-variable` (`PLR1712`) ([#&#8203;22205](https://redirect.github.com/astral-sh/ruff/pull/22205)) - \[`ruff`] Add `unnecessary-assign-before-yield` (`RUF070`) ([#&#8203;23300](https://redirect.github.com/astral-sh/ruff/pull/23300)) - \[`ruff`] Support file-level noqa in `RUF102` ([#&#8203;23535](https://redirect.github.com/astral-sh/ruff/pull/23535)) - \[`ruff`] Suppress diagnostic for invalid f-strings before Python 3.12 (`RUF027`) ([#&#8203;23480](https://redirect.github.com/astral-sh/ruff/pull/23480)) - \[`flake8-bandit`] Don't flag `BaseLoader`/`CBaseLoader` as unsafe (`S506`) ([#&#8203;23510](https://redirect.github.com/astral-sh/ruff/pull/23510)) ##### Bug fixes - Avoid infinite loop between `I002` and `PYI025` ([#&#8203;23352](https://redirect.github.com/astral-sh/ruff/pull/23352)) - \[`pyflakes`] Fix false positive for `@overload` from `lint.typing-modules` (`F811`) ([#&#8203;23357](https://redirect.github.com/astral-sh/ruff/pull/23357)) - \[`pyupgrade`] Fix false positive for `TypeVar` default before Python 3.12 (`UP046`) ([#&#8203;23540](https://redirect.github.com/astral-sh/ruff/pull/23540)) - \[`pyupgrade`] Fix handling of `\N` in raw strings (`UP032`) ([#&#8203;22149](https://redirect.github.com/astral-sh/ruff/pull/22149)) ##### Rule changes - Render sub-diagnostics in the GitHub output format ([#&#8203;23455](https://redirect.github.com/astral-sh/ruff/pull/23455)) - \[`flake8-bugbear`] Tag certain `B007` diagnostics as unnecessary ([#&#8203;23453](https://redirect.github.com/astral-sh/ruff/pull/23453)) - \[`ruff`] Ignore unknown rule codes in `RUF100` ([#&#8203;23531](https://redirect.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 ([#&#8203;23519](https://redirect.github.com/astral-sh/ruff/pull/23519)) - Update isort action comments heading ([#&#8203;23515](https://redirect.github.com/astral-sh/ruff/pull/23515)) - \[`pydocstyle`] Fix double comma in description of `D404` ([#&#8203;23440](https://redirect.github.com/astral-sh/ruff/pull/23440)) ##### Other changes - Update the Python module (notably `find_ruff_bin`) for parity with uv ([#&#8203;23406](https://redirect.github.com/astral-sh/ruff/pull/23406)) ##### Contributors - [@&#8203;zanieb](https://redirect.github.com/zanieb) - [@&#8203;o1x3](https://redirect.github.com/o1x3) - [@&#8203;assadyousuf](https://redirect.github.com/assadyousuf) - [@&#8203;kar-ganap](https://redirect.github.com/kar-ganap) - [@&#8203;denyszhak](https://redirect.github.com/denyszhak) - [@&#8203;amyreese](https://redirect.github.com/amyreese) - [@&#8203;carljm](https://redirect.github.com/carljm) - [@&#8203;anishgirianish](https://redirect.github.com/anishgirianish) - [@&#8203;Bnyro](https://redirect.github.com/Bnyro) - [@&#8203;danparizher](https://redirect.github.com/danparizher) - [@&#8203;ntBre](https://redirect.github.com/ntBre) - [@&#8203;gcomneno](https://redirect.github.com/gcomneno) - [@&#8203;jaap3](https://redirect.github.com/jaap3) - [@&#8203;stakeswky](https://redirect.github.com/stakeswky) ### [`v0.15.2`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0152) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.1...0.15.2) Released on 2026-02-19. ##### Preview features - Expand the default rule set ([#&#8203;23385](https://redirect.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://redirect.github.com/astral-sh/ruff/discussions/23203)! - \[`flake8-pyi`] Also check string annotations (`PYI041`) ([#&#8203;19023](https://redirect.github.com/astral-sh/ruff/pull/19023)) ##### Bug fixes - \[`flake8-async`] Fix `in_async_context` logic ([#&#8203;23426](https://redirect.github.com/astral-sh/ruff/pull/23426)) - \[`ruff`] Fix for `RUF102` should delete entire comment ([#&#8203;23380](https://redirect.github.com/astral-sh/ruff/pull/23380)) - \[`ruff`] Suppress diagnostic for strings with backslashes in interpolations before Python 3.12 (`RUF027`) ([#&#8203;21069](https://redirect.github.com/astral-sh/ruff/pull/21069)) - \[`flake8-bugbear`] Fix `B023` false positive for immediately-invoked lambdas ([#&#8203;23294](https://redirect.github.com/astral-sh/ruff/pull/23294)) - \[parser] Fix false syntax error for match-like annotated assignments ([#&#8203;23297](https://redirect.github.com/astral-sh/ruff/pull/23297)) - \[parser] Fix indentation tracking after line continuations ([#&#8203;23417](https://redirect.github.com/astral-sh/ruff/pull/23417)) ##### Rule changes - \[`flake8-executable`] Allow global flags in uv shebangs (`EXE003`) ([#&#8203;22582](https://redirect.github.com/astral-sh/ruff/pull/22582)) - \[`pyupgrade`] Fix handling of `typing.{io,re}` (`UP035`) ([#&#8203;23131](https://redirect.github.com/astral-sh/ruff/pull/23131)) - \[`ruff`] Detect `PLC0207` on chained `str.split()` calls ([#&#8203;23275](https://redirect.github.com/astral-sh/ruff/pull/23275)) ##### CLI - Remove invalid inline `noqa` warning ([#&#8203;23270](https://redirect.github.com/astral-sh/ruff/pull/23270)) ##### Configuration - Add extension mapping to configuration file options ([#&#8203;23384](https://redirect.github.com/astral-sh/ruff/pull/23384)) ##### Documentation - Add `Q004` to the list of conflicting rules ([#&#8203;23340](https://redirect.github.com/astral-sh/ruff/pull/23340)) - \[`ruff`] Expand `lint.external` docs and add sub-diagnostic (`RUF100`, `RUF102`) ([#&#8203;23268](https://redirect.github.com/astral-sh/ruff/pull/23268)) ##### Contributors - [@&#8203;dylwil3](https://redirect.github.com/dylwil3) - [@&#8203;Jkhall81](https://redirect.github.com/Jkhall81) - [@&#8203;danparizher](https://redirect.github.com/danparizher) - [@&#8203;dhruvmanila](https://redirect.github.com/dhruvmanila) - [@&#8203;harupy](https://redirect.github.com/harupy) - [@&#8203;ngnpope](https://redirect.github.com/ngnpope) - [@&#8203;amyreese](https://redirect.github.com/amyreese) - [@&#8203;kar-ganap](https://redirect.github.com/kar-ganap) - [@&#8203;robsdedude](https://redirect.github.com/robsdedude) - [@&#8203;shaanmajid](https://redirect.github.com/shaanmajid) - [@&#8203;ntBre](https://redirect.github.com/ntBre) - [@&#8203;toslunar](https://redirect.github.com/toslunar) ### [`v0.15.1`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0151) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.0...0.15.1) Released on 2026-02-12. ##### Preview features - \[`airflow`] Add ruff rules to catch deprecated Airflow imports for Airflow 3.1 (`AIR321`) ([#&#8203;22376](https://redirect.github.com/astral-sh/ruff/pull/22376)) - \[`airflow`] Third positional parameter not named `ti_key` should be flagged for `BaseOperatorLink.get_link` (`AIR303`) ([#&#8203;22828](https://redirect.github.com/astral-sh/ruff/pull/22828)) - \[`flake8-gettext`] Fix false negatives for plural argument of `ngettext` (`INT001`, `INT002`, `INT003`) ([#&#8203;21078](https://redirect.github.com/astral-sh/ruff/pull/21078)) - \[`pyflakes`] Fix infinite loop in preview fix for `unused-import` (`F401`) ([#&#8203;23038](https://redirect.github.com/astral-sh/ruff/pull/23038)) - \[`pygrep-hooks`] Detect non-existent mock methods in standalone expressions (`PGH005`) ([#&#8203;22830](https://redirect.github.com/astral-sh/ruff/pull/22830)) - \[`pylint`] Allow dunder submodules and improve diagnostic range (`PLC2701`) ([#&#8203;22804](https://redirect.github.com/astral-sh/ruff/pull/22804)) - \[`pyupgrade`] Improve diagnostic range for tuples (`UP024`) ([#&#8203;23013](https://redirect.github.com/astral-sh/ruff/pull/23013)) - \[`refurb`] Check subscripts in tuple do not use lambda parameters in `reimplemented-operator` (`FURB118`) ([#&#8203;23079](https://redirect.github.com/astral-sh/ruff/pull/23079)) - \[`ruff`] Detect mutable defaults in `field` calls (`RUF008`) ([#&#8203;23046](https://redirect.github.com/astral-sh/ruff/pull/23046)) - \[`ruff`] Ignore std `cmath.inf` (`RUF069`) ([#&#8203;23120](https://redirect.github.com/astral-sh/ruff/pull/23120)) - \[`ruff`] New rule `float-equality-comparison` (`RUF069`) ([#&#8203;20585](https://redirect.github.com/astral-sh/ruff/pull/20585)) - Don't format unlabeled Markdown code blocks ([#&#8203;23106](https://redirect.github.com/astral-sh/ruff/pull/23106)) - Markdown formatting support in LSP ([#&#8203;23063](https://redirect.github.com/astral-sh/ruff/pull/23063)) - Support Quarto Markdown language markers ([#&#8203;22947](https://redirect.github.com/astral-sh/ruff/pull/22947)) - Support formatting `pycon` Markdown code blocks ([#&#8203;23112](https://redirect.github.com/astral-sh/ruff/pull/23112)) - Use extension mapping to select Markdown code block language ([#&#8203;22934](https://redirect.github.com/astral-sh/ruff/pull/22934)) ##### Bug fixes - Avoid false positive for undefined variables in `FAST001` ([#&#8203;23224](https://redirect.github.com/astral-sh/ruff/pull/23224)) - Avoid introducing syntax errors for `FAST003` autofix ([#&#8203;23227](https://redirect.github.com/astral-sh/ruff/pull/23227)) - Avoid suggesting `InitVar` for `__post_init__` that references PEP 695 type parameters ([#&#8203;23226](https://redirect.github.com/astral-sh/ruff/pull/23226)) - Deduplicate type variables in generic functions ([#&#8203;23225](https://redirect.github.com/astral-sh/ruff/pull/23225)) - Fix exception handler parenthesis removal for Python 3.14+ ([#&#8203;23126](https://redirect.github.com/astral-sh/ruff/pull/23126)) - Fix f-string middle panic when parsing t-strings ([#&#8203;23232](https://redirect.github.com/astral-sh/ruff/pull/23232)) - Wrap `RUF020` target for multiline fixes ([#&#8203;23210](https://redirect.github.com/astral-sh/ruff/pull/23210)) - Wrap `UP007` target for multiline fixes ([#&#8203;23208](https://redirect.github.com/astral-sh/ruff/pull/23208)) - Fix missing diagnostics for last range suppression in file ([#&#8203;23242](https://redirect.github.com/astral-sh/ruff/pull/23242)) - \[`pyupgrade`] Fix syntax error on string with newline escape and comment (`UP037`) ([#&#8203;22968](https://redirect.github.com/astral-sh/ruff/pull/22968)) ##### Rule changes - Use `ruff` instead of `Ruff` as the program name in GitHub output format ([#&#8203;23240](https://redirect.github.com/astral-sh/ruff/pull/23240)) - \[`PT006`] Fix syntax error when unpacking nested tuples in `parametrize` fixes ([#&#8203;22441](https://redirect.github.com/astral-sh/ruff/issues/22441)) ([#&#8203;22464](https://redirect.github.com/astral-sh/ruff/pull/22464)) - \[`airflow`] Catch deprecated attribute access from context key for Airflow 3.0 (`AIR301`) ([#&#8203;22850](https://redirect.github.com/astral-sh/ruff/pull/22850)) - \[`airflow`] Capture deprecated arguments and a decorator (`AIR301`) ([#&#8203;23170](https://redirect.github.com/astral-sh/ruff/pull/23170)) - \[`flake8-boolean-trap`] Add `multiprocessing.Value` to excluded functions for `FBT003` ([#&#8203;23010](https://redirect.github.com/astral-sh/ruff/pull/23010)) - \[`flake8-bugbear`] Add a secondary annotation showing the previous occurrence (`B033`) ([#&#8203;22634](https://redirect.github.com/astral-sh/ruff/pull/22634)) - \[`flake8-type-checking`] Add sub-diagnostic showing the runtime use of an annotation (`TC004`) ([#&#8203;23091](https://redirect.github.com/astral-sh/ruff/pull/23091)) - \[`isort`] Support configurable import section heading comments ([#&#8203;23151](https://redirect.github.com/astral-sh/ruff/pull/23151)) - \[`ruff`] Improve the diagnostic for `RUF012` ([#&#8203;23202](https://redirect.github.com/astral-sh/ruff/pull/23202)) ##### Formatter - Suppress diagnostic output for `format --check --silent` ([#&#8203;17736](https://redirect.github.com/astral-sh/ruff/pull/17736)) ##### Documentation - Add tabbed shell completion documentation ([#&#8203;23169](https://redirect.github.com/astral-sh/ruff/pull/23169)) - Explain how to enable Markdown formatting for pre-commit hook ([#&#8203;23077](https://redirect.github.com/astral-sh/ruff/pull/23077)) - Fixed import in `runtime-evaluated-decorators` example ([#&#8203;23187](https://redirect.github.com/astral-sh/ruff/pull/23187)) - Update ruff server contributing guide ([#&#8203;23060](https://redirect.github.com/astral-sh/ruff/pull/23060)) ##### Other changes - Exclude WASM artifacts from GitHub releases ([#&#8203;23221](https://redirect.github.com/astral-sh/ruff/pull/23221)) ##### Contributors - [@&#8203;mkniewallner](https://redirect.github.com/mkniewallner) - [@&#8203;bxff](https://redirect.github.com/bxff) - [@&#8203;dylwil3](https://redirect.github.com/dylwil3) - [@&#8203;Avasam](https://redirect.github.com/Avasam) - [@&#8203;amyreese](https://redirect.github.com/amyreese) - [@&#8203;charliermarsh](https://redirect.github.com/charliermarsh) - [@&#8203;Alex-ley-scrub](https://redirect.github.com/Alex-ley-scrub) - [@&#8203;Kalmaegi](https://redirect.github.com/Kalmaegi) - [@&#8203;danparizher](https://redirect.github.com/danparizher) - [@&#8203;AiyionPrime](https://redirect.github.com/AiyionPrime) - [@&#8203;eureka928](https://redirect.github.com/eureka928) - [@&#8203;11happy](https://redirect.github.com/11happy) - [@&#8203;Jkhall81](https://redirect.github.com/Jkhall81) - [@&#8203;chirizxc](https://redirect.github.com/chirizxc) - [@&#8203;leandrobbraga](https://redirect.github.com/leandrobbraga) - [@&#8203;tvatter](https://redirect.github.com/tvatter) - [@&#8203;anishgirianish](https://redirect.github.com/anishgirianish) - [@&#8203;shaanmajid](https://redirect.github.com/shaanmajid) - [@&#8203;ntBre](https://redirect.github.com/ntBre) - [@&#8203;sjyangkevin](https://redirect.github.com/sjyangkevin) ### [`v0.15.0`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0150) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.14.14...0.15.0) Released on 2026-02-03. Check out the [blog post](https://astral.sh/blog/ruff-v0.15.0) for a migration guide and overview of the changes! ##### Breaking changes - Ruff now formats your code according to the 2026 style guide. See the formatter section below or in the blog post for a detailed list of changes. - The linter now supports block suppression comments. For example, to suppress `N803` for all parameters in this function: ```python # ruff: disable[N803] def foo( legacyArg1, legacyArg2, legacyArg3, legacyArg4, ): ... # ruff: enable[N803] ``` See the [documentation](https://docs.astral.sh/ruff/linter/#block-level) for more details. - The `ruff:alpine` Docker image is now based on Alpine 3.23 (up from 3.21). - The `ruff:debian` and `ruff:debian-slim` Docker images are now based on Debian 13 "Trixie" instead of Debian 12 "Bookworm." - Binaries for the `ppc64` (64-bit big-endian PowerPC) architecture are no longer included in our releases. It should still be possible to build Ruff manually for this platform, if needed. - Ruff now resolves all `extend`ed configuration files before falling back on a default Python version. ##### Stabilization The following rules have been stabilized and are no longer in preview: - [`blocking-http-call-httpx-in-async-function`](https://docs.astral.sh/ruff/rules/blocking-http-call-httpx-in-async-function) (`ASYNC212`) - [`blocking-path-method-in-async-function`](https://docs.astral.sh/ruff/rules/blocking-path-method-in-async-function) (`ASYNC240`) - [`blocking-input-in-async-function`](https://docs.astral.sh/ruff/rules/blocking-input-in-async-function) (`ASYNC250`) - [`map-without-explicit-strict`](https://docs.astral.sh/ruff/rules/map-without-explicit-strict) (`B912`) - [`if-exp-instead-of-or-operator`](https://docs.astral.sh/ruff/rules/if-exp-instead-of-or-operator) (`FURB110`) - [`single-item-membership-test`](https://docs.astral.sh/ruff/rules/single-item-membership-test) (`FURB171`) - [`missing-maxsplit-arg`](https://docs.astral.sh/ruff/rules/missing-maxsplit-arg) (`PLC0207`) - [`unnecessary-lambda`](https://docs.astral.sh/ruff/rules/unnecessary-lambda) (`PLW0108`) - [`unnecessary-empty-iterable-within-deque-call`](https://docs.astral.sh/ruff/rules/unnecessary-empty-iterable-within-deque-call) (`RUF037`) - [`in-empty-collection`](https://docs.astral.sh/ruff/rules/in-empty-collection) (`RUF060`) - [`legacy-form-pytest-raises`](https://docs.astral.sh/ruff/rules/legacy-form-pytest-raises) (`RUF061`) - [`non-octal-permissions`](https://docs.astral.sh/ruff/rules/non-octal-permissions) (`RUF064`) - [`invalid-rule-code`](https://docs.astral.sh/ruff/rules/invalid-rule-code) (`RUF102`) - [`invalid-suppression-comment`](https://docs.astral.sh/ruff/rules/invalid-suppression-comment) (`RUF103`) - [`unmatched-suppression-comment`](https://docs.astral.sh/ruff/rules/unmatched-suppression-comment) (`RUF104`) - [`replace-str-enum`](https://docs.astral.sh/ruff/rules/replace-str-enum) (`UP042`) The following behaviors have been stabilized: - The `--output-format` flag is now respected when running Ruff in `--watch` mode, and the `full` output format is now used by default, matching the regular CLI output. - [`builtin-attribute-shadowing`](https://docs.astral.sh/ruff/rules/builtin-attribute-shadowing/) (`A003`) now detects the use of shadowed built-in names in additional contexts like decorators, default arguments, and other attribute definitions. - [`duplicate-union-member`](https://docs.astral.sh/ruff/rules/duplicate-union-member/) (`PYI016`) now considers `typing.Optional` when searching for duplicate union members. - [`split-static-string`](https://docs.astral.sh/ruff/rules/split-static-string/) (`SIM905`) now offers an autofix when the `maxsplit` argument is provided, even without a `sep` argument. - [`dict-get-with-none-default`](https://docs.astral.sh/ruff/rules/dict-get-with-none-default/) (`SIM910`) now applies to more types of key expressions. - [`super-call-with-parameters`](https://docs.astral.sh/ruff/rules/super-call-with-parameters/) (`UP008`) now has a safe fix when it will not delete comments. - [`unnecessary-default-type-args`](https://docs.astral.sh/ruff/rules/unnecessary-default-type-args/) (`UP043`) now applies to stub (`.pyi`) files on Python versions before 3.13. ##### Formatter This release introduces the new 2026 style guide, with the following changes: - Lambda parameters are now kept on the same line and lambda bodies will be parenthesized to let them break across multiple lines ([#&#8203;21385](https://redirect.github.com/astral-sh/ruff/pull/21385)) - Parentheses around tuples of exceptions in `except` clauses will now be removed on Python 3.14 and later ([#&#8203;20768](https://redirect.github.com/astral-sh/ruff/pull/20768)) - A single empty line is now permitted at the beginning of function bodies ([#&#8203;21110](https://redirect.github.com/astral-sh/ruff/pull/21110)) - Parentheses are avoided for long `as` captures in `match` statements ([#&#8203;21176](https://redirect.github.com/astral-sh/ruff/pull/21176)) - Extra spaces between escaped quotes and ending triple quotes can now be omitted ([#&#8203;17216](https://redirect.github.com/astral-sh/ruff/pull/17216)) - Blank lines are now enforced before classes with decorators in stub files ([#&#8203;18888](https://redirect.github.com/astral-sh/ruff/pull/18888)) ##### Preview features - Apply formatting to Markdown code blocks ([#&#8203;22470](https://redirect.github.com/astral-sh/ruff/pull/22470), [#&#8203;22990](https://redirect.github.com/astral-sh/ruff/pull/22990), [#&#8203;22996](https://redirect.github.com/astral-sh/ruff/pull/22996)) See the [documentation](https://docs.astral.sh/ruff/formatter/#markdown-code-formatting) for more details. ##### Bug fixes - Fix suppression indentation matching ([#&#8203;22903](https://redirect.github.com/astral-sh/ruff/pull/22903)) ##### Rule changes - Customize where the `fix_title` sub-diagnostic appears ([#&#8203;23044](https://redirect.github.com/astral-sh/ruff/pull/23044)) - \[`FastAPI`] Add sub-diagnostic explaining why a fix was unavailable (`FAST002`) ([#&#8203;22565](https://redirect.github.com/astral-sh/ruff/pull/22565)) - \[`flake8-annotations`] Don't suggest `NoReturn` for functions raising `NotImplementedError` (`ANN201`, `ANN202`, `ANN205`, `ANN206`) ([#&#8203;21311](https://redirect.github.com/astral-sh/ruff/pull/21311)) - \[`pyupgrade`] Make fix unsafe if it deletes comments (`UP017`) ([#&#8203;22873](https://redirect.github.com/astral-sh/ruff/pull/22873)) - \[`pyupgrade`] Make fix unsafe if it deletes comments (`UP020`) ([#&#8203;22872](https://redirect.github.com/astral-sh/ruff/pull/22872)) - \[`pyupgrade`] Make fix unsafe if it deletes comments (`UP033`) ([#&#8203;22871](https://redirect.github.com/astral-sh/ruff/pull/22871)) - \[`refurb`] Do not add `abc.ABC` if already present (`FURB180`) ([#&#8203;22234](https://redirect.github.com/astral-sh/ruff/pull/22234)) - \[`refurb`] Make fix unsafe if it deletes comments (`FURB110`) ([#&#8203;22768](https://redirect.github.com/astral-sh/ruff/pull/22768)) - \[`ruff`] Add sub-diagnostics with permissions (`RUF064`) ([#&#8203;22972](https://redirect.github.com/astral-sh/ruff/pull/22972)) ##### Server - Identify notebooks by LSP `didOpen` instead of `.ipynb` file extension ([#&#8203;22810](https://redirect.github.com/astral-sh/ruff/pull/22810)) ##### CLI - Add `--color` CLI option to force colored output ([#&#8203;22806](https://redirect.github.com/astral-sh/ruff/pull/22806)) ##### Documentation - Document `-` stdin convention in CLI help text ([#&#8203;22817](https://redirect.github.com/astral-sh/ruff/pull/22817)) - \[`refurb`] Change example to `re.search` with `^` anchor (`FURB167`) ([#&#8203;22984](https://redirect.github.com/astral-sh/ruff/pull/22984)) - Fix link to Sphinx code block directives ([#&#8203;23041](https://redirect.github.com/astral-sh/ruff/pull/23041)) - \[`pydocstyle`] Clarify which quote styles are allowed (`D300`) ([#&#8203;22825](https://redirect.github.com/astral-sh/ruff/pull/22825)) - \[`flake8-bugbear`] Improve docs for `no-explicit-stacklevel` (`B028`) ([#&#8203;22538](https://redirect.github.com/astral-sh/ruff/pull/22538)) ##### Other changes - Update MSRV to 1.91 ([#&#8203;22874](https://redirect.github.com/astral-sh/ruff/pull/22874)) ##### Contributors - [@&#8203;danparizher](https://redirect.github.com/danparizher) - [@&#8203;chirizxc](https://redirect.github.com/chirizxc) - [@&#8203;amyreese](https://redirect.github.com/amyreese) - [@&#8203;Jkhall81](https://redirect.github.com/Jkhall81) - [@&#8203;cwkang1998](https://redirect.github.com/cwkang1998) - [@&#8203;manzt](https://redirect.github.com/manzt) - [@&#8203;11happy](https://redirect.github.com/11happy) - [@&#8203;hugovk](https://redirect.github.com/hugovk) - [@&#8203;caiquejjx](https://redirect.github.com/caiquejjx) - [@&#8203;ntBre](https://redirect.github.com/ntBre) - [@&#8203;akawd](https://redirect.github.com/akawd) - [@&#8203;konstin](https://redirect.github.com/konstin) ### [`v0.14.14`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01414) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.14.13...0.14.14) Released on 2026-01-22. ##### Preview features - Preserve required parentheses in lambda bodies ([#&#8203;22747](https://redirect.github.com/astral-sh/ruff/pull/22747)) - Combine range suppression code diagnostics ([#&#8203;22613](https://redirect.github.com/astral-sh/ruff/pull/22613)) - \[`airflow`] Second positional argument to `Asset`/`Dataset` should not be a dictionary (`AIR303`) ([#&#8203;22453](https://redirect.github.com/astral-sh/ruff/pull/22453)) - \[`ruff`] Detect duplicate entries in `__all__` (`RUF068`) ([#&#8203;22114](https://redirect.github.com/astral-sh/ruff/pull/22114)) ##### Bug fixes - \[`pyupgrade`] Allow shadowing non-builtin bindings (`UP029`) ([#&#8203;22749](https://redirect.github.com/astral-sh/ruff/pull/22749)) - \[`pyupgrade`] Apply `UP045` to string arguments of `typing.cast` ([#&#8203;22320](https://redirect.github.com/astral-sh/ruff/pull/22320)) - \[`flake8-pie`] Detect duplicated declared class fields in `PIE794` ([#&#8203;22717](https://redirect.github.com/astral-sh/ruff/pull/22717)) ##### Rule changes - \[`flake8-pyi`] Fix inconsistent handling of forward references for `__new__`, `__enter__`, `__aenter__` in `PYI034` ([#&#8203;22798](https://redirect.github.com/astral-sh/ruff/pull/22798)) - \[`flake8-pytest-style`] Support `check` parameter in `PT011` ([#&#8203;22725](https://redirect.github.com/astral-sh/ruff/pull/22725)) - \[`ruff`] Add exception for `ctypes.Structure._fields_` (`RUF012`) ([#&#8203;22559](https://redirect.github.com/astral-sh/ruff/pull/22559)) - Many fixes are now marked unsafe if they would remove comments: - \[`flake8-bugbear`] [`B009`](https://redirect.github.com/astral-sh/ruff/pull/22656), [`B010`](https://redirect.github.com/astral-sh/ruff/pull/22657), [`B013`](https://redirect.github.com/astral-sh/ruff/pull/22658), [`B014`](https://redirect.github.com/astral-sh/ruff/pull/22659), [`B033`](https://redirect.github.com/astral-sh/ruff/pull/22632) - \[`flake8-simplify`] [`SIM910`](https://redirect.github.com/astral-sh/ruff/pull/22662), [`SIM911`](https://redirect.github.com/astral-sh/ruff/pull/22661) - \[`pyupgrade`] [`UP007`](https://redirect.github.com/astral-sh/ruff/pull/22772), [`UP039`](https://redirect.github.com/astral-sh/ruff/pull/22774), [`UP041`](https://redirect.github.com/astral-sh/ruff/pull/22773), [`UP045`](https://redirect.github.com/astral-sh/ruff/pull/22772) - \[`refurb`] [`FURB105`](https://redirect.github.com/astral-sh/ruff/pull/22767), [`FURB116`](https://redirect.github.com/astral-sh/ruff/pull/22681), [`FURB136`](https://redirect.github.com/astral-sh/ruff/pull/22680), [`FURB140`](https://redirect.github.com/astral-sh/ruff/pull/22679), [`FURB145`](https://redirect.github.com/astral-sh/ruff/pull/22670), [`FURB154`](https://redirect.github.com/astral-sh/ruff/pull/22669), [`FURB157`](https://redirect.github.com/astral-sh/ruff/pull/22668), [`FURB164`](https://redirect.github.com/astral-sh/ruff/pull/22667),[`FURB181`](https://redirect.github.com/astral-sh/ruff/pull/22666), [`FURB188`](https://redirect.github.com/astral-sh/ruff/pull/22665) - \[`ruff`] [`RUF019`](https://redirect.github.com/astral-sh/ruff/pull/22663), [`RUF020`](https://redirect.github.com/astral-sh/ruff/pull/22664) ##### Documentation - Add `--exit-non-zero-on-format` to formatter exit codes section ([#&#8203;22761](https://redirect.github.com/astral-sh/ruff/pull/22761)) - Update contributing guide for adding a new rule ([#&#8203;22779](https://redirect.github.com/astral-sh/ruff/pull/22779)) - \[`FastAPI`] Document fix safety for `FAST001` ([#&#8203;22655](https://redirect.github.com/astral-sh/ruff/pull/22655)) - \[`flake8-async`] Tweak explanation to focus on latency/efficiency tradeoff (`ASYNC110`) ([#&#8203;22715](https://redirect.github.com/astral-sh/ruff/pull/22715)) - \[`pandas-vet`] Make example error out-of-the-box (`PD002`) ([#&#8203;22561](https://redirect.github.com/astral-sh/ruff/pull/22561)) - \[`refurb`] Make the example work out of box (`FURB101`) ([#&#8203;22770](https://redirect.github.com/astral-sh/ruff/pull/22770)) - \[`refurb`] Make the example work out of box (`FURB103`) ([#&#8203;22769](https://redirect.github.com/astral-sh/ruff/pull/22769)) ##### Contributors - [@&#8203;alejsdev](https://redirect.github.com/alejsdev) - [@&#8203;ntBre](https://redirect.github.com/ntBre) - [@&#8203;caiquejjx](https://redirect.github.com/caiquejjx) - [@&#8203;chirizxc](https://redirect.github.com/chirizxc) - [@&#8203;denyszhak](https://redirect.github.com/denyszhak) - [@&#8203;sjyangkevin](https://redirect.github.com/sjyangkevin) - [@&#8203;MeGaGiGaGon](https://redirect.github.com/MeGaGiGaGon) - [@&#8203;leandrobbraga](https://redir
1 parent ef2ad7a commit 213d934

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ test = [
7878
"coverage",
7979
]
8080
lint = [
81-
"ruff==0.11.2",
81+
"ruff==0.15.12",
8282
"mypy",
8383
"types-aiofiles",
8484
"types-requests",

0 commit comments

Comments
 (0)