Conversation
updates: - [github.com/astral-sh/ruff-pre-commit: v0.14.14 → v0.15.0](astral-sh/ruff-pre-commit@v0.14.14...v0.15.0)
samueljsb
left a comment
There was a problem hiding this comment.
0.15.0
Released on 2026-02-03.
Check out the blog post 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
N803for all parameters in this function:# ruff: disable[N803] def foo( legacyArg1, legacyArg2, legacyArg3, legacyArg4, ): ... # ruff: enable[N803]See the documentation for more details.
The
ruff:alpineDocker image is now based on Alpine 3.23 (up from 3.21).The
ruff:debianandruff:debian-slimDocker 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
extended 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
(ASYNC212)blocking-path-method-in-async-function
(ASYNC240)blocking-input-in-async-function
(ASYNC250)map-without-explicit-strict
(B912)if-exp-instead-of-or-operator
(FURB110)single-item-membership-test
(FURB171)missing-maxsplit-arg(PLC0207)unnecessary-lambda(PLW0108)unnecessary-empty-iterable-within-deque-call
(RUF037)in-empty-collection(RUF060)legacy-form-pytest-raises
(RUF061)non-octal-permissions(RUF064)invalid-rule-code(RUF102)invalid-suppression-comment
(RUF103)unmatched-suppression-comment
(RUF104)replace-str-enum(UP042)The following behaviors have been stabilized:
- The
--output-formatflag is now respected when running Ruff in--watchmode, and thefulloutput format is now used by default, matching the regular CLI output.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(PYI016) now considerstyping.Optionalwhen searching for duplicate union members.split-static-string(SIM905) now offers an autofix when themaxsplitargument is provided, even without asepargument.dict-get-with-none-default(SIM910) now applies to more types of key expressions.super-call-with-parameters(UP008) now has a safe fix when it will not delete comments.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 (#21385)- Parentheses around tuples of exceptions in
exceptclauses will now be removed on Python 3.14 and
later (#20768)- A single empty line is now permitted at the beginning of function bodies (#21110)
- Parentheses are avoided for long
ascaptures inmatchstatements (#21176)- Extra spaces between escaped quotes and ending triple quotes can now be omitted (#17216)
- Blank lines are now enforced before classes with decorators in stub files (#18888)
Preview features
Apply formatting to Markdown code blocks (#22470, #22990, #22996)
See the documentation for more details.
Bug fixes
- Fix suppression indentation matching (#22903)
Rule changes
- Customize where the
fix_titlesub-diagnostic appears (#23044)- [
FastAPI] Add sub-diagnostic explaining why a fix was unavailable (FAST002) (#22565)- [
flake8-annotations] Don't suggestNoReturnfor functions raisingNotImplementedError(ANN201,ANN202,ANN205,ANN206) (#21311)- [
pyupgrade] Make fix unsafe if it deletes comments (UP017) (#22873)- [
pyupgrade] Make fix unsafe if it deletes comments (UP020) (#22872)- [
pyupgrade] Make fix unsafe if it deletes comments (UP033) (#22871)- [
refurb] Do not addabc.ABCif already present (FURB180) (#22234)- [
refurb] Make fix unsafe if it deletes comments (FURB110) (#22768)- [
ruff] Add sub-diagnostics with permissions (RUF064) (#22972)Server
- Identify notebooks by LSP
didOpeninstead of.ipynbfile extension (#22810)CLI
- Add
--colorCLI option to force colored output (#22806)Documentation
- Document
-stdin convention in CLI help text (#22817)- [
refurb] Change example tore.searchwith^anchor (FURB167) (#22984)- Fix link to Sphinx code block directives (#23041)
- [
pydocstyle] Clarify which quote styles are allowed (D300) (#22825)- [
flake8-bugbear] Improve docs forno-explicit-stacklevel(B028) (#22538)Other changes
- Update MSRV to 1.91 (#22874)
updates: