24.1.0
Highlights
This release introduces the new 2024 stable style (#4106), stabilizing the following
changes:
- Add parentheses around
if
-else
expressions (#2278) - Dummy class and function implementations consisting only of
...
are formatted more
compactly (#3796) - If an assignment statement is too long, we now prefer splitting on the right-hand side
(#3368) - Hex codes in Unicode escape sequences are now standardized to lowercase (#2916)
- Allow empty first lines at the beginning of most blocks (#3967, #4061)
- Add parentheses around long type annotations (#3899)
- Enforce newline after module docstrings (#3932, #4028)
- Fix incorrect magic trailing comma handling in return types (#3916)
- Remove blank lines before class docstrings (#3692)
- Wrap multiple context managers in parentheses if combined in a single
with
statement
(#3489) - Fix bug in line length calculations for power operations (#3942)
- Add trailing commas to collection literals even if there's a comment after the last
entry (#3393) - When using
--skip-magic-trailing-comma
or-C
, trailing commas are stripped from
subscript expressions with more than 1 element (#3209) - Add extra blank lines in stubs in a few cases (#3564, #3862)
- Accept raw strings as docstrings (#3947)
- Split long lines in case blocks (#4024)
- Stop removing spaces from walrus operators within subscripts (#3823)
- Fix incorrect formatting of certain async statements (#3609)
- Allow combining
# fmt: skip
with other comments (#3959)
There are already a few improvements in the --preview
style, which are slated for the
2025 stable style. Try them out and
share your feedback. In the past, the preview
style has included some features that we were not able to stabilize. This year, we're
adding a separate --unstable
style for features with known problems. Now, the
--preview
style only includes features that we actually expect to make it into next
year's stable style.
Stable style
Several bug fixes were made in features that are moved to the stable style in this
release:
- Fix comment handling when parenthesising conditional expressions (#4134)
- Fix bug where spaces were not added around parenthesized walruses in subscripts,
unlike other binary operators (#4109) - Remove empty lines before docstrings in async functions (#4132)
- Address a missing case in the change to allow empty lines at the beginning of all
blocks, except immediately before a docstring (#4130) - For stubs, fix logic to enforce empty line after nested classes with bodies (#4141)
Preview style
- Add
--unstable
style, covering preview features that have known problems that would
block them from going into the stable style. Also add the--enable-unstable-feature
flag; for example, use
--enable-unstable-feature hug_parens_with_braces_and_square_brackets
to apply this
preview feature throughout 2024, even if a later Black release downgrades the feature
to unstable (#4096) - Format module docstrings the same as class and function docstrings (#4095)
- Fix crash when using a walrus in a dictionary (#4155)
- Fix unnecessary parentheses when wrapping long dicts (#4135)
- Stop normalizing spaces before
# fmt: skip
comments (#4146)
Configuration
- Print warning when configuration in
pyproject.toml
contains an invalid key (#4165) - Fix symlink handling, properly ignoring symlinks that point outside of root (#4161)
- Fix cache mtime logic that resulted in false positive cache hits (#4128)
- Remove the long-deprecated
--experimental-string-processing
flag. This feature can
currently be enabled with--preview --enable-unstable-feature string_processing
.
(#4096)
Integrations
- Revert the change to run Black's pre-commit integration only on specific git hooks
(#3940) for better compatibility with older versions of pre-commit (#4137)
Thank you
Thank you to everyone who provided feedback to help make Black's 2024 style even better. Thank you also to everyone who contributed code to Black.