Releases: psf/black
Releases · psf/black
22.6.0
Style
- Fix unstable formatting involving
#fmt: skipand# fmt:skipcomments (notice the lack of spaces) (#2970)
Preview style
- Docstring quotes are no longer moved if it would violate the line length limit (#3044)
- Parentheses around return annotations are now managed (#2990)
- Remove unnecessary parentheses around awaited objects (#2991)
- Remove unnecessary parentheses in
withstatements (#2926) - Remove trailing newlines after code block open (#3035)
Integrations
- Add
scripts/migrate-black.pyscript to ease introduction of Black to a Git project (#3038)
Output
- Output Python version and implementation as part of
--versionflag (#2997)
Packaging
- Use
tomliinstead oftomllibon Python 3.11 builds wheretomllibis not available (#2987)
Parser
- PEP 654 syntax (for example,
except *ExceptionGroup:) is now supported (#3016) - PEP 646 syntax (for example,
Array[Batch, *Shape]ordef fn(*args: *T) -> None) is now supported (#3071)
Vim Plugin
- Fix
strtoboolfunction. It didn't parse true/on/false/off. (#3025)
Full Changelog: 22.3.0...22.6.0
Thank you!
- @jpy-git for improving our parentheses formatting significantly
- @siuryan for fixing a fmt: skip bug, making it a little less annoying to use :)
- @isidentical for implementing support for PEP 654 and 646 syntax
- @defntvdm for fixing our vim plugin, especially as we (the maintainers) don't really know vim script sadly
- @idorrington92 for fixing the docstring bug where Black would move the closing quotes causing it to violate the line length limit (whoops!)
- @hbrunn for contributing the migrate-black script
- @saroad2 for improving newline handling after code blocks and test infrastructure improvements
... and everyone else who contributed documentation, tests, or other improvements to the Black project!
Finally congrats to first contributors!
- @kolibril13 made their first contribution in #2982
- @siuryan made their first contribution in #2970
- @dignissimus made their first contribution in #3007
- @JiriKr made their first contribution in #3023
- @defntvdm made their first contribution in #3025
- @naveensrinivasan made their first contribution in #3043
- @idorrington92 made their first contribution in #3044
- @laundmo made their first contribution in #3063
- @ysk24ok made their first contribution in #3070
- @hbrunn made their first contribution in #3038
- @vivekvashist made their first contribution in #3096
- @nateprewitt made their first contribution in #3125
- @yilei made their first contribution in #3135
22.3.0
Preview style
- Code cell separators
#%%are now standardised to# %%(#2919) - Remove unnecessary parentheses from
exceptstatements (#2939) - Remove unnecessary parentheses from tuple unpacking in
forloops (#2945) - Avoid magic-trailing-comma in single-element subscripts (#2942)
Configuration
- Do not format
__pypackages__directories by default (#2836) - Add support for specifying stable version with
--required-version(#2832). - Avoid crashing when the user has no homedir (#2814)
- Avoid crashing when md5 is not available (#2905)
- Fix handling of directory junctions on Windows (#2904)
Documentation
- Update pylint config documentation (#2931)
Integrations
- Move test to disable plugin in Vim/Neovim, which speeds up loading (#2896)
Output
- In verbose, mode, log when Black is using user-level config (#2861)
Packaging
- Fix Black to work with Click 8.1.0 (#2966)
- On Python 3.11 and newer, use the standard library's
tomllibinstead oftomli
(#2903) black-primer, the deprecated internal devtool, has been removed and copied to a
separate repository (#2924)
Parser
- Black can now parse starred expressions in the target of
forandasync for
statements, e.gfor item in *items_1, *items_2: pass(#2879).
22.1.0
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
Style
- Deprecate
--experimental-string-processingand 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
returnandyieldconstructs 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 annotationsstatement now implies Python 3.7+ (#2690)
Performance
- Speed-up the new backtracking parser about 4X in general (enabled when
--target-versionis 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). - Enable Python 3.10+ by default, without any extra need to specify -
-target-version=py310. (#2758) - Make passing
SRCor--codemandatory 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-extensionsis no longer a required dependency in Python 3.10+ (#2772)- Set
clicklower bound to8.0.0as Black crashes on7.1.2(#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-primertool (#2809) - Document Python support policy (#2819)
Full Changelog: 21.12b0...22.1.0
Thank you!
- @isidentical for their continued work on making our Python 3.10 support better than ever (we made them a co-maintainer 🎉)
- @hauntsaninja for their help improving our stub style
- @nipunn1313 making Black more stable (which has been a long running battle)
- .. and all of my fellow co-maintainers who have made working on this project a wonderful ride @JelleZijlstra @cooperlees @felix-hilden @ambv @zsol
And also congrats to first contributors!
- @mwtoews made their first contribution in #2701
- @gunungpw made their first contribution in #2733
- @joshowen made their first contribution in #2748
- @Shivansh-007 made their first contribution in #2526
- @cbows made their first contribution in #2761
- @jlazar17 made their first contribution in #2765
- @VanSHOE made their first contribution in #2712
- @emfdavid made their first contribution in #2786
- @mgmarino made their first contribution in #2744
- @RHammond2 made their first contribution in #2792
- @percurnicus made their first contribution in #2739
- @sobolevn made their first contribution in #2802
21.12b0
Black
- Fix determination of f-string expression spans (#2654)
- Fix bad formatting of error messages about EOF in multi-line statements (#2343)
- Functions and classes in blocks now have more consistent surrounding spacing (#2472)
Jupyter Notebook support
- Cell magics are now only processed if they are known Python cell magics. Earlier, all cell magics were tokenized, leading to possible indentation errors e.g. with
%%writefile. (#2630) - Fix assignment to environment variables in Jupyter Notebooks (#2642)
Python 3.10 support
- Point users to using
--target-version py310if we detect 3.10-only syntax (#2668) - Fix
matchstatements with open sequence subjects, likematch a, b:ormatch a, *b:(#2639) (#2659) - Fix
match/casestatements that containmatch/casesoft keywords multiple times, likematch re.match()(#2661) - Fix
casestatements with an inline body (#2665) - Fix styling of starred expressions inside
matchsubject (#2667) - Fix parser error location on invalid syntax in a
matchstatement (#2649) - Fix Python 3.10 support on platforms without ProcessPoolExecutor (#2631)
- Improve parsing performance on code that uses
matchunder--target-version py310up to ~50% (#2670)
Packaging
Thank you!
- @isidentical for the polishing up 3.10 syntax support (which they contributed in the first place!)
- @MarcoGorelli for their ever-continuing work on Black's jupyter support
- @jalaziz for cleaning up our Pyinstaller CD workflow
- @hauntsaninja for helping us drop the
regexdependency
And also congrats to first contributors!
- @MatthewScholefield made their first contribution in #2631
- @AshIsbitt made their first contribution in #2632
- @kalbasit made their first contribution in #2638
- @danieleades made their first contribution in #2653
- @danielsparing made their first contribution in #2630
- @tanvimoharir made their first contribution in #2343
21.11b1
21.11b0
Black
- Warn about Python 2 deprecation in more cases by improving Python 2 only syntax
detection (#2592) - Add experimental PyPy support (#2559)
- Add partial support for the match statement. As it's experimental, it's only enabled
when--target-version py310is explicitly specified (#2586) - Add support for parenthesized with (#2586)
- Declare support for Python 3.10 for running Black (#2562)
Integrations
21.10b0
Black
- Document stability policy, that will apply for non-beta releases (#2529)
- Add new
--workersparameter (#2514) - Fixed feature detection for positional-only arguments in lambdas (#2532)
- Bumped typed-ast version minimum to 1.4.3 for 3.10 compatiblity (#2519)
- Fixed a Python 3.10 compatibility issue where the loop argument was still being passed
even though it has been removed (#2580) - Deprecate Python 2 formatting support (#2523)
Blackd
Black-Primer
Integrations
21.9b0
21.8b0
Black
- Add support for formatting Jupyter Notebook files (#2357)
- Move from
appdirsdependency toplatformdirs(#2375) - Present a more user-friendly error if .gitignore is invalid (#2414)
- The failsafe for accidentally added backslashes in f-string expressions has been hardened to handle more edge cases during quote normalization (#2437)
- Avoid changing a function return type annotation's type to a tuple by adding a trailing comma (#2384)
- Parsing support has been added for unparenthesized walruses in set literals, set comprehensions, and indices (#2447).
- Pin
setuptools-scmbuild-time dependency version (#2457) - Exclude typing-extensions version 3.10.0.1 due to it being broken on Python 3.10 (#2460)
Blackd
- Replace sys.exit(-1) with raise ImportError as it plays more nicely with tools that scan installed packages (#2440)
Integrations
- The provided pre-commit hooks no longer specify
language_versionto avoid overridingdefault_language_version(#2430)
21.7b0
Black
- Configuration files using TOML features higher than spec v0.5.0 are now supported
(#2301) - Add primer support and test for code piped into black via STDIN (#2315)
- Fix internal error when
FORCE_OPTIONAL_PARENTHESESfeature is enabled (#2332) - Accept empty stdin (#2346)
- Provide a more useful error when parsing fails during AST safety checks (#2304)
Docker
- Add new
latest_releasetag automation to follow latest black release on docker
images (#2374)
Integrations
- The vim plugin now searches upwards from the directory containing the current buffer
instead of the current working directory for pyproject.toml. (#1871) - The vim plugin now reads the correct string normalization option in pyproject.toml
(#1869) - The vim plugin no longer crashes Black when there's boolean values in pyproject.toml
(#1869)