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

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