What’s New

ruff 0.15.17

0.15.17
Added
  • Allow human-readable names in suppression comments
  • Prioritize human-readable names in CLI output
  • Add `trio.as_safe_channel` to safe decorators for `flake8-async` (ASYNC119)
  • Check `pytest_asyncio` fixtures in `flake8-pytest-style`
  • Ban `pytest` autouse fixtures with rule RUF076
  • Add `from __future__ import annotations` automatically in `pyupgrade` (UP007, UP045)
  • Allow rule names in `ruff rule` command
Changed
  • Respect diagnostic start and parent ranges and trailing comments in `ruff:ignore` suppressions
  • Clarify diagnostic message for single parameters in `flake8-pytest-style` (PT007)
  • Exempt Python version comparisons in `pylint` (PLR2004)
  • Reserve AST `Vec`s with correct capacity for common cases
Fixed
  • Fix handling of `ignore` comments within a `disable`/`enable` pair
  • Fix diagnostic when `ruff:enable` or `ruff:disable` appears where `ruff:ignore` is expected
  • Preserve leading empty literals to avoid syntax errors in `pyupgrade` (UP032)
  • Preserve whitespace for Quarto cell option comments in formatter
Removed
  • Drop autofix for `np.in1d` in `numpy` (NPY201)
Release Notes

Released on 2026-06-11.

Preview features
  • Allow human-readable names in suppression comments (#25614)
  • Fix handling of ignore comments within a disable/enable pair (#25845)
  • Prioritize human-readable names in CLI output (#25869)
  • Respect diagnostic start and parent ranges and trailing comments in ruff:ignore suppressions (#25673)
  • [flake8-async] Add trio.as_safe_channel to safe decorators (ASYNC119) (#25775)
  • [flake8-pytest-style] Also check pytest_asyncio fixtures (#25375)
  • [ruff] Ban pytest autouse fixtures (RUF076) (#25477)
  • [pyupgrade] Add from __future__ import annotations automatically (UP007, UP045) (#23259)
Bug fixes
  • Fix diagnostic when ruff:enable or ruff:disable appears where ruff:ignore is expected (#25700)
  • [pyupgrade] Preserve leading empty literals to avoid syntax errors (UP032) (#25491)
Rule changes
  • [flake8-pytest-style] Clarify diagnostic message for single parameters (PT007) (#25592)
  • [numpy] Drop autofix for np.in1d (NPY201) (#25612)
  • [pylint] Exempt Python version comparisons (PLR2004) (#25743)
Performance
  • Reserve AST Vecs with correct capacity for common cases (#25451)
Formatter
  • Preserve whitespace for Quarto cell option comments (#25641)
CLI
  • Allow rule names in ruff rule (#25640)
Other changes
  • Fix playground diagnostics scrollbars (#25642)
Contributors
Install ruff 0.15.17
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.17/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.17/ruff-installer.ps1 | iex"
Download ruff 0.15.17
FilePlatformChecksum
ruff-aarch64-apple-darwin.tar.gzApple Silicon macOSchecksum
ruff-x86_64-apple-darwin.tar.gzIntel macOSchecksum
ruff-aarch64-pc-windows-msvc.zipARM64 Windowschecksum
ruff-i686-pc-windows-msvc.zipx86 Windowschecksum
ruff-x86_64-pc-windows-msvc.zipx64 Windowschecksum
ruff-aarch64-unknown-linux-gnu.tar.gzARM64 Linuxchecksum
ruff-i686-unknown-linux-gnu.tar.gzx86 Linuxchecksum
ruff-powerpc64-unknown-linux-gnu.tar.gzPPC64 Linuxchecksum
ruff-powerpc64le-unknown-linux-gnu.tar.gzPPC64LE Linuxchecksum
ruff-riscv64gc-unknown-linux-gnu.tar.gzRISCV Linuxchecksum
ruff-s390x-unknown-linux-gnu.tar.gzS390x Linuxchecksum
ruff-x86_64-unknown-linux-gnu.tar.gzx64 Linuxchecksum
ruff-armv7-unknown-linux-gnueabihf.tar.gzARMv7 Linuxchecksum
ruff-aarch64-unknown-linux-musl.tar.gzARM64 MUSL Linuxchecksum
ruff-i686-unknown-linux-musl.tar.gzx86 MUSL Linuxchecksum
ruff-x86_64-unknown-linux-musl.tar.gzx64 MUSL Linuxchecksum
ruff-arm-unknown-linux-musleabihf.tar.gzARMv6 MUSL Linux (Hardfloat)checksum
ruff-armv7-unknown-linux-musleabihf.tar.gzARMv7 MUSL Linuxchecksum
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>
View original