Black 25.1.0

25.1.0
Changed 12
  • Normalize casing of Unicode escape characters in strings to lowercase
  • Consistently add trailing commas to typed function parameters
  • Remove redundant parentheses in if guards for case blocks
  • Add parentheses to if clauses in case blocks when the line is too long
  • Whitespace before # fmt: skip comments is no longer normalized
  • Remove parentheses around sole list items
Fixed 8
  • Fix inconsistencies in whether certain strings are detected as docstrings
  • Fix line length computation for certain expressions that involve the power operator
  • Check if there is a newline before the terminating quotes of a docstring
  • Fix type annotation spacing between * and more complex type variable tuple
  • Fix formatting cells in IPython notebooks with magic methods and starting or trailing empty lines
  • Fix crash when formatting with statements containing tuple generators or unpacking
  • Fix string merging changing f-string quotes on f-strings with internal quotes
  • Prevent string_processing and wrap_long_dict_values_in_parens from removing parentheses around long dictionary values
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. (#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)
View original

Upgraded? How did it go?

Discussion