black v22.1.0 Release Notes
-
At long last, Black is no longer a beta product! This is the first non-beta release ๐ and the first release covered by our new stability policy.
Highlights
- โ Remove Python 2 support (#2740)
- Introduce the
--preview
flag (#2752)
๐ Style
- ๐ Deprecate
--experimental-string-processing
and move the functionality under--preview
(#2789) - For stubs, one blank line between class attributes and methods is now kept if there's at least one pre-existing blank line (#2736)
- Black now normalizes string prefix order (#2297)
- โ Remove spaces around power operators if both operands are simple (#2726)
- โช Work around bug that causes unstable formatting in some cases in the presence of the magic trailing comma (#2807)
- ๐ Use parentheses for attribute access on decimal float and int literals (#2799)
- Don't add whitespace for attribute access on hexadecimal, binary, octal, and complex literals (#2799)
- Treat blank lines in stubs the same inside top-level
if
statements (#2820) - ๐ Fix unstable formatting with semicolons and arithmetic expressions (#2817)
- ๐ Fix unstable formatting around magic trailing comma (#2572)
๐ Parser
- ๐ Fix mapping cases that contain as-expressions, like
case {"key": 1 | 2 as password}
(#2686) - ๐ Fix cases that contain multiple top-level as-expressions, like
case 1 as a, 2 as b
(#2716) - ๐ Fix call patterns that contain as-expressions with keyword arguments, like
case Foo(bar=baz as quux)
(#2749) - Tuple unpacking on
return
andyield
constructs now implies 3.8+ (#2700) - Unparenthesized tuples on annotated assignments (e.g
values: Tuple[int, ...] = 1, 2, 3
) now implies 3.8+ (#2708) - ๐ Fix handling of standalone
match()
orcase()
when there is a trailing newline or a comment inside of the parentheses. (#2760) from __future__ import annotations
statement now implies Python 3.7+ (#2690)
๐ Performance
- ๐ Speed-up the new backtracking parser about 4X in general (enabled when
--target-version
is set to 3.10 and higher). (#2728) - Black is now compiled with mypyc for an overall 2x speed-up. 64-bit Windows, MacOS, and Linux (not including musl) are supported. (#1009, #2431)
๐ง Configuration
- Do not accept bare carriage return line endings in pyproject.toml (#2408)
- โ Add configuration option (
python-cell-magics
) to format cells with custom magics in Jupyter Notebooks (#2744) - ๐ Allow setting custom cache directory on all platforms with environment variable
BLACK_CACHE_DIR
(#2739). - 0๏ธโฃ Enable Python 3.10+ by default, without any extra need to specify
--target-version=py310
. (#2758) - ๐ Make passing
SRC
or--code
mandatory and mutually exclusive (#2804)
Output
- ๐ Improve error message for invalid regular expression (#2678)
- ๐ Improve error message when parsing fails during AST safety check by embedding the underlying SyntaxError (#2693)
- No longer color diff headers white as it's unreadable in light themed terminals (#2691)
- Text coloring added in the final statistics (#2712)
- Verbose mode also now describes how a project root was discovered and which paths will be formatted. (#2526)
Packaging
- ๐ All upper version bounds on dependencies have been removed (#2718)
typing-extensions
is no longer a required dependency in Python 3.10+ (#2772)- Set
click
lower bound to8.0.0
(#2791)
Integrations
- โก๏ธ Update GitHub action to support containerized runs (#2748)
๐ Documentation
- ๐ Change protocol in pip installation instructions to
https://
(#2761) - ๐ Change HTML theme to Furo primarily for its responsive design and mobile support (#2793)
- ๐ Deprecate the
black-primer
tool (#2809) - ๐ Document Python support policy (#2819)