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

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