Releases

Ruff 0.15.4 follow-up fixes PLR1712 panic, updates installer attestations

Ruff 0.15.4 was published Feb 26, 2026, with a follow-up patch that resolves a panic tied to rule PLR1712 and reports installer attestation updates and documentation clarifications.

Jamie Taylor3 min read
Published
Listen to this article0:00 min
Share this article:
Ruff 0.15.4 follow-up fixes PLR1712 panic, updates installer attestations
AI-generated illustration

Ruff, the fast Python linter/formatter written in Rust, published version 0.15.4 on February 26, 2026, and the project shipped a follow-up patch that the release notes say resolves a panic introduced by a prior rule change identified as PLR1712 while adding documentation clarifications and installer improvements. The headline for this update also calls out updated installer attestations, though the supplied release text does not include a PR or issue number for the attestation changes.

The release synopsis explicitly ties the follow-up patch to PLR1712 and to installer and documentation work; separately, a GitHub release-note snapshot dated 2025-11-28 lists a parser panic fix recorded as "[parser] Fix panic when parsing IPython escape command expressions (#21480)". The provided material does not assert that PR #21480 is the same change that the follow-up patch fixed, so the parser panic entry and the PLR1712 reference are reported here as distinct, coexisting items from the supplied sources.

AI-generated illustration

The 2025-11-28 release-note block contains several preview features and bug fixes with exact PR numbers: preview features include "[`flake8-bandit`] Handle string literal bindings in suspicious-url-open-usage (`S310`) (#21469)", "[`pylint`] Fix `PLR1708` false positives on nested functions (#21177)", "[`pylint`] Fix suppression for empty dict without tuple key annotation (`PLE1141`) (#21290)", "[`ruff`] Add rule `RUF066` to detect unnecessary class properties (#21535)", and "[`ruff`] Catch more dummy variable uses (`RUF052`) (#19799)". Bug fixes in that block list "[server] Set severity for non-rule diagnostics (#21559)" and "[`flake8-implicit-str-concat`] Avoid invalid fix in (`ISC003`) (#21517)", along with the parser panic entry (#21480). The same block adds a CLI change to "Show partial fixability indicator in statistics output (#21513)".

A second GitHub-sourced snapshot dated 2025-12-18 lists further preview features and explicit rule changes. Preview items include "[formatter] Fluent formatting of method chains (#21369)", "[formatter] Keep lambda parameters on one line and parenthesize the body if it expands (#21385)", and "[`flake8-implicit-str-concat`] New rule to prevent implicit string concatenation in collections (`ISC004`) (#21972)". That block also records "[`pyupgrade`] Fix parsing named Unicode escape sequences (`UP032`) (#21901)" as a bug fix. Rule changes include "Use `ruff` instead of `Ruff` as the program name in GitHub output format (#23240)", "[`PT006`] Fix syntax error when unpacking nested tuples in `parametrize` fixes (#22441) (#22464)", Airflow-related updates under `AIR301` (#22850, #23170), `flake8-boolean-trap` and `flake8-bugbear` adjustments (#23010, #22634), `flake8-type-checking` sub-diagnostic `TC004` (#23091), and isort support for configurable import section heading comments (#23151).

The supplied material makes clear there are three separate date-stamped items: the 0.15.4 release dated February 26, 2026, and two GitHub release-note blocks dated 2025-11-28 and 2025-12-18. The sources do not map the 2025 blocks to specific version numbers, nor do they provide PR numbers for the follow-up patch, documentation clarifications, or the installer attestation text referenced in the title. Confirming whether PR #21480 corresponds to the PLR1712 follow-up, and obtaining the exact PRs or diffs for installer attestations and documentation clarifications, are the remaining factual gaps to close. The project’s list of changes already includes concrete developer signals such as PR #21480, #21535, #21513, and rule IDs like PLR1712 and RUF066, which indicate active maintainer work and recent rule-level adjustments to watch for.

Know something we missed? Have a correction or additional information?

Submit a Tip
Your Topic
Today's stories
Updated daily by AI

Name any topic. Get daily articles.

You pick the subject, AI does the rest.

Start Now - Free

Ready in 2 minutes

Discussion

More Rust Programming News