Highlights
This release introduces the new 2025 stable style (4558), stabilizing
the following changes:
- Normalize casing of Unicode escape characters in strings to lowercase (2916)
- Fix inconsistencies in whether certain strings are detected as docstrings (4095)
- Consistently add trailing commas to typed function parameters (4164)
- Remove redundant parentheses in if guards for case blocks (4214)
- Add parentheses to if clauses in case blocks when the line is too long (4269)
- Whitespace before ` fmt: skip` comments is no longer normalized (4146)
- Fix line length computation for certain expressions that involve the power operator (4154)
- Check if there is a newline before the terminating quotes of a docstring (4185)
- Fix type annotation spacing between `*` and more complex type variable tuple (4440)
The following changes were not in any previous release:
- Remove parentheses around sole list items (4312)
- Generic function definitions are now formatted more elegantly: parameters are
split over multiple lines first instead of type parameter definitions (4553)
Stable style
- Fix formatting cells in IPython notebooks with magic methods and starting or trailing
empty lines (4484)
- Fix crash when formatting `with` statements containing tuple generators/unpacking
(4538)
Preview style
- Fix/remove string merging changing f-string quotes on f-strings with internal quotes
(4498)
- Collapse multiple empty lines after an import into one (4489)
- Prevent `string_processing` and `wrap_long_dict_values_in_parens` from removing
parentheses around long dictionary values (4377)
- Move `wrap_long_dict_values_in_parens` from the unstable to preview style (4561)
Packaging
- Store license identifier inside the `License-Expression` metadata field, see
[PEP 639](https://peps.python.org/pep-0639/). (#4479)
Performance
- Speed up the `is_fstring_start` function in Black's tokenizer (4541)
Integrations
- If using stdin with `--stdin-filename` set to a force excluded path, stdin won't be
formatted. (4539)