26.5.0
Added 3
- Support for unpacking in comprehensions (PEP 798) and lazy imports (PEP 810), new syntactic features in Python 3.15
- Python 3.15 support
- Add `SourceASTParseError` to distinguish source parse failures from internal safety errors
Changed 3
- Improve heuristics around blank lines before, within and after groups of same-name decorated functions (such as `@overload` groups) in `.pyi` stub files
- Improve parse error readability by showing multi-line output with an error pointer
- Return HTTP 400 (Bad Request) for source parse failures instead of HTTP 500 in Blackd, keeping HTTP 500 only for genuine internal safety errors
Fixed 5
- Fix `# fmt: skip` being ignored in nested `if` expressions with parenthesized `in` clauses
- Fix crash when an f-string follows a `# fmt: off` comment inside brackets
- Preserve multiline compound statement headers when `# fmt: skip` is placed on the colon line
- Fix blank lines being removed between a function and a decorated class in `.pyi` stub files
- Prevent string merger from creating unsplittable long lines when a pragma comment (e.g. `# type: ignore`) follows the closing bracket
Highlights
- Add support for unpacking in comprehensions (PEP 798) and for lazy imports (PEP 810), both new syntactic features in Python 3.15 (#5048)
- Python 3.15 is now supported. Compiled wheels are not yet provided for Python 3.15, so performance may be slower than on existing Python versions. Wheels will be provided once Python 3.15 is later in its release cycle. (#5127)
Stable style
- Fix
# fmt: skipbeing ignored in nestedifexpressions with parenthesizedinclauses (#4903) - Add syntactic support for Python 3.15 (#5048)
- Fix crash when an f-string follows a
# fmt: offcomment inside brackets (#5097) - Preserve multiline compound statement headers when
# fmt: skipis placed on the colon line (#5117)
Preview style
- Improve heuristics around whether blank lines should appear before, within and after
groups of same-name decorated functions (such as
@overloadgroups) in.pyistub files (#5021) - Fix blank lines being removed between a function and a decorated class in
.pyistub files (#5092) - Prevent string merger from creating unsplittable long lines when a pragma comment
(e.g.
# type: ignore) follows the closing bracket (#5096)
Packaging
- Run CI on 3.15 (#5127)
Output
- Improve parse error readability by showing multi-line output with an error pointer. (#5068)
- Add
SourceASTParseErrorto distinguish source parse failures from internal safety errors, improving error reporting when Black's lenient parser accepts input thatast.parse()rejects (#5080)
Blackd
- Return HTTP 400 (Bad Request) for source parse failures instead of HTTP 500, keeping HTTP 500 only for genuine internal safety errors (#5080)
Integrations
- Added documentation for doctest formatting tools and updated the integrations index to match (#4916)
Documentation
- Use "Version X.Y.Z" headings in changelog for stable permalink anchors on ReadTheDocs (#5063)
- Note in the editor integrations that the SublimeText
sublackplugin is archived and unmaintained (#5082)