]> git.madduck.net Git - etc/vim.git/blob - CHANGES.md

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Add option to skip the first line of source code (#3299)
[etc/vim.git] / CHANGES.md
1 # Change Log
2
3 ## Unreleased
4
5 ### Highlights
6
7 <!-- Include any especially major or disruptive changes here -->
8
9 - Runtime support for Python 3.6 has been removed. Formatting 3.6 code will still be
10   supported until further notice.
11
12 ### Stable style
13
14 <!-- Changes that affect Black's stable style -->
15
16 - Fix a crash when `# fmt: on` is used on a different block level than `# fmt: off`
17   (#3281)
18
19 ### Preview style
20
21 <!-- Changes that affect Black's preview style -->
22
23 - Fix a crash when formatting some dicts with parenthesis-wrapped long string keys
24   (#3262)
25
26 ### Configuration
27
28 <!-- Changes to how Black can be configured -->
29
30 - `.ipynb_checkpoints` directories are now excluded by default (#3293)
31 - Add `--skip-source-first-line` / `-x` option to ignore the first line of source code
32   while formatting (#3299)
33
34 ### Packaging
35
36 <!-- Changes to how Black is packaged, such as dependency requirements -->
37
38 - Executables made with PyInstaller will no longer crash when formatting several files
39   at once on macOS. Native x86-64 executables for macOS are available once again.
40   (#3275)
41 - Hatchling is now used as the build backend. This will not have any effect for users
42   who install Black with its wheels from PyPI. (#3233)
43 - Faster compiled wheels are now available for CPython 3.11 (#3276)
44
45 ### Parser
46
47 <!-- Changes to the parser or to version autodetection -->
48
49 ### Performance
50
51 <!-- Changes that improve Black's performance. -->
52
53 ### Output
54
55 <!-- Changes to Black's terminal output and error messages -->
56
57 ### _Blackd_
58
59 - Windows style (CRLF) newlines will be preserved (#3257).
60
61 ### Integrations
62
63 <!-- For example, Docker, GitHub Actions, pre-commit, editors -->
64
65 - Update GitHub Action to support formatting of Jupyter Notebook files via a `jupyter`
66   option (#3282)
67 - Update GitHub Action to support use of version specifiers (e.g. `<23`) for Black
68   version (#3265)
69
70 ### Documentation
71
72 <!-- Major changes to documentation and policies. Small docs changes
73      don't need a changelog entry. -->
74
75 ## 22.8.0
76
77 ### Highlights
78
79 - Python 3.11 is now supported, except for _blackd_ as aiohttp does not support 3.11 as
80   of publishing (#3234)
81 - This is the last release that supports running _Black_ on Python 3.6 (formatting 3.6
82   code will continue to be supported until further notice)
83 - Reword the stability policy to say that we may, in rare cases, make changes that
84   affect code that was not previously formatted by _Black_ (#3155)
85
86 ### Stable style
87
88 - Fix an infinite loop when using `# fmt: on/off` in the middle of an expression or code
89   block (#3158)
90 - Fix incorrect handling of `# fmt: skip` on colon (`:`) lines (#3148)
91 - Comments are no longer deleted when a line had spaces removed around power operators
92   (#2874)
93
94 ### Preview style
95
96 - Single-character closing docstring quotes are no longer moved to their own line as
97   this is invalid. This was a bug introduced in version 22.6.0. (#3166)
98 - `--skip-string-normalization` / `-S` now prevents docstring prefixes from being
99   normalized as expected (#3168)
100 - When using `--skip-magic-trailing-comma` or `-C`, trailing commas are stripped from
101   subscript expressions with more than 1 element (#3209)
102 - Implicitly concatenated strings inside a list, set, or tuple are now wrapped inside
103   parentheses (#3162)
104 - Fix a string merging/split issue when a comment is present in the middle of implicitly
105   concatenated strings on its own line (#3227)
106
107 ### _Blackd_
108
109 - `blackd` now supports enabling the preview style via the `X-Preview` header (#3217)
110
111 ### Configuration
112
113 - Black now uses the presence of debug f-strings to detect target version (#3215)
114 - Fix misdetection of project root and verbose logging of sources in cases involving
115   `--stdin-filename` (#3216)
116 - Immediate `.gitignore` files in source directories given on the command line are now
117   also respected, previously only `.gitignore` files in the project root and
118   automatically discovered directories were respected (#3237)
119
120 ### Documentation
121
122 - Recommend using BlackConnect in IntelliJ IDEs (#3150)
123
124 ### Integrations
125
126 - Vim plugin: prefix messages with `Black: ` so it's clear they come from Black (#3194)
127 - Docker: changed to a /opt/venv installation + added to PATH to be available to
128   non-root users (#3202)
129 - Vim plugin: add flag (`g:black_preview`) to enable/disable the preview style (#3246)
130
131 ### Output
132
133 - Change from deprecated `asyncio.get_event_loop()` to create our event loop which
134   removes DeprecationWarning (#3164)
135 - Remove logging from internal `blib2to3` library since it regularly emits error logs
136   about failed caching that can and should be ignored (#3193)
137
138 ### Parser
139
140 - Type comments are now included in the AST equivalence check consistently so accidental
141   deletion raises an error. Though type comments can't be tracked when running on PyPy
142   3.7 due to standard library limitations. (#2874)
143
144 ### Performance
145
146 - Reduce Black's startup time when formatting a single file by 15-30% (#3211)
147
148 ## 22.6.0
149
150 ### Style
151
152 - Fix unstable formatting involving `#fmt: skip` and `# fmt:skip` comments (notice the
153   lack of spaces) (#2970)
154
155 ### Preview style
156
157 - Docstring quotes are no longer moved if it would violate the line length limit (#3044)
158 - Parentheses around return annotations are now managed (#2990)
159 - Remove unnecessary parentheses around awaited objects (#2991)
160 - Remove unnecessary parentheses in `with` statements (#2926)
161 - Remove trailing newlines after code block open (#3035)
162
163 ### Integrations
164
165 - Add `scripts/migrate-black.py` script to ease introduction of Black to a Git project
166   (#3038)
167
168 ### Output
169
170 - Output Python version and implementation as part of `--version` flag (#2997)
171
172 ### Packaging
173
174 - Use `tomli` instead of `tomllib` on Python 3.11 builds where `tomllib` is not
175   available (#2987)
176
177 ### Parser
178
179 - [PEP 654](https://peps.python.org/pep-0654/#except) syntax (for example,
180   `except *ExceptionGroup:`) is now supported (#3016)
181 - [PEP 646](https://peps.python.org/pep-0646) syntax (for example,
182   `Array[Batch, *Shape]` or `def fn(*args: *T) -> None`) is now supported (#3071)
183
184 ### Vim Plugin
185
186 - Fix `strtobool` function. It didn't parse true/on/false/off. (#3025)
187
188 ## 22.3.0
189
190 ### Preview style
191
192 - Code cell separators `#%%` are now standardised to `# %%` (#2919)
193 - Remove unnecessary parentheses from `except` statements (#2939)
194 - Remove unnecessary parentheses from tuple unpacking in `for` loops (#2945)
195 - Avoid magic-trailing-comma in single-element subscripts (#2942)
196
197 ### Configuration
198
199 - Do not format `__pypackages__` directories by default (#2836)
200 - Add support for specifying stable version with `--required-version` (#2832).
201 - Avoid crashing when the user has no homedir (#2814)
202 - Avoid crashing when md5 is not available (#2905)
203 - Fix handling of directory junctions on Windows (#2904)
204
205 ### Documentation
206
207 - Update pylint config documentation (#2931)
208
209 ### Integrations
210
211 - Move test to disable plugin in Vim/Neovim, which speeds up loading (#2896)
212
213 ### Output
214
215 - In verbose mode, log when _Black_ is using user-level config (#2861)
216
217 ### Packaging
218
219 - Fix Black to work with Click 8.1.0 (#2966)
220 - On Python 3.11 and newer, use the standard library's `tomllib` instead of `tomli`
221   (#2903)
222 - `black-primer`, the deprecated internal devtool, has been removed and copied to a
223   [separate repository](https://github.com/cooperlees/black-primer) (#2924)
224
225 ### Parser
226
227 - Black can now parse starred expressions in the target of `for` and `async for`
228   statements, e.g `for item in *items_1, *items_2: pass` (#2879).
229
230 ## 22.1.0
231
232 At long last, _Black_ is no longer a beta product! This is the first non-beta release
233 and the first release covered by our new
234 [stability policy](https://black.readthedocs.io/en/stable/the_black_code_style/index.html#stability-policy).
235
236 ### Highlights
237
238 - **Remove Python 2 support** (#2740)
239 - Introduce the `--preview` flag (#2752)
240
241 ### Style
242
243 - Deprecate `--experimental-string-processing` and move the functionality under
244   `--preview` (#2789)
245 - For stubs, one blank line between class attributes and methods is now kept if there's
246   at least one pre-existing blank line (#2736)
247 - Black now normalizes string prefix order (#2297)
248 - Remove spaces around power operators if both operands are simple (#2726)
249 - Work around bug that causes unstable formatting in some cases in the presence of the
250   magic trailing comma (#2807)
251 - Use parentheses for attribute access on decimal float and int literals (#2799)
252 - Don't add whitespace for attribute access on hexadecimal, binary, octal, and complex
253   literals (#2799)
254 - Treat blank lines in stubs the same inside top-level `if` statements (#2820)
255 - Fix unstable formatting with semicolons and arithmetic expressions (#2817)
256 - Fix unstable formatting around magic trailing comma (#2572)
257
258 ### Parser
259
260 - Fix mapping cases that contain as-expressions, like `case {"key": 1 | 2 as password}`
261   (#2686)
262 - Fix cases that contain multiple top-level as-expressions, like `case 1 as a, 2 as b`
263   (#2716)
264 - Fix call patterns that contain as-expressions with keyword arguments, like
265   `case Foo(bar=baz as quux)` (#2749)
266 - Tuple unpacking on `return` and `yield` constructs now implies 3.8+ (#2700)
267 - Unparenthesized tuples on annotated assignments (e.g
268   `values: Tuple[int, ...] = 1, 2, 3`) now implies 3.8+ (#2708)
269 - Fix handling of standalone `match()` or `case()` when there is a trailing newline or a
270   comment inside of the parentheses. (#2760)
271 - `from __future__ import annotations` statement now implies Python 3.7+ (#2690)
272
273 ### Performance
274
275 - Speed-up the new backtracking parser about 4X in general (enabled when
276   `--target-version` is set to 3.10 and higher). (#2728)
277 - _Black_ is now compiled with [mypyc](https://github.com/mypyc/mypyc) for an overall 2x
278   speed-up. 64-bit Windows, MacOS, and Linux (not including musl) are supported. (#1009,
279   #2431)
280
281 ### Configuration
282
283 - Do not accept bare carriage return line endings in pyproject.toml (#2408)
284 - Add configuration option (`python-cell-magics`) to format cells with custom magics in
285   Jupyter Notebooks (#2744)
286 - Allow setting custom cache directory on all platforms with environment variable
287   `BLACK_CACHE_DIR` (#2739).
288 - Enable Python 3.10+ by default, without any extra need to specify
289   `--target-version=py310`. (#2758)
290 - Make passing `SRC` or `--code` mandatory and mutually exclusive (#2804)
291
292 ### Output
293
294 - Improve error message for invalid regular expression (#2678)
295 - Improve error message when parsing fails during AST safety check by embedding the
296   underlying SyntaxError (#2693)
297 - No longer color diff headers white as it's unreadable in light themed terminals
298   (#2691)
299 - Text coloring added in the final statistics (#2712)
300 - Verbose mode also now describes how a project root was discovered and which paths will
301   be formatted. (#2526)
302
303 ### Packaging
304
305 - All upper version bounds on dependencies have been removed (#2718)
306 - `typing-extensions` is no longer a required dependency in Python 3.10+ (#2772)
307 - Set `click` lower bound to `8.0.0` (#2791)
308
309 ### Integrations
310
311 - Update GitHub action to support containerized runs (#2748)
312
313 ### Documentation
314
315 - Change protocol in pip installation instructions to `https://` (#2761)
316 - Change HTML theme to Furo primarily for its responsive design and mobile support
317   (#2793)
318 - Deprecate the `black-primer` tool (#2809)
319 - Document Python support policy (#2819)
320
321 ## 21.12b0
322
323 ### _Black_
324
325 - Fix determination of f-string expression spans (#2654)
326 - Fix bad formatting of error messages about EOF in multi-line statements (#2343)
327 - Functions and classes in blocks now have more consistent surrounding spacing (#2472)
328
329 #### Jupyter Notebook support
330
331 - Cell magics are now only processed if they are known Python cell magics. Earlier, all
332   cell magics were tokenized, leading to possible indentation errors e.g. with
333   `%%writefile`. (#2630)
334 - Fix assignment to environment variables in Jupyter Notebooks (#2642)
335
336 #### Python 3.10 support
337
338 - Point users to using `--target-version py310` if we detect 3.10-only syntax (#2668)
339 - Fix `match` statements with open sequence subjects, like `match a, b:` or
340   `match a, *b:` (#2639) (#2659)
341 - Fix `match`/`case` statements that contain `match`/`case` soft keywords multiple
342   times, like `match re.match()` (#2661)
343 - Fix `case` statements with an inline body (#2665)
344 - Fix styling of starred expressions inside `match` subject (#2667)
345 - Fix parser error location on invalid syntax in a `match` statement (#2649)
346 - Fix Python 3.10 support on platforms without ProcessPoolExecutor (#2631)
347 - Improve parsing performance on code that uses `match` under `--target-version py310`
348   up to ~50% (#2670)
349
350 ### Packaging
351
352 - Remove dependency on `regex` (#2644) (#2663)
353
354 ## 21.11b1
355
356 ### _Black_
357
358 - Bumped regex version minimum to 2021.4.4 to fix Pattern class usage (#2621)
359
360 ## 21.11b0
361
362 ### _Black_
363
364 - Warn about Python 2 deprecation in more cases by improving Python 2 only syntax
365   detection (#2592)
366 - Add experimental PyPy support (#2559)
367 - Add partial support for the match statement. As it's experimental, it's only enabled
368   when `--target-version py310` is explicitly specified (#2586)
369 - Add support for parenthesized with (#2586)
370 - Declare support for Python 3.10 for running Black (#2562)
371
372 ### Integrations
373
374 - Fixed vim plugin with Python 3.10 by removing deprecated distutils import (#2610)
375 - The vim plugin now parses `skip_magic_trailing_comma` from pyproject.toml (#2613)
376
377 ## 21.10b0
378
379 ### _Black_
380
381 - Document stability policy, that will apply for non-beta releases (#2529)
382 - Add new `--workers` parameter (#2514)
383 - Fixed feature detection for positional-only arguments in lambdas (#2532)
384 - Bumped typed-ast version minimum to 1.4.3 for 3.10 compatibility (#2519)
385 - Fixed a Python 3.10 compatibility issue where the loop argument was still being passed
386   even though it has been removed (#2580)
387 - Deprecate Python 2 formatting support (#2523)
388
389 ### _Blackd_
390
391 - Remove dependency on aiohttp-cors (#2500)
392 - Bump required aiohttp version to 3.7.4 (#2509)
393
394 ### _Black-Primer_
395
396 - Add primer support for --projects (#2555)
397 - Print primer summary after individual failures (#2570)
398
399 ### Integrations
400
401 - Allow to pass `target_version` in the vim plugin (#1319)
402 - Install build tools in docker file and use multi-stage build to keep the image size
403   down (#2582)
404
405 ## 21.9b0
406
407 ### Packaging
408
409 - Fix missing modules in self-contained binaries (#2466)
410 - Fix missing toml extra used during installation (#2475)
411
412 ## 21.8b0
413
414 ### _Black_
415
416 - Add support for formatting Jupyter Notebook files (#2357)
417 - Move from `appdirs` dependency to `platformdirs` (#2375)
418 - Present a more user-friendly error if .gitignore is invalid (#2414)
419 - The failsafe for accidentally added backslashes in f-string expressions has been
420   hardened to handle more edge cases during quote normalization (#2437)
421 - Avoid changing a function return type annotation's type to a tuple by adding a
422   trailing comma (#2384)
423 - Parsing support has been added for unparenthesized walruses in set literals, set
424   comprehensions, and indices (#2447).
425 - Pin `setuptools-scm` build-time dependency version (#2457)
426 - Exclude typing-extensions version 3.10.0.1 due to it being broken on Python 3.10
427   (#2460)
428
429 ### _Blackd_
430
431 - Replace sys.exit(-1) with raise ImportError as it plays more nicely with tools that
432   scan installed packages (#2440)
433
434 ### Integrations
435
436 - The provided pre-commit hooks no longer specify `language_version` to avoid overriding
437   `default_language_version` (#2430)
438
439 ## 21.7b0
440
441 ### _Black_
442
443 - Configuration files using TOML features higher than spec v0.5.0 are now supported
444   (#2301)
445 - Add primer support and test for code piped into black via STDIN (#2315)
446 - Fix internal error when `FORCE_OPTIONAL_PARENTHESES` feature is enabled (#2332)
447 - Accept empty stdin (#2346)
448 - Provide a more useful error when parsing fails during AST safety checks (#2304)
449
450 ### Docker
451
452 - Add new `latest_release` tag automation to follow latest black release on docker
453   images (#2374)
454
455 ### Integrations
456
457 - The vim plugin now searches upwards from the directory containing the current buffer
458   instead of the current working directory for pyproject.toml. (#1871)
459 - The vim plugin now reads the correct string normalization option in pyproject.toml
460   (#1869)
461 - The vim plugin no longer crashes Black when there's boolean values in pyproject.toml
462   (#1869)
463
464 ## 21.6b0
465
466 ### _Black_
467
468 - Fix failure caused by `fmt: skip` and indentation (#2281)
469 - Account for += assignment when deciding whether to split string (#2312)
470 - Correct max string length calculation when there are string operators (#2292)
471 - Fixed option usage when using the `--code` flag (#2259)
472 - Do not call `uvloop.install()` when _Black_ is used as a library (#2303)
473 - Added `--required-version` option to require a specific version to be running (#2300)
474 - Fix incorrect custom breakpoint indices when string group contains fake f-strings
475   (#2311)
476 - Fix regression where `R` prefixes would be lowercased for docstrings (#2285)
477 - Fix handling of named escapes (`\N{...}`) when `--experimental-string-processing` is
478   used (#2319)
479
480 ### Integrations
481
482 - The official Black action now supports choosing what version to use, and supports the
483   major 3 OSes. (#1940)
484
485 ## 21.5b2
486
487 ### _Black_
488
489 - A space is no longer inserted into empty docstrings (#2249)
490 - Fix handling of .gitignore files containing non-ASCII characters on Windows (#2229)
491 - Respect `.gitignore` files in all levels, not only `root/.gitignore` file (apply
492   `.gitignore` rules like `git` does) (#2225)
493 - Restored compatibility with Click 8.0 on Python 3.6 when LANG=C used (#2227)
494 - Add extra uvloop install + import support if in python env (#2258)
495 - Fix --experimental-string-processing crash when matching parens are not found (#2283)
496 - Make sure to split lines that start with a string operator (#2286)
497 - Fix regular expression that black uses to identify f-expressions (#2287)
498
499 ### _Blackd_
500
501 - Add a lower bound for the `aiohttp-cors` dependency. Only 0.4.0 or higher is
502   supported. (#2231)
503
504 ### Packaging
505
506 - Release self-contained x86_64 MacOS binaries as part of the GitHub release pipeline
507   (#2198)
508 - Always build binaries with the latest available Python (#2260)
509
510 ### Documentation
511
512 - Add discussion of magic comments to FAQ page (#2272)
513 - `--experimental-string-processing` will be enabled by default in the future (#2273)
514 - Fix typos discovered by codespell (#2228)
515 - Fix Vim plugin installation instructions. (#2235)
516 - Add new Frequently Asked Questions page (#2247)
517 - Fix encoding + symlink issues preventing proper build on Windows (#2262)
518
519 ## 21.5b1
520
521 ### _Black_
522
523 - Refactor `src/black/__init__.py` into many files (#2206)
524
525 ### Documentation
526
527 - Replaced all remaining references to the
528   [`master`](https://github.com/psf/black/tree/main) branch with the
529   [`main`](https://github.com/psf/black/tree/main) branch. Some additional changes in
530   the source code were also made. (#2210)
531 - Sigificantly reorganized the documentation to make much more sense. Check them out by
532   heading over to [the stable docs on RTD](https://black.readthedocs.io/en/stable/).
533   (#2174)
534
535 ## 21.5b0
536
537 ### _Black_
538
539 - Set `--pyi` mode if `--stdin-filename` ends in `.pyi` (#2169)
540 - Stop detecting target version as Python 3.9+ with pre-PEP-614 decorators that are
541   being called but with no arguments (#2182)
542
543 ### _Black-Primer_
544
545 - Add `--no-diff` to black-primer to suppress formatting changes (#2187)
546
547 ## 21.4b2
548
549 ### _Black_
550
551 - Fix crash if the user configuration directory is inaccessible. (#2158)
552
553 - Clarify
554   [circumstances](https://github.com/psf/black/blob/master/docs/the_black_code_style.md#pragmatism)
555   in which _Black_ may change the AST (#2159)
556
557 - Allow `.gitignore` rules to be overridden by specifying `exclude` in `pyproject.toml`
558   or on the command line. (#2170)
559
560 ### _Packaging_
561
562 - Install `primer.json` (used by `black-primer` by default) with black. (#2154)
563
564 ## 21.4b1
565
566 ### _Black_
567
568 - Fix crash on docstrings ending with "\\ ". (#2142)
569
570 - Fix crash when atypical whitespace is cleaned out of dostrings (#2120)
571
572 - Reflect the `--skip-magic-trailing-comma` and `--experimental-string-processing` flags
573   in the name of the cache file. Without this fix, changes in these flags would not take
574   effect if the cache had already been populated. (#2131)
575
576 - Don't remove necessary parentheses from assignment expression containing assert /
577   return statements. (#2143)
578
579 ### _Packaging_
580
581 - Bump pathspec to >= 0.8.1 to solve invalid .gitignore exclusion handling
582
583 ## 21.4b0
584
585 ### _Black_
586
587 - Fixed a rare but annoying formatting instability created by the combination of
588   optional trailing commas inserted by `Black` and optional parentheses looking at
589   pre-existing "magic" trailing commas. This fixes issue #1629 and all of its many many
590   duplicates. (#2126)
591
592 - `Black` now processes one-line docstrings by stripping leading and trailing spaces,
593   and adding a padding space when needed to break up """". (#1740)
594
595 - `Black` now cleans up leading non-breaking spaces in comments (#2092)
596
597 - `Black` now respects `--skip-string-normalization` when normalizing multiline
598   docstring quotes (#1637)
599
600 - `Black` no longer removes all empty lines between non-function code and decorators
601   when formatting typing stubs. Now `Black` enforces a single empty line. (#1646)
602
603 - `Black` no longer adds an incorrect space after a parenthesized assignment expression
604   in if/while statements (#1655)
605
606 - Added `--skip-magic-trailing-comma` / `-C` to avoid using trailing commas as a reason
607   to split lines (#1824)
608
609 - fixed a crash when PWD=/ on POSIX (#1631)
610
611 - fixed "I/O operation on closed file" when using --diff (#1664)
612
613 - Prevent coloured diff output being interleaved with multiple files (#1673)
614
615 - Added support for PEP 614 relaxed decorator syntax on python 3.9 (#1711)
616
617 - Added parsing support for unparenthesized tuples and yield expressions in annotated
618   assignments (#1835)
619
620 - added `--extend-exclude` argument (PR #2005)
621
622 - speed up caching by avoiding pathlib (#1950)
623
624 - `--diff` correctly indicates when a file doesn't end in a newline (#1662)
625
626 - Added `--stdin-filename` argument to allow stdin to respect `--force-exclude` rules
627   (#1780)
628
629 - Lines ending with `fmt: skip` will now be not formatted (#1800)
630
631 - PR #2053: Black no longer relies on typed-ast for Python 3.8 and higher
632
633 - PR #2053: Python 2 support is now optional, install with
634   `python3 -m pip install black[python2]` to maintain support.
635
636 - Exclude `venv` directory by default (#1683)
637
638 - Fixed "Black produced code that is not equivalent to the source" when formatting
639   Python 2 docstrings (#2037)
640
641 ### _Packaging_
642
643 - Self-contained native _Black_ binaries are now provided for releases via GitHub
644   Releases (#1743)
645
646 ## 20.8b1
647
648 ### _Packaging_
649
650 - explicitly depend on Click 7.1.2 or newer as `Black` no longer works with versions
651   older than 7.0
652
653 ## 20.8b0
654
655 ### _Black_
656
657 - re-implemented support for explicit trailing commas: now it works consistently within
658   any bracket pair, including nested structures (#1288 and duplicates)
659
660 - `Black` now reindents docstrings when reindenting code around it (#1053)
661
662 - `Black` now shows colored diffs (#1266)
663
664 - `Black` is now packaged using 'py3' tagged wheels (#1388)
665
666 - `Black` now supports Python 3.8 code, e.g. star expressions in return statements
667   (#1121)
668
669 - `Black` no longer normalizes capital R-string prefixes as those have a
670   community-accepted meaning (#1244)
671
672 - `Black` now uses exit code 2 when specified configuration file doesn't exit (#1361)
673
674 - `Black` now works on AWS Lambda (#1141)
675
676 - added `--force-exclude` argument (#1032)
677
678 - removed deprecated `--py36` option (#1236)
679
680 - fixed `--diff` output when EOF is encountered (#526)
681
682 - fixed `# fmt: off` handling around decorators (#560)
683
684 - fixed unstable formatting with some `# type: ignore` comments (#1113)
685
686 - fixed invalid removal on organizing brackets followed by indexing (#1575)
687
688 - introduced `black-primer`, a CI tool that allows us to run regression tests against
689   existing open source users of Black (#1402)
690
691 - introduced property-based fuzzing to our test suite based on Hypothesis and
692   Hypothersmith (#1566)
693
694 - implemented experimental and disabled by default long string rewrapping (#1132),
695   hidden under a `--experimental-string-processing` flag while it's being worked on;
696   this is an undocumented and unsupported feature, you lose Internet points for
697   depending on it (#1609)
698
699 ### Vim plugin
700
701 - prefer virtualenv packages over global packages (#1383)
702
703 ## 19.10b0
704
705 - added support for PEP 572 assignment expressions (#711)
706
707 - added support for PEP 570 positional-only arguments (#943)
708
709 - added support for async generators (#593)
710
711 - added support for pre-splitting collections by putting an explicit trailing comma
712   inside (#826)
713
714 - added `black -c` as a way to format code passed from the command line (#761)
715
716 - --safe now works with Python 2 code (#840)
717
718 - fixed grammar selection for Python 2-specific code (#765)
719
720 - fixed feature detection for trailing commas in function definitions and call sites
721   (#763)
722
723 - `# fmt: off`/`# fmt: on` comment pairs placed multiple times within the same block of
724   code now behave correctly (#1005)
725
726 - _Black_ no longer crashes on Windows machines with more than 61 cores (#838)
727
728 - _Black_ no longer crashes on standalone comments prepended with a backslash (#767)
729
730 - _Black_ no longer crashes on `from` ... `import` blocks with comments (#829)
731
732 - _Black_ no longer crashes on Python 3.7 on some platform configurations (#494)
733
734 - _Black_ no longer fails on comments in from-imports (#671)
735
736 - _Black_ no longer fails when the file starts with a backslash (#922)
737
738 - _Black_ no longer merges regular comments with type comments (#1027)
739
740 - _Black_ no longer splits long lines that contain type comments (#997)
741
742 - removed unnecessary parentheses around `yield` expressions (#834)
743
744 - added parentheses around long tuples in unpacking assignments (#832)
745
746 - added parentheses around complex powers when they are prefixed by a unary operator
747   (#646)
748
749 - fixed bug that led _Black_ format some code with a line length target of 1 (#762)
750
751 - _Black_ no longer introduces quotes in f-string subexpressions on string boundaries
752   (#863)
753
754 - if _Black_ puts parenthesis around a single expression, it moves comments to the
755   wrapped expression instead of after the brackets (#872)
756
757 - `blackd` now returns the version of _Black_ in the response headers (#1013)
758
759 - `blackd` can now output the diff of formats on source code when the `X-Diff` header is
760   provided (#969)
761
762 ## 19.3b0
763
764 - new option `--target-version` to control which Python versions _Black_-formatted code
765   should target (#618)
766
767 - deprecated `--py36` (use `--target-version=py36` instead) (#724)
768
769 - _Black_ no longer normalizes numeric literals to include `_` separators (#696)
770
771 - long `del` statements are now split into multiple lines (#698)
772
773 - type comments are no longer mangled in function signatures
774
775 - improved performance of formatting deeply nested data structures (#509)
776
777 - _Black_ now properly formats multiple files in parallel on Windows (#632)
778
779 - _Black_ now creates cache files atomically which allows it to be used in parallel
780   pipelines (like `xargs -P8`) (#673)
781
782 - _Black_ now correctly indents comments in files that were previously formatted with
783   tabs (#262)
784
785 - `blackd` now supports CORS (#622)
786
787 ## 18.9b0
788
789 - numeric literals are now formatted by _Black_ (#452, #461, #464, #469):
790
791   - numeric literals are normalized to include `_` separators on Python 3.6+ code
792
793   - added `--skip-numeric-underscore-normalization` to disable the above behavior and
794     leave numeric underscores as they were in the input
795
796   - code with `_` in numeric literals is recognized as Python 3.6+
797
798   - most letters in numeric literals are lowercased (e.g., in `1e10`, `0x01`)
799
800   - hexadecimal digits are always uppercased (e.g. `0xBADC0DE`)
801
802 - added `blackd`, see
803   [its documentation](https://github.com/psf/black/blob/18.9b0/README.md#blackd) for
804   more info (#349)
805
806 - adjacent string literals are now correctly split into multiple lines (#463)
807
808 - trailing comma is now added to single imports that don't fit on a line (#250)
809
810 - cache is now populated when `--check` is successful for a file which speeds up
811   consecutive checks of properly formatted unmodified files (#448)
812
813 - whitespace at the beginning of the file is now removed (#399)
814
815 - fixed mangling [pweave](http://mpastell.com/pweave/) and
816   [Spyder IDE](https://www.spyder-ide.org/) special comments (#532)
817
818 - fixed unstable formatting when unpacking big tuples (#267)
819
820 - fixed parsing of `__future__` imports with renames (#389)
821
822 - fixed scope of `# fmt: off` when directly preceding `yield` and other nodes (#385)
823
824 - fixed formatting of lambda expressions with default arguments (#468)
825
826 - fixed `async for` statements: _Black_ no longer breaks them into separate lines (#372)
827
828 - note: the Vim plugin stopped registering `,=` as a default chord as it turned out to
829   be a bad idea (#415)
830
831 ## 18.6b4
832
833 - hotfix: don't freeze when multiple comments directly precede `# fmt: off` (#371)
834
835 ## 18.6b3
836
837 - typing stub files (`.pyi`) now have blank lines added after constants (#340)
838
839 - `# fmt: off` and `# fmt: on` are now much more dependable:
840
841   - they now work also within bracket pairs (#329)
842
843   - they now correctly work across function/class boundaries (#335)
844
845   - they now work when an indentation block starts with empty lines or misaligned
846     comments (#334)
847
848 - made Click not fail on invalid environments; note that Click is right but the
849   likelihood we'll need to access non-ASCII file paths when dealing with Python source
850   code is low (#277)
851
852 - fixed improper formatting of f-strings with quotes inside interpolated expressions
853   (#322)
854
855 - fixed unnecessary slowdown when long list literals where found in a file
856
857 - fixed unnecessary slowdown on AST nodes with very many siblings
858
859 - fixed cannibalizing backslashes during string normalization
860
861 - fixed a crash due to symbolic links pointing outside of the project directory (#338)
862
863 ## 18.6b2
864
865 - added `--config` (#65)
866
867 - added `-h` equivalent to `--help` (#316)
868
869 - fixed improper unmodified file caching when `-S` was used
870
871 - fixed extra space in string unpacking (#305)
872
873 - fixed formatting of empty triple quoted strings (#313)
874
875 - fixed unnecessary slowdown in comment placement calculation on lines without comments
876
877 ## 18.6b1
878
879 - hotfix: don't output human-facing information on stdout (#299)
880
881 - hotfix: don't output cake emoji on non-zero return code (#300)
882
883 ## 18.6b0
884
885 - added `--include` and `--exclude` (#270)
886
887 - added `--skip-string-normalization` (#118)
888
889 - added `--verbose` (#283)
890
891 - the header output in `--diff` now actually conforms to the unified diff spec
892
893 - fixed long trivial assignments being wrapped in unnecessary parentheses (#273)
894
895 - fixed unnecessary parentheses when a line contained multiline strings (#232)
896
897 - fixed stdin handling not working correctly if an old version of Click was used (#276)
898
899 - _Black_ now preserves line endings when formatting a file in place (#258)
900
901 ## 18.5b1
902
903 - added `--pyi` (#249)
904
905 - added `--py36` (#249)
906
907 - Python grammar pickle caches are stored with the formatting caches, making _Black_
908   work in environments where site-packages is not user-writable (#192)
909
910 - _Black_ now enforces a PEP 257 empty line after a class-level docstring (and/or
911   fields) and the first method
912
913 - fixed invalid code produced when standalone comments were present in a trailer that
914   was omitted from line splitting on a large expression (#237)
915
916 - fixed optional parentheses being removed within `# fmt: off` sections (#224)
917
918 - fixed invalid code produced when stars in very long imports were incorrectly wrapped
919   in optional parentheses (#234)
920
921 - fixed unstable formatting when inline comments were moved around in a trailer that was
922   omitted from line splitting on a large expression (#238)
923
924 - fixed extra empty line between a class declaration and the first method if no class
925   docstring or fields are present (#219)
926
927 - fixed extra empty line between a function signature and an inner function or inner
928   class (#196)
929
930 ## 18.5b0
931
932 - call chains are now formatted according to the
933   [fluent interfaces](https://en.wikipedia.org/wiki/Fluent_interface) style (#67)
934
935 - data structure literals (tuples, lists, dictionaries, and sets) are now also always
936   exploded like imports when they don't fit in a single line (#152)
937
938 - slices are now formatted according to PEP 8 (#178)
939
940 - parentheses are now also managed automatically on the right-hand side of assignments
941   and return statements (#140)
942
943 - math operators now use their respective priorities for delimiting multiline
944   expressions (#148)
945
946 - optional parentheses are now omitted on expressions that start or end with a bracket
947   and only contain a single operator (#177)
948
949 - empty parentheses in a class definition are now removed (#145, #180)
950
951 - string prefixes are now standardized to lowercase and `u` is removed on Python 3.6+
952   only code and Python 2.7+ code with the `unicode_literals` future import (#188, #198,
953   #199)
954
955 - typing stub files (`.pyi`) are now formatted in a style that is consistent with PEP
956   484 (#207, #210)
957
958 - progress when reformatting many files is now reported incrementally
959
960 - fixed trailers (content with brackets) being unnecessarily exploded into their own
961   lines after a dedented closing bracket (#119)
962
963 - fixed an invalid trailing comma sometimes left in imports (#185)
964
965 - fixed non-deterministic formatting when multiple pairs of removable parentheses were
966   used (#183)
967
968 - fixed multiline strings being unnecessarily wrapped in optional parentheses in long
969   assignments (#215)
970
971 - fixed not splitting long from-imports with only a single name
972
973 - fixed Python 3.6+ file discovery by also looking at function calls with unpacking.
974   This fixed non-deterministic formatting if trailing commas where used both in function
975   signatures with stars and function calls with stars but the former would be
976   reformatted to a single line.
977
978 - fixed crash on dealing with optional parentheses (#193)
979
980 - fixed "is", "is not", "in", and "not in" not considered operators for splitting
981   purposes
982
983 - fixed crash when dead symlinks where encountered
984
985 ## 18.4a4
986
987 - don't populate the cache on `--check` (#175)
988
989 ## 18.4a3
990
991 - added a "cache"; files already reformatted that haven't changed on disk won't be
992   reformatted again (#109)
993
994 - `--check` and `--diff` are no longer mutually exclusive (#149)
995
996 - generalized star expression handling, including double stars; this fixes
997   multiplication making expressions "unsafe" for trailing commas (#132)
998
999 - _Black_ no longer enforces putting empty lines behind control flow statements (#90)
1000
1001 - _Black_ now splits imports like "Mode 3 + trailing comma" of isort (#127)
1002
1003 - fixed comment indentation when a standalone comment closes a block (#16, #32)
1004
1005 - fixed standalone comments receiving extra empty lines if immediately preceding a
1006   class, def, or decorator (#56, #154)
1007
1008 - fixed `--diff` not showing entire path (#130)
1009
1010 - fixed parsing of complex expressions after star and double stars in function calls
1011   (#2)
1012
1013 - fixed invalid splitting on comma in lambda arguments (#133)
1014
1015 - fixed missing splits of ternary expressions (#141)
1016
1017 ## 18.4a2
1018
1019 - fixed parsing of unaligned standalone comments (#99, #112)
1020
1021 - fixed placement of dictionary unpacking inside dictionary literals (#111)
1022
1023 - Vim plugin now works on Windows, too
1024
1025 - fixed unstable formatting when encountering unnecessarily escaped quotes in a string
1026   (#120)
1027
1028 ## 18.4a1
1029
1030 - added `--quiet` (#78)
1031
1032 - added automatic parentheses management (#4)
1033
1034 - added [pre-commit](https://pre-commit.com) integration (#103, #104)
1035
1036 - fixed reporting on `--check` with multiple files (#101, #102)
1037
1038 - fixed removing backslash escapes from raw strings (#100, #105)
1039
1040 ## 18.4a0
1041
1042 - added `--diff` (#87)
1043
1044 - add line breaks before all delimiters, except in cases like commas, to better comply
1045   with PEP 8 (#73)
1046
1047 - standardize string literals to use double quotes (almost) everywhere (#75)
1048
1049 - fixed handling of standalone comments within nested bracketed expressions; _Black_
1050   will no longer produce super long lines or put all standalone comments at the end of
1051   the expression (#22)
1052
1053 - fixed 18.3a4 regression: don't crash and burn on empty lines with trailing whitespace
1054   (#80)
1055
1056 - fixed 18.3a4 regression: `# yapf: disable` usage as trailing comment would cause
1057   _Black_ to not emit the rest of the file (#95)
1058
1059 - when CTRL+C is pressed while formatting many files, _Black_ no longer freaks out with
1060   a flurry of asyncio-related exceptions
1061
1062 - only allow up to two empty lines on module level and only single empty lines within
1063   functions (#74)
1064
1065 ## 18.3a4
1066
1067 - `# fmt: off` and `# fmt: on` are implemented (#5)
1068
1069 - automatic detection of deprecated Python 2 forms of print statements and exec
1070   statements in the formatted file (#49)
1071
1072 - use proper spaces for complex expressions in default values of typed function
1073   arguments (#60)
1074
1075 - only return exit code 1 when --check is used (#50)
1076
1077 - don't remove single trailing commas from square bracket indexing (#59)
1078
1079 - don't omit whitespace if the previous factor leaf wasn't a math operator (#55)
1080
1081 - omit extra space in kwarg unpacking if it's the first argument (#46)
1082
1083 - omit extra space in
1084   [Sphinx auto-attribute comments](http://www.sphinx-doc.org/en/stable/ext/autodoc.html#directive-autoattribute)
1085   (#68)
1086
1087 ## 18.3a3
1088
1089 - don't remove single empty lines outside of bracketed expressions (#19)
1090
1091 - added ability to pipe formatting from stdin to stdin (#25)
1092
1093 - restored ability to format code with legacy usage of `async` as a name (#20, #42)
1094
1095 - even better handling of numpy-style array indexing (#33, again)
1096
1097 ## 18.3a2
1098
1099 - changed positioning of binary operators to occur at beginning of lines instead of at
1100   the end, following
1101   [a recent change to PEP 8](https://github.com/python/peps/commit/c59c4376ad233a62ca4b3a6060c81368bd21e85b)
1102   (#21)
1103
1104 - ignore empty bracket pairs while splitting. This avoids very weirdly looking
1105   formattings (#34, #35)
1106
1107 - remove a trailing comma if there is a single argument to a call
1108
1109 - if top level functions were separated by a comment, don't put four empty lines after
1110   the upper function
1111
1112 - fixed unstable formatting of newlines with imports
1113
1114 - fixed unintentional folding of post scriptum standalone comments into last statement
1115   if it was a simple statement (#18, #28)
1116
1117 - fixed missing space in numpy-style array indexing (#33)
1118
1119 - fixed spurious space after star-based unary expressions (#31)
1120
1121 ## 18.3a1
1122
1123 - added `--check`
1124
1125 - only put trailing commas in function signatures and calls if it's safe to do so. If
1126   the file is Python 3.6+ it's always safe, otherwise only safe if there are no `*args`
1127   or `**kwargs` used in the signature or call. (#8)
1128
1129 - fixed invalid spacing of dots in relative imports (#6, #13)
1130
1131 - fixed invalid splitting after comma on unpacked variables in for-loops (#23)
1132
1133 - fixed spurious space in parenthesized set expressions (#7)
1134
1135 - fixed spurious space after opening parentheses and in default arguments (#14, #17)
1136
1137 - fixed spurious space after unary operators when the operand was a complex expression
1138   (#15)
1139
1140 ## 18.3a0
1141
1142 - first published version, Happy 🍰 Day 2018!
1143
1144 - alpha quality
1145
1146 - date-versioned (see: <https://calver.org/>)