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

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