chore(deps): update dependency black to v24
This MR contains the following updates:
Package | Type | Update | Change |
---|---|---|---|
black (changelog) | dev | major |
22.10.0 -> 24.4.2
|
Release Notes
psf/black (black)
v24.4.2
This is a bugfix release to fix two regressions in the new f-string parser introduced in 24.4.1.
Parser
- Fix regression where certain complex f-strings failed to parse (#β4332)
Performance
- Fix bad performance on certain complex string literals (#β4331)
v24.4.1
Highlights
- Add support for the new Python 3.12 f-string syntax introduced by PEP 701 (#β3822)
Stable style
- Fix crash involving indented dummy functions containing newlines (#β4318)
Parser
- Add support for type parameter defaults, a new syntactic feature added to Python 3.13 by PEP 696 (#β4327)
Integrations
- Github Action now works even when
git archive
is skipped (#β4313)
v24.4.0
Stable style
- Fix unwanted crashes caused by AST equivalency check (#β4290)
Preview style
-
if
guards incase
blocks are now wrapped in parentheses when the line is too long. (#β4269) - Stop moving multiline strings to a new line unless inside brackets (#β4289)
Integrations
- Add a new option
use_pyproject
to the GitHub Actionpsf/black
. This will read the Black version frompyproject.toml
. (#β4294)
v24.3.0
Highlights
This release is a milestone: it fixes Black's first CVE security vulnerability. If you run Black on untrusted input, or if you habitually put thousands of leading tab characters in your docstrings, you are strongly encouraged to upgrade immediately to fix CVE-2024-21503.
This release also fixes a bug in Black's AST safety check that allowed Black to make incorrect changes to certain f-strings that are valid in Python 3.12 and higher.
Stable style
- Don't move comments along with delimiters, which could cause crashes (#β4248)
- Strengthen AST safety check to catch more unsafe changes to strings. Previous versions of Black would incorrectly format the contents of certain unusual f-strings containing nested strings with the same quote type. Now, Black will crash on such strings until support for the new f-string syntax is implemented. (#β4270)
- Fix a bug where line-ranges exceeding the last code line would not work as expected (#β4273)
Performance
- Fix catastrophic performance on docstrings that contain large numbers of leading tab characters. This fixes CVE-2024-21503. (#β4278)
Documentation
- Note what happens when
--check
is used with--quiet
(#β4236)
v24.2.0
Stable style
- Fixed a bug where comments where mistakenly removed along with redundant parentheses (#β4218)
Preview style
- Move the
hug_parens_with_braces_and_square_brackets
feature to the unstable style due to an outstanding crash and proposed formatting tweaks (#β4198) - Fixed a bug where base expressions caused inconsistent formatting of ** in tenary expression (#β4154)
- Checking for newline before adding one on docstring that is almost at the line limit (#β4185)
- Remove redundant parentheses in
case
statementif
guards (#β4214).
Configuration
- Fix issue where Black would ignore input files in the presence of symlinks (#β4222)
-
Black now ignores
pyproject.toml
that is missing atool.black
section when discovering project root and configuration. Since Black continues to use version control as an indicator of project root, this is expected to primarily change behavior for users in a monorepo setup (desirably). If you wish to preserve previous behavior, simply add an empty[tool.black]
to the previously discoveredpyproject.toml
(#β4204)
Output
- Black will swallow any
SyntaxWarning
s orDeprecationWarning
s produced by theast
module when performing equivalence checks (#β4189)
Integrations
- Add a JSONSchema and provide a validate-pyproject entry-point (#β4181)
v24.1.1
Bugfix release to fix a bug that made Black unusable on certain file systems with strict limits on path length.
Preview style
- Consistently add trailing comma on typed parameters (#β4164)
Configuration
- Shorten the length of the name of the cache file to fix crashes on file systems that do not support long paths (#β4176)
v24.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)
v23.12.1
Packaging
- Fixed a bug that included dependencies from the
d
extra by default (#β4108)
v23.12.0
Highlights
It's almost 2024, which means it's time for a new edition of Black's stable style! Together with this release, we'll put out an alpha release 24.1a1 showcasing the draft 2024 stable style, which we'll finalize in the January release. Please try it out and share your feedback.
This release (23.12.0) will still produce the 2023 style. Most but not all of the
changes in --preview
mode will be in the 2024 stable style.
Stable style
- Fix bug where
# fmt: off
automatically dedents when used with the--line-ranges
option, even when it is not within the specified line range. (#β4084) - Fix feature detection for parenthesized context managers (#β4104)
Preview style
- Prefer more equal signs before a break when splitting chained assignments (#β4010)
- Standalone form feed characters at the module level are no longer removed (#β4021)
- Additional cases of immediately nested tuples, lists, and dictionaries are now indented less (#β4012)
- Allow empty lines at the beginning of all blocks, except immediately before a docstring (#β4060)
- Fix crash in preview mode when using a short
--line-length
(#β4086) - Keep suites consisting of only an ellipsis on their own lines if they are not functions or class definitions (#β4066) (#β4103)
Configuration
-
--line-ranges
now skips Black's internal stability check in--safe
mode. This avoids a crash on rare inputs that have many unformatted same-content lines. (#β4034)
Packaging
- Upgrade to mypy 1.7.1 (#β4049) (#β4069)
- Faster compiled wheels are now available for CPython 3.12 (#β4070)
Integrations
- Enable 3.12 CI (#β4035)
- Build docker images in parallel (#β4054)
- Build docker images with 3.12 (#β4055)
v23.11.0
Highlights
- Support formatting ranges of lines with the new
--line-ranges
command-line option (#β4020)
Stable style
- Fix crash on formatting bytes strings that look like docstrings (#β4003)
- Fix crash when whitespace followed a backslash before newline in a docstring (#β4008)
- Fix standalone comments inside complex blocks crashing Black (#β4016)
- Fix crash on formatting code like
await (a ** b)
(#β3994) - No longer treat leading f-strings as docstrings. This matches Python's behaviour and fixes a crash (#β4019)
Preview style
- Multiline dicts and lists that are the sole argument to a function are now indented less (#β3964)
- Multiline unpacked dicts and lists as the sole argument to a function are now also indented less (#β3992)
- In f-string debug expressions, quote types that are visible in the final string are now preserved (#β4005)
- Fix a bug where long
case
blocks were not split into multiple lines. Also enable general trailing comma rules oncase
blocks (#β4024) - Keep requiring two empty lines between module-level docstring and first function or class definition (#β4028)
- Add support for single-line format skip with other comments on the same line (#β3959)
Configuration
- Consistently apply force exclusion logic before resolving symlinks (#β4015)
- Fix a bug in the matching of absolute path names in
--include
(#β3976)
Performance
- Fix mypyc builds on arm64 on macOS (#β4017)
Integrations
- Black's pre-commit integration will now run only on git hooks appropriate for a code formatter (#β3940)
v23.10.1
Highlights
- Maintenance release to get a fix out for GitHub Action edge case (#β3957)
Preview style
- Fix merging implicit multiline strings that have inline comments (#β3956)
- Allow empty first line after block open before a comment or compound statement (#β3967)
Packaging
- Change Dockerfile to hatch + compile black (#β3965)
Integrations
- The summary output for GitHub workflows is now suppressible using the
summary
parameter. (#β3958) - Fix the action failing when Black check doesn't pass (#β3957)
Documentation
- It is known Windows documentation CI is broken https://github.com/psf/black/issues/3968
v23.10.0
Stable style
- Fix comments getting removed from inside parenthesized strings (#β3909)
Preview style
- Fix long lines with power operators getting split before the line length (#β3942)
- Long type hints are now wrapped in parentheses and properly indented when split across multiple lines (#β3899)
- Magic trailing commas are now respected in return types. (#β3916)
- Require one empty line after module-level docstrings. (#β3932)
- Treat raw triple-quoted strings as docstrings (#β3947)
Configuration
- Fix cache versioning logic when
BLACK_CACHE_DIR
is set (#β3937)
Parser
- Fix bug where attributes named
type
were not accepted insidematch
statements (#β3950) - Add support for PEP 695 type aliases containing lambdas and other unusual expressions (#β3949)
Output
- Black no longer attempts to provide special errors for attempting to format Python 2 code (#β3933)
- Black will more consistently print stacktraces on internal errors in verbose mode (#β3938)
Integrations
- The action output displayed in the job summary is now wrapped in Markdown (#β3914)
v23.9.1
Due to various issues, the previous release (23.9.0) did not include compiled mypyc wheels, which make Black significantly faster. These issues have now been fixed, and this release should come with compiled wheels once again.
There will be no wheels for Python 3.12 due to a bug in mypyc. We will provide 3.12 wheels in a future release as soon as the mypyc bug is fixed.
Packaging
- Upgrade to mypy 1.5.1 (#β3864)
Performance
- Store raw tuples instead of NamedTuples in Black's cache, improving performance and decreasing the size of the cache (#β3877)
v23.9.0
Preview style
- More concise formatting for dummy implementations (#β3796)
- In stub files, add a blank line between a statement with a body (e.g an
if sys.version_info > (3, x):
) and a function definition on the same level (#β3862) - Fix a bug whereby spaces were removed from walrus operators within subscript(#β3823)
Configuration
- Black now applies exclusion and ignore logic before resolving symlinks (#β3846)
Performance
- Avoid importing
IPython
if notebook cells do not contain magics (#β3782) - Improve caching by comparing file hashes as fallback for mtime and size (#β3821)
Blackd
- Fix an issue in
blackd
with single character input (#β3558)
Integrations
- Black now has an
official pre-commit mirror. Swapping
https://github.com/psf/black
tohttps://github.com/psf/black-pre-commit-mirror
in your.pre-commit-config.yaml
will make Black about 2x faster (#β3828) - The
.black.env
folder specified byENV_PATH
will now be removed on the completion of the GitHub Action (#β3759)
v23.7.0
Highlights
- Runtime support for Python 3.7 has been removed. Formatting 3.7 code will still be supported until further notice (#β3765)
Stable style
- Fix a bug where an illegal trailing comma was added to return type annotations using PEP 604 unions (#β3735)
- Fix several bugs and crashes where comments in stub files were removed or mishandled under some circumstances (#β3745)
- Fix a crash with multi-line magic comments like
type: ignore
within parentheses (#β3740) - Fix error in AST validation when Black removes trailing whitespace in a type comment (#β3773)
Preview style
- Implicitly concatenated strings used as function args are no longer wrapped inside parentheses (#β3640)
- Remove blank lines between a class definition and its docstring (#β3692)
Configuration
- The
--workers
argument to Black can now be specified via theBLACK_NUM_WORKERS
environment variable (#β3743) -
.pytest_cache
,.ruff_cache
and.vscode
are now excluded by default (#β3691) - Fix Black not honouring
pyproject.toml
settings when running--stdin-filename
and thepyproject.toml
found isn't in the current working directory (#β3719) -
Black will now error if
exclude
andextend-exclude
have invalid data types inpyproject.toml
, instead of silently doing the wrong thing (#β3764)
Packaging
- Upgrade mypyc from 0.991 to 1.3 (#β3697)
- Remove patching of Click that mitigated errors on Python 3.6 with
LANG=C
(#β3768)
Parser
- Add support for the new PEP 695 syntax in Python 3.12 (#β3703)
Performance
- Speed up Black significantly when the cache is full (#β3751)
- Avoid importing
IPython
in a case where we wouldn't need it (#β3748)
Output
- Use aware UTC datetimes internally, avoids deprecation warning on Python 3.12 (#β3728)
- Change verbose logging to exactly mirror Black's logic for source discovery (#β3749)
Blackd
- The
blackd
argument parser now shows the default values for options in their help text (#β3712)
Integrations
- Black is now tested with
PYTHONWARNDEFAULTENCODING = 1
(#β3763) - Update GitHub Action to display black output in the job summary (#β3688)
Documentation
- Add a CITATION.cff file to the root of the repository, containing metadata on how to cite this software (#β3723)
- Update the classes and exceptions documentation in Developer reference to match the latest code base (#β3755)
v23.3.0
Highlights
This release fixes a longstanding confusing behavior in Black's GitHub action, where the version of the action did not determine the version of Black being run (issue #β3382). In addition, there is a small bug fix around imports and a number of improvements to the preview style.
Please try out the
preview style
with black --preview
and tell us your feedback. All changes in the preview style are
expected to become part of Black's stable style in January 2024.
Stable style
- Import lines with
# fmt: skip
and# fmt: off
no longer have an extra blank line added when they are right after another import line (#β3610)
Preview style
- Add trailing commas to collection literals even if there's a comment after the last entry (#β3393)
-
async def
,async for
, andasync with
statements are now formatted consistently compared to their non-async version. (#β3609) -
with
statements that contain two context managers will be consistently wrapped in parentheses (#β3589) - Let string splitters respect East Asian Width (#β3445)
- Now long string literals can be split after East Asian commas and periods (
γ
U+3001 IDEOGRAPHIC COMMA,γ
U+3002 IDEOGRAPHIC FULL STOP, &οΌ
U+FF0C FULLWIDTH COMMA) besides before spaces (#β3445) - For stubs, enforce one blank line after a nested class with a body other than just
...
(#β3564) - Improve handling of multiline strings by changing line split behavior (#β1879)
Parser
- Added support for formatting files with invalid type comments (#β3594)
Integrations
- Update GitHub Action to use the version of Black equivalent to action's version if version input is not specified (#β3543)
- Fix missing Python binary path in autoload script for vim (#β3508)
Documentation
- Document that only the most recent release is supported for security issues; vulnerabilities should be reported through Tidelift (#β3612)
v23.1.0
Highlights
This is the first release of 2023, and following our stability policy, it comes with a number of improvements to our stable style, including improvements to empty line handling, removal of redundant parentheses in several contexts, and output that highlights implicitly concatenated strings better.
There are also many changes to the preview style; try out black --preview
and give us
feedback to help us set the stable style for next year.
In addition to style changes, Black now automatically infers the supported Python
versions from your pyproject.toml
file, removing the need to set Black's target
versions separately.
Stable style
- Introduce the 2023 stable style, which incorporates most aspects of last year's
preview style (#β3418). Specific changes:
- Enforce empty lines before classes and functions with sticky leading comments (#β3302) (22.12.0)
- Reformat empty and whitespace-only files as either an empty file (if no newline is present) or as a single newline character (if a newline is present) (#β3348) (22.12.0)
- Implicitly concatenated strings used as function args are now wrapped inside parentheses (#β3307) (22.12.0)
- Correctly handle trailing commas that are inside a line's leading non-nested parens (#β3370) (22.12.0)
-
--skip-string-normalization
/-S
now prevents docstring prefixes from being normalized as expected (#β3168) (since 22.8.0) - When using
--skip-magic-trailing-comma
or-C
, trailing commas are stripped from subscript expressions with more than 1 element (#β3209) (22.8.0) - Implicitly concatenated strings inside a list, set, or tuple are now wrapped inside parentheses (#β3162) (22.8.0)
- Fix a string merging/split issue when a comment is present in the middle of implicitly concatenated strings on its own line (#β3227) (22.8.0)
- Docstring quotes are no longer moved if it would violate the line length limit (#β3044, #β3430) (22.6.0)
- Parentheses around return annotations are now managed (#β2990) (22.6.0)
- Remove unnecessary parentheses around awaited objects (#β2991) (22.6.0)
- Remove unnecessary parentheses in
with
statements (#β2926) (22.6.0) - Remove trailing newlines after code block open (#β3035) (22.6.0)
- Code cell separators
#%%
are now standardised to# %%
(#β2919) (22.3.0) - Remove unnecessary parentheses from
except
statements (#β2939) (22.3.0) - Remove unnecessary parentheses from tuple unpacking in
for
loops (#β2945) (22.3.0) - Avoid magic-trailing-comma in single-element subscripts (#β2942) (22.3.0)
- Fix a crash when a colon line is marked between
# fmt: off
and# fmt: on
(#β3439)
Preview style
- Format hex codes in unicode escape sequences in string literals (#β2916)
- Add parentheses around
if
-else
expressions (#β2278) - Improve performance on large expressions that contain many strings (#β3467)
- Fix a crash in preview style with assert + parenthesized string (#β3415)
- Fix crashes in preview style with walrus operators used in function return annotations and except clauses (#β3423)
- Fix a crash in preview advanced string processing where mixed implicitly concatenated regular and f-strings start with an empty span (#β3463)
- Fix a crash in preview advanced string processing where a standalone comment is placed before a dict's value (#β3469)
- Fix an issue where extra empty lines are added when a decorator has
# fmt: skip
applied or there is a standalone comment between decorators (#β3470) - Do not put the closing quotes in a docstring on a separate line, even if the line is too long (#β3430)
- Long values in dict literals are now wrapped in parentheses; correspondingly unnecessary parentheses around short values in dict literals are now removed; long string lambda values are now wrapped in parentheses (#β3440)
- Fix two crashes in preview style involving edge cases with docstrings (#β3451)
- Exclude string type annotations from improved string processing; fix crash when the return type annotation is stringified and spans across multiple lines (#β3462)
- Wrap multiple context managers in parentheses when targeting Python 3.9+ (#β3489)
- Fix several crashes in preview style with walrus operators used in
with
statements or tuples (#β3473) - Fix an invalid quote escaping bug in f-string expressions where it produced invalid code. Implicitly concatenated f-strings with different quotes can now be merged or quote-normalized by changing the quotes used in expressions. (#β3509)
- Fix crash on
await (yield)
when Black is compiled with mypyc (#β3533)
Configuration
- Black now tries to infer its
--target-version
from the project metadata specified inpyproject.toml
(#β3219)
Packaging
- Upgrade mypyc from
0.971
to0.991
so mypycified Black can be built on armv7 (#β3380)- This also fixes some crashes while using compiled Black with a debug build of CPython
- Drop specific support for the
tomli
requirement on 3.11 alpha releases, working around a bug that would cause the requirement not to be installed on any non-final Python releases (#β3448) - Black now depends on
packaging
version22.0
or later. This is required for new functionality that needs to parse part of the project metadata (#β3219)
Output
- Calling
black --help
multiple times will return the same help contents each time (#β3516) - Verbose logging now shows the values of
pyproject.toml
configuration variables (#β3392) - Fix false symlink detection messages in verbose output due to using an incorrect relative path to the project root (#β3385)
Integrations
- Move 3.11 CI to normal flow now that all dependencies support 3.11 (#β3446)
- Docker: Add new
latest_prerelease
tag automation to follow latest black alpha release on docker images (#β3465)
Documentation
- Expand
vim-plug
installation instructions to offer more explicit options (#β3468)
v22.12.0
Preview style
- Enforce empty lines before classes and functions with sticky leading comments (#β3302)
- Reformat empty and whitespace-only files as either an empty file (if no newline is present) or as a single newline character (if a newline is present) (#β3348)
- Implicitly concatenated strings used as function args are now wrapped inside parentheses (#β3307)
- For assignment statements, prefer splitting the right hand side if the left hand side fits on a single line (#β3368)
- Correctly handle trailing commas that are inside a line's leading non-nested parens (#β3370)
Configuration
- Fix incorrectly applied
.gitignore
rules by considering the.gitignore
location and the relative path to the target file (#β3338) - Fix incorrectly ignoring
.gitignore
presence when more than one source directory is specified (#β3336)
Parser
- Parsing support has been added for walruses inside generator expression that are
passed as function args (for example,
any(match := my_re.match(text) for text in texts)
) (#β3327).
Integrations
- Vim plugin: Optionally allow using the system installation of Black via
let g:black_use_virtualenv = 0
(#β3309)
Configuration
-
If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot.