0.15.16
Added
- Implement `yield-in-context-manager-in-async-generator` (ASYNC119) for flake8-async
Changed
- Narrow diagnostic range and exclude cases without exception handlers for PLW0717 in pylint
- Treat `yield` before `break` from a terminal loop as terminal (RUF075) in ruff
- Avoid fixes for ambiguous `argnames` and `argvalues` combinations (PT006) in flake8-pytest-style
- Drop excess capacity from statement suites during parsing
Fixed
- Avoid flagging `ruff:ignore` comments as code (ERA001) in eradicate
- Fix ERA001/RUF100 conflict when `noqa` is on commented-out code
- Avoid removing the `format` call when it would change behavior (F523) in pyflakes
- Avoid syntax errors in invalid character replacements in f-strings before Python 3.12 (PLE2510, PLE2512, PLE2513, PLE2514, PLE2515) in pylint
- Avoid converting `format` calls with more kinds of side effects (UP032) in pyupgrade
Release Notes
Released on 2026-06-04.
Preview features
- [
flake8-async] Implementyield-in-context-manager-in-async-generator(ASYNC119) (#24644) - [
pylint] Narrow diagnostic range and exclude cases without exception handlers (PLW0717) (#25440) - [
ruff] Treatyieldbeforebreakfrom a terminal loop as terminal (RUF075) (#25447)
Bug fixes
- [
eradicate] Avoid flaggingruff:ignorecomments as code (ERA001) (#25537) - [
eradicate] FixERA001/RUF100conflict whennoqais on commented-out code (#25414) - [
pyflakes] Avoid removing theformatcall when it would change behavior (F523) (#25320) - [
pylint] Avoid syntax errors in invalid character replacements in f-strings before Python 3.12 (PLE2510,PLE2512,PLE2513,PLE2514,PLE2515) (#25544) - [
pyupgrade] Avoid convertingformatcalls with more kinds of side effects (UP032) (#25484)
Rule changes
- [
flake8-pytest-style] Avoid fixes for ambiguousargnamesandargvaluescombinations (PT006) (#24776)
Performance
- Drop excess capacity from statement suites during parsing (#25368)
Documentation
- [
pydocstyle] Improve discoverability of rules enabled for each convention (#24973) - [
ruff] Restore example code for Python versions before 3.15 (RUF017) (#25439) - Fix typo
bin/active→bin/activatein tutorial (#25473)
Other changes
- Shrink additional parser AST collections (#25465)
Contributors
- @Redslayer112
- @koriyoshi2041
- @George-Ogden
- @TejasAmle
- @anishgirianish
- @ntBre
- @MichaReiser
- @loganrosen
- @RafaelJohn9
- @adityasingh2400
Install ruff 0.15.16
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-installer.ps1 | iex"
Download ruff 0.15.16
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
You can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>