]> 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:

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