--- /dev/null
+[//]: # "NOTE: THIS FILE WAS AUTOGENERATED FROM README.md"
+
+# Authors
+
+Glued together by [Łukasz Langa](mailto:lukasz@langa.pl).
+
+Maintained with [Carol Willing](mailto:carolcode@willingconsulting.com),
+[Carl Meyer](mailto:carl@oddbird.net),
+[Jelle Zijlstra](mailto:jelle.zijlstra@gmail.com),
+[Mika Naylor](mailto:mail@autophagy.io),
+[Zsolt Dollenstein](mailto:zsol.zsol@gmail.com), and
+[Cooper Lees](mailto:me@cooperlees.com).
+
+Multiple contributions by:
+
+- [Abdur-Rahmaan Janhangeer](mailto:arj.python@gmail.com)
+- [Adam Johnson](mailto:me@adamj.eu)
+- [Adam Williamson](mailto:adamw@happyassassin.net)
+- [Alexander Huynh](mailto:github@grande.coffee)
+- [Alex Vandiver](mailto:github@chmrr.net)
+- [Allan Simon](mailto:allan.simon@supinfo.com)
+- Anders-Petter Ljungquist
+- [Andrew Thorp](mailto:andrew.thorp.dev@gmail.com)
+- [Andrew Zhou](mailto:andrewfzhou@gmail.com)
+- [Andrey](mailto:dyuuus@yandex.ru)
+- [Andy Freeland](mailto:andy@andyfreeland.net)
+- [Anthony Sottile](mailto:asottile@umich.edu)
+- [Arjaan Buijk](mailto:arjaan.buijk@gmail.com)
+- [Arnav Borbornah](mailto:arnavborborah11@gmail.com)
+- [Artem Malyshev](mailto:proofit404@gmail.com)
+- [Asger Hautop Drewsen](mailto:asgerdrewsen@gmail.com)
+- [Augie Fackler](mailto:raf@durin42.com)
+- [Aviskar KC](mailto:aviskarkc10@gmail.com)
+- Batuhan Taşkaya
+- [Benjamin Wohlwend](mailto:bw@piquadrat.ch)
+- [Benjamin Woodruff](mailto:github@benjam.info)
+- [Bharat Raghunathan](mailto:bharatraghunthan9767@gmail.com)
+- [Brandt Bucher](mailto:brandtbucher@gmail.com)
+- [Brett Cannon](mailto:brett@python.org)
+- [Bryan Bugyi](mailto:bryan.bugyi@rutgers.edu)
+- [Bryan Forbes](mailto:bryan@reigndropsfall.net)
+- [Calum Lind](mailto:calumlind@gmail.com)
+- [Charles](mailto:peacech@gmail.com)
+- Charles Reid
+- [Christian Clauss](mailto:cclauss@bluewin.ch)
+- [Christian Heimes](mailto:christian@python.org)
+- [Chuck Wooters](mailto:chuck.wooters@microsoft.com)
+- [Chris Rose](mailto:offline@offby1.net)
+- Codey Oxley
+- [Cong](mailto:congusbongus@gmail.com)
+- [Cooper Ry Lees](mailto:me@cooperlees.com)
+- [Dan Davison](mailto:dandavison7@gmail.com)
+- [Daniel Hahler](mailto:github@thequod.de)
+- [Daniel M. Capella](mailto:polycitizen@gmail.com)
+- Daniele Esposti
+- [David Hotham](mailto:david.hotham@metaswitch.com)
+- [David Lukes](mailto:dafydd.lukes@gmail.com)
+- [David Szotten](mailto:davidszotten@gmail.com)
+- [Denis Laxalde](mailto:denis@laxalde.org)
+- [Douglas Thor](mailto:dthor@transphormusa.com)
+- dylanjblack
+- [Eli Treuherz](mailto:eli@treuherz.com)
+- [Emil Hessman](mailto:emil@hessman.se)
+- [Felix Kohlgrüber](mailto:felix.kohlgrueber@gmail.com)
+- [Florent Thiery](mailto:fthiery@gmail.com)
+- Francisco
+- [Giacomo Tagliabue](mailto:giacomo.tag@gmail.com)
+- [Greg Gandenberger](mailto:ggandenberger@shoprunner.com)
+- [Gregory P. Smith](mailto:greg@krypto.org)
+- Gustavo Camargo
+- hauntsaninja
+- [Heaford](mailto:dan@heaford.com)
+- [Hugo Barrera](mailto::hugo@barrera.io)
+- Hugo van Kemenade
+- [Hynek Schlawack](mailto:hs@ox.cx)
+- [Ivan Katanić](mailto:ivan.katanic@gmail.com)
+- [Jakub Kadlubiec](mailto:jakub.kadlubiec@skyscanner.net)
+- [Jakub Warczarek](mailto:jakub.warczarek@gmail.com)
+- [Jan Hnátek](mailto:jan.hnatek@gmail.com)
+- [Jason Fried](mailto:me@jasonfried.info)
+- [Jason Friedland](mailto:jason@friedland.id.au)
+- [jgirardet](mailto:ijkl@netc.fr)
+- Jim Brännlund
+- [Jimmy Jia](mailto:tesrin@gmail.com)
+- [Joe Antonakakis](mailto:jma353@cornell.edu)
+- [Jon Dufresne](mailto:jon.dufresne@gmail.com)
+- [Jonas Obrist](mailto:ojiidotch@gmail.com)
+- [Jonty Wareing](mailto:jonty@jonty.co.uk)
+- [Jose Nazario](mailto:jose.monkey.org@gmail.com)
+- [Joseph Larson](mailto:larson.joseph@gmail.com)
+- [Josh Bode](mailto:joshbode@fastmail.com)
+- [Josh Holland](mailto:anowlcalledjosh@gmail.com)
+- [José Padilla](mailto:jpadilla@webapplicate.com)
+- [Juan Luis Cano Rodríguez](mailto:hello@juanlu.space)
+- [kaiix](mailto:kvn.hou@gmail.com)
+- [Katie McLaughlin](mailto:katie@glasnt.com)
+- Katrin Leinweber
+- [Keith Smiley](mailto:keithbsmiley@gmail.com)
+- [Kenyon Ralph](mailto:kenyon@kenyonralph.com)
+- [Kevin Kirsche](mailto:Kev.Kirsche+GitHub@gmail.com)
+- [Kyle Hausmann](mailto:kyle.hausmann@gmail.com)
+- [Kyle Sunden](mailto:sunden@wisc.edu)
+- Lawrence Chan
+- [Linus Groh](mailto:mail@linusgroh.de)
+- [Loren Carvalho](mailto:comradeloren@gmail.com)
+- [Luka Sterbic](mailto:luka.sterbic@gmail.com)
+- [LukasDrude](mailto:mail@lukas-drude.de)
+- Mahmoud Hossam
+- Mariatta
+- [Matt VanEseltine](mailto:vaneseltine@gmail.com)
+- [Matthew Clapp](mailto:itsayellow+dev@gmail.com)
+- [Matthew Walster](mailto:matthew@walster.org)
+- Max Smolens
+- [Michael Aquilina](mailto:michaelaquilina@gmail.com)
+- [Michael Flaxman](mailto:michael.flaxman@gmail.com)
+- [Michael J. Sullivan](mailto:sully@msully.net)
+- [Michael McClimon](mailto:michael@mcclimon.org)
+- [Miguel Gaiowski](mailto:miggaiowski@gmail.com)
+- [Mike](mailto:roshi@fedoraproject.org)
+- [mikehoyio](mailto:mikehoy@gmail.com)
+- [Min ho Kim](mailto:minho42@gmail.com)
+- [Miroslav Shubernetskiy](mailto:miroslav@miki725.com)
+- MomIsBestFriend
+- [Nathan Goldbaum](mailto:ngoldbau@illinois.edu)
+- [Nathan Hunt](mailto:neighthan.hunt@gmail.com)
+- [Neraste](mailto:neraste.herr10@gmail.com)
+- [Nikolaus Waxweiler](mailto:madigens@gmail.com)
+- [Ofek Lev](mailto:ofekmeister@gmail.com)
+- [Osaetin Daniel](mailto:osaetindaniel@gmail.com)
+- [otstrel](mailto:otstrel@gmail.com)
+- [Pablo Galindo](mailto:Pablogsal@gmail.com)
+- [Paul Ganssle](mailto:p.ganssle@gmail.com)
+- [Paul Meinhardt](mailto:mnhrdt@gmail.com)
+- [Peter Bengtsson](mailto:mail@peterbe.com)
+- [Peter Stensmyr](mailto:peter.stensmyr@gmail.com)
+- pmacosta
+- [Quentin Pradet](mailto:quentin@pradet.me)
+- [Ralf Schmitt](mailto:ralf@systemexit.de)
+- [Ramón Valles](mailto:mroutis@protonmail.com)
+- [Richard Fearn](mailto:richardfearn@gmail.com)
+- Richard Si
+- [Rishikesh Jha](mailto:rishijha424@gmail.com)
+- [Rupert Bedford](mailto:rupert@rupertb.com)
+- Russell Davis
+- [Rémi Verschelde](mailto:rverschelde@gmail.com)
+- [Sami Salonen](mailto:sakki@iki.fi)
+- [Samuel Cormier-Iijima](mailto:samuel@cormier-iijima.com)
+- [Sanket Dasgupta](mailto:sanketdasgupta@gmail.com)
+- Sergi
+- [Scott Stevenson](mailto:scott@stevenson.io)
+- Shantanu
+- [shaoran](mailto:shaoran@sakuranohana.org)
+- [Shinya Fujino](mailto:shf0811@gmail.com)
+- springstan
+- [Stavros Korokithakis](mailto:hi@stavros.io)
+- [Stephen Rosen](mailto:sirosen@globus.org)
+- [Steven M. Vascellaro](mailto:S.Vascellaro@gmail.com)
+- [Sunil Kapil](mailto:snlkapil@gmail.com)
+- [Sébastien Eustace](mailto:sebastien.eustace@gmail.com)
+- [Tal Amuyal](mailto:TalAmuyal@gmail.com)
+- [Terrance](mailto:git@terrance.allofti.me)
+- [Thom Lu](mailto:thomas.c.lu@gmail.com)
+- [Thomas Grainger](mailto:tagrain@gmail.com)
+- [Tim Gates](mailto:tim.gates@iress.com)
+- [Tim Swast](mailto:swast@google.com)
+- [Timo](mailto:timo_tk@hotmail.com)
+- Toby Fleming
+- [Tom Christie](mailto:tom@tomchristie.com)
+- [Tony Narlock](mailto:tony@git-pull.com)
+- [Tsuyoshi Hombashi](mailto:tsuyoshi.hombashi@gmail.com)
+- [Tushar Chandra](mailto:tusharchandra2018@u.northwestern.edu)
+- [Tzu-ping Chung](mailto:uranusjr@gmail.com)
+- [Utsav Shah](mailto:ukshah2@illinois.edu)
+- utsav-dbx
+- vezeli
+- [Ville Skyttä](mailto:ville.skytta@iki.fi)
+- [Vishwas B Sharma](mailto:sharma.vishwas88@gmail.com)
+- [Vlad Emelianov](mailto:volshebnyi@gmail.com)
+- [williamfzc](mailto:178894043@qq.com)
+- [wouter bolsterlee](mailto:wouter@bolsterl.ee)
+- Yazdan
+- [Yngve Høiseth](mailto:yngve@hoiseth.net)
+- [Yurii Karabas](mailto:1998uriyyo@gmail.com)
--- /dev/null
+[//]: # "NOTE: THIS FILE WAS AUTOGENERATED FROM CHANGES.md"
+
+## Change Log
+
+### Unreleased
+
+#### _Black_
+
+- re-implemented support for explicit trailing commas: now it works consistently within
+ any bracket pair, including nested structures (#1288 and duplicates)
+
+- reindent docstrings when reindenting code around it (#1053)
+
+- show colored diffs (#1266)
+
+- move to 'py3' tagged wheels (#1388)
+
+- remove deprecated `--py36` option (#1236)
+
+- add `--force-exclude` argument (#1032)
+
+#### Vim plugin
+
+- prefer virtualenv packages over global packages (#1383)
+
+### 19.10b0
+
+- added support for PEP 572 assignment expressions (#711)
+
+- added support for PEP 570 positional-only arguments (#943)
+
+- added support for async generators (#593)
+
+- added support for pre-splitting collections by putting an explicit trailing comma
+ inside (#826)
+
+- added `black -c` as a way to format code passed from the command line (#761)
+
+- --safe now works with Python 2 code (#840)
+
+- fixed grammar selection for Python 2-specific code (#765)
+
+- fixed feature detection for trailing commas in function definitions and call sites
+ (#763)
+
+- `# fmt: off`/`# fmt: on` comment pairs placed multiple times within the same block of
+ code now behave correctly (#1005)
+
+- _Black_ no longer crashes on Windows machines with more than 61 cores (#838)
+
+- _Black_ no longer crashes on standalone comments prepended with a backslash (#767)
+
+- _Black_ no longer crashes on `from` ... `import` blocks with comments (#829)
+
+- _Black_ no longer crashes on Python 3.7 on some platform configurations (#494)
+
+- _Black_ no longer fails on comments in from-imports (#671)
+
+- _Black_ no longer fails when the file starts with a backslash (#922)
+
+- _Black_ no longer merges regular comments with type comments (#1027)
+
+- _Black_ no longer splits long lines that contain type comments (#997)
+
+- removed unnecessary parentheses around `yield` expressions (#834)
+
+- added parentheses around long tuples in unpacking assignments (#832)
+
+- added parentheses around complex powers when they are prefixed by a unary operator
+ (#646)
+
+- fixed bug that led _Black_ format some code with a line length target of 1 (#762)
+
+- _Black_ no longer introduces quotes in f-string subexpressions on string boundaries
+ (#863)
+
+- if _Black_ puts parenthesis around a single expression, it moves comments to the
+ wrapped expression instead of after the brackets (#872)
+
+- `blackd` now returns the version of _Black_ in the response headers (#1013)
+
+- `blackd` can now output the diff of formats on source code when the `X-Diff` header is
+ provided (#969)
+
+### 19.3b0
+
+- new option `--target-version` to control which Python versions _Black_-formatted code
+ should target (#618)
+
+- deprecated `--py36` (use `--target-version=py36` instead) (#724)
+
+- _Black_ no longer normalizes numeric literals to include `_` separators (#696)
+
+- long `del` statements are now split into multiple lines (#698)
+
+- type comments are no longer mangled in function signatures
+
+- improved performance of formatting deeply nested data structures (#509)
+
+- _Black_ now properly formats multiple files in parallel on Windows (#632)
+
+- _Black_ now creates cache files atomically which allows it to be used in parallel
+ pipelines (like `xargs -P8`) (#673)
+
+- _Black_ now correctly indents comments in files that were previously formatted with
+ tabs (#262)
+
+- `blackd` now supports CORS (#622)
+
+### 18.9b0
+
+- numeric literals are now formatted by _Black_ (#452, #461, #464, #469):
+
+ - numeric literals are normalized to include `_` separators on Python 3.6+ code
+
+ - added `--skip-numeric-underscore-normalization` to disable the above behavior and
+ leave numeric underscores as they were in the input
+
+ - code with `_` in numeric literals is recognized as Python 3.6+
+
+ - most letters in numeric literals are lowercased (e.g., in `1e10`, `0x01`)
+
+ - hexadecimal digits are always uppercased (e.g. `0xBADC0DE`)
+
+- added `blackd`, see [its documentation](#blackd) for more info (#349)
+
+- adjacent string literals are now correctly split into multiple lines (#463)
+
+- trailing comma is now added to single imports that don't fit on a line (#250)
+
+- cache is now populated when `--check` is successful for a file which speeds up
+ consecutive checks of properly formatted unmodified files (#448)
+
+- whitespace at the beginning of the file is now removed (#399)
+
+- fixed mangling [pweave](http://mpastell.com/pweave/) and
+ [Spyder IDE](https://www.spyder-ide.org/) special comments (#532)
+
+- fixed unstable formatting when unpacking big tuples (#267)
+
+- fixed parsing of `__future__` imports with renames (#389)
+
+- fixed scope of `# fmt: off` when directly preceding `yield` and other nodes (#385)
+
+- fixed formatting of lambda expressions with default arguments (#468)
+
+- fixed `async for` statements: _Black_ no longer breaks them into separate lines (#372)
+
+- note: the Vim plugin stopped registering `,=` as a default chord as it turned out to
+ be a bad idea (#415)
+
+### 18.6b4
+
+- hotfix: don't freeze when multiple comments directly precede `# fmt: off` (#371)
+
+### 18.6b3
+
+- typing stub files (`.pyi`) now have blank lines added after constants (#340)
+
+- `# fmt: off` and `# fmt: on` are now much more dependable:
+
+ - they now work also within bracket pairs (#329)
+
+ - they now correctly work across function/class boundaries (#335)
+
+ - they now work when an indentation block starts with empty lines or misaligned
+ comments (#334)
+
+- made Click not fail on invalid environments; note that Click is right but the
+ likelihood we'll need to access non-ASCII file paths when dealing with Python source
+ code is low (#277)
+
+- fixed improper formatting of f-strings with quotes inside interpolated expressions
+ (#322)
+
+- fixed unnecessary slowdown when long list literals where found in a file
+
+- fixed unnecessary slowdown on AST nodes with very many siblings
+
+- fixed cannibalizing backslashes during string normalization
+
+- fixed a crash due to symbolic links pointing outside of the project directory (#338)
+
+### 18.6b2
+
+- added `--config` (#65)
+
+- added `-h` equivalent to `--help` (#316)
+
+- fixed improper unmodified file caching when `-S` was used
+
+- fixed extra space in string unpacking (#305)
+
+- fixed formatting of empty triple quoted strings (#313)
+
+- fixed unnecessary slowdown in comment placement calculation on lines without comments
+
+### 18.6b1
+
+- hotfix: don't output human-facing information on stdout (#299)
+
+- hotfix: don't output cake emoji on non-zero return code (#300)
+
+### 18.6b0
+
+- added `--include` and `--exclude` (#270)
+
+- added `--skip-string-normalization` (#118)
+
+- added `--verbose` (#283)
+
+- the header output in `--diff` now actually conforms to the unified diff spec
+
+- fixed long trivial assignments being wrapped in unnecessary parentheses (#273)
+
+- fixed unnecessary parentheses when a line contained multiline strings (#232)
+
+- fixed stdin handling not working correctly if an old version of Click was used (#276)
+
+- _Black_ now preserves line endings when formatting a file in place (#258)
+
+### 18.5b1
+
+- added `--pyi` (#249)
+
+- added `--py36` (#249)
+
+- Python grammar pickle caches are stored with the formatting caches, making _Black_
+ work in environments where site-packages is not user-writable (#192)
+
+- _Black_ now enforces a PEP 257 empty line after a class-level docstring (and/or
+ fields) and the first method
+
+- fixed invalid code produced when standalone comments were present in a trailer that
+ was omitted from line splitting on a large expression (#237)
+
+- fixed optional parentheses being removed within `# fmt: off` sections (#224)
+
+- fixed invalid code produced when stars in very long imports were incorrectly wrapped
+ in optional parentheses (#234)
+
+- fixed unstable formatting when inline comments were moved around in a trailer that was
+ omitted from line splitting on a large expression (#238)
+
+- fixed extra empty line between a class declaration and the first method if no class
+ docstring or fields are present (#219)
+
+- fixed extra empty line between a function signature and an inner function or inner
+ class (#196)
+
+### 18.5b0
+
+- call chains are now formatted according to the
+ [fluent interfaces](https://en.wikipedia.org/wiki/Fluent_interface) style (#67)
+
+- data structure literals (tuples, lists, dictionaries, and sets) are now also always
+ exploded like imports when they don't fit in a single line (#152)
+
+- slices are now formatted according to PEP 8 (#178)
+
+- parentheses are now also managed automatically on the right-hand side of assignments
+ and return statements (#140)
+
+- math operators now use their respective priorities for delimiting multiline
+ expressions (#148)
+
+- optional parentheses are now omitted on expressions that start or end with a bracket
+ and only contain a single operator (#177)
+
+- empty parentheses in a class definition are now removed (#145, #180)
+
+- string prefixes are now standardized to lowercase and `u` is removed on Python 3.6+
+ only code and Python 2.7+ code with the `unicode_literals` future import (#188, #198,
+ #199)
+
+- typing stub files (`.pyi`) are now formatted in a style that is consistent with PEP
+ 484 (#207, #210)
+
+- progress when reformatting many files is now reported incrementally
+
+- fixed trailers (content with brackets) being unnecessarily exploded into their own
+ lines after a dedented closing bracket (#119)
+
+- fixed an invalid trailing comma sometimes left in imports (#185)
+
+- fixed non-deterministic formatting when multiple pairs of removable parentheses were
+ used (#183)
+
+- fixed multiline strings being unnecessarily wrapped in optional parentheses in long
+ assignments (#215)
+
+- fixed not splitting long from-imports with only a single name
+
+- fixed Python 3.6+ file discovery by also looking at function calls with unpacking.
+ This fixed non-deterministic formatting if trailing commas where used both in function
+ signatures with stars and function calls with stars but the former would be
+ reformatted to a single line.
+
+- fixed crash on dealing with optional parentheses (#193)
+
+- fixed "is", "is not", "in", and "not in" not considered operators for splitting
+ purposes
+
+- fixed crash when dead symlinks where encountered
+
+### 18.4a4
+
+- don't populate the cache on `--check` (#175)
+
+### 18.4a3
+
+- added a "cache"; files already reformatted that haven't changed on disk won't be
+ reformatted again (#109)
+
+- `--check` and `--diff` are no longer mutually exclusive (#149)
+
+- generalized star expression handling, including double stars; this fixes
+ multiplication making expressions "unsafe" for trailing commas (#132)
+
+- _Black_ no longer enforces putting empty lines behind control flow statements (#90)
+
+- _Black_ now splits imports like "Mode 3 + trailing comma" of isort (#127)
+
+- fixed comment indentation when a standalone comment closes a block (#16, #32)
+
+- fixed standalone comments receiving extra empty lines if immediately preceding a
+ class, def, or decorator (#56, #154)
+
+- fixed `--diff` not showing entire path (#130)
+
+- fixed parsing of complex expressions after star and double stars in function calls
+ (#2)
+
+- fixed invalid splitting on comma in lambda arguments (#133)
+
+- fixed missing splits of ternary expressions (#141)
+
+### 18.4a2
+
+- fixed parsing of unaligned standalone comments (#99, #112)
+
+- fixed placement of dictionary unpacking inside dictionary literals (#111)
+
+- Vim plugin now works on Windows, too
+
+- fixed unstable formatting when encountering unnecessarily escaped quotes in a string
+ (#120)
+
+### 18.4a1
+
+- added `--quiet` (#78)
+
+- added automatic parentheses management (#4)
+
+- added [pre-commit](https://pre-commit.com) integration (#103, #104)
+
+- fixed reporting on `--check` with multiple files (#101, #102)
+
+- fixed removing backslash escapes from raw strings (#100, #105)
+
+### 18.4a0
+
+- added `--diff` (#87)
+
+- add line breaks before all delimiters, except in cases like commas, to better comply
+ with PEP 8 (#73)
+
+- standardize string literals to use double quotes (almost) everywhere (#75)
+
+- fixed handling of standalone comments within nested bracketed expressions; _Black_
+ will no longer produce super long lines or put all standalone comments at the end of
+ the expression (#22)
+
+- fixed 18.3a4 regression: don't crash and burn on empty lines with trailing whitespace
+ (#80)
+
+- fixed 18.3a4 regression: `# yapf: disable` usage as trailing comment would cause
+ _Black_ to not emit the rest of the file (#95)
+
+- when CTRL+C is pressed while formatting many files, _Black_ no longer freaks out with
+ a flurry of asyncio-related exceptions
+
+- only allow up to two empty lines on module level and only single empty lines within
+ functions (#74)
+
+### 18.3a4
+
+- `# fmt: off` and `# fmt: on` are implemented (#5)
+
+- automatic detection of deprecated Python 2 forms of print statements and exec
+ statements in the formatted file (#49)
+
+- use proper spaces for complex expressions in default values of typed function
+ arguments (#60)
+
+- only return exit code 1 when --check is used (#50)
+
+- don't remove single trailing commas from square bracket indexing (#59)
+
+- don't omit whitespace if the previous factor leaf wasn't a math operator (#55)
+
+- omit extra space in kwarg unpacking if it's the first argument (#46)
+
+- omit extra space in
+ [Sphinx auto-attribute comments](http://www.sphinx-doc.org/en/stable/ext/autodoc.html#directive-autoattribute)
+ (#68)
+
+### 18.3a3
+
+- don't remove single empty lines outside of bracketed expressions (#19)
+
+- added ability to pipe formatting from stdin to stdin (#25)
+
+- restored ability to format code with legacy usage of `async` as a name (#20, #42)
+
+- even better handling of numpy-style array indexing (#33, again)
+
+### 18.3a2
+
+- changed positioning of binary operators to occur at beginning of lines instead of at
+ the end, following
+ [a recent change to PEP 8](https://github.com/python/peps/commit/c59c4376ad233a62ca4b3a6060c81368bd21e85b)
+ (#21)
+
+- ignore empty bracket pairs while splitting. This avoids very weirdly looking
+ formattings (#34, #35)
+
+- remove a trailing comma if there is a single argument to a call
+
+- if top level functions were separated by a comment, don't put four empty lines after
+ the upper function
+
+- fixed unstable formatting of newlines with imports
+
+- fixed unintentional folding of post scriptum standalone comments into last statement
+ if it was a simple statement (#18, #28)
+
+- fixed missing space in numpy-style array indexing (#33)
+
+- fixed spurious space after star-based unary expressions (#31)
+
+### 18.3a1
+
+- added `--check`
+
+- only put trailing commas in function signatures and calls if it's safe to do so. If
+ the file is Python 3.6+ it's always safe, otherwise only safe if there are no `*args`
+ or `**kwargs` used in the signature or call. (#8)
+
+- fixed invalid spacing of dots in relative imports (#6, #13)
+
+- fixed invalid splitting after comma on unpacked variables in for-loops (#23)
+
+- fixed spurious space in parenthesized set expressions (#7)
+
+- fixed spurious space after opening parentheses and in default arguments (#14, #17)
+
+- fixed spurious space after unary operators when the operand was a complex expression
+ (#15)
+
+### 18.3a0
+
+- first published version, Happy 🍰 Day 2018!
+
+- alpha quality
+
+- date-versioned (see: https://calver.org/)
contents = fix_headers(contents)
with open(target_path, "w", encoding="utf-8") as f:
- if section.src.suffix == ".md":
- f.write(
- "[//]: # (NOTE: THIS FILE WAS AUTOGENERATED FROM"
- f" {section.src})\n\n"
- )
+ if section.src.suffix == ".md" and section.src != target_path:
+ rel = section.src.resolve().relative_to(CURRENT_DIR.parent)
+ f.write(f'[//]: # "NOTE: THIS FILE WAS AUTOGENERATED FROM {rel}"\n\n')
f.write(contents)
processed_sections.add(section.name)
modified_files.add(target_path)
--- /dev/null
+[//]: # "NOTE: THIS FILE WAS AUTOGENERATED FROM CONTRIBUTING.md"
+
+# Contributing to _Black_
+
+Welcome! Happy to see you willing to make the project better. Have you read the entire
+[user documentation](https://black.readthedocs.io/en/latest/) yet?
+
+## Bird's eye view
+
+In terms of inspiration, _Black_ is about as configurable as _gofmt_. This is
+deliberate.
+
+Bug reports and fixes are always welcome! Please follow the
+[issue template on GitHub](https://github.com/psf/black/issues/new) for best results.
+
+Before you suggest a new feature or configuration knob, ask yourself why you want it. If
+it enables better integration with some workflow, fixes an inconsistency, speeds things
+up, and so on - go for it! On the other hand, if your answer is "because I don't like a
+particular formatting" then you're not ready to embrace _Black_ yet. Such changes are
+unlikely to get accepted. You can still try but prepare to be disappointed.
+
+## Technicalities
+
+Development on the latest version of Python is preferred. As of this writing it's 3.8.
+You can use any operating system. I am using macOS myself and CentOS at work.
+
+Install all development dependencies using:
+
+```console
+$ pipenv install --dev
+$ pipenv shell
+$ pre-commit install
+```
+
+If you haven't used `pipenv` before but are comfortable with virtualenvs, just run
+`pip install pipenv` in the virtualenv you're already using and invoke the command above
+from the cloned _Black_ repo. It will do the correct thing.
+
+Before submitting pull requests, run lints and tests with:
+
+```console
+$ pre-commit run -a
+$ python -m unittest
+$ black-primer [-k -w /tmp/black_test_repos]
+```
+
+## black-primer
+
+`black-primer` is used by CI to pull down well-known _Black_ formatted projects and see
+if we get source code changes. It will error on formatting changes or errors. Please run
+before pushing your PR to see if you get the actions you would expect from _Black_ with
+your PR. You may need to change
+[primer.json](https://github.com/psf/black/blob/master/src/black_primer/primer.json)
+configuration for it to pass.
+
+For more `black-primer` information visit the
+[documentation](https://github.com/psf/black/blob/master/docs/black_primer.md).
+
+## Hygiene
+
+If you're fixing a bug, add a test. Run it first to confirm it fails, then fix the bug,
+run it again to confirm it's really fixed.
+
+If adding a new feature, add a test. In fact, always add a test. But wait, before adding
+any large feature, first open an issue for us to discuss the idea first.
+
+## Finally
+
+Thanks again for your interest in improving the project! You're taking action when most
+people decide to sit and watch.
--- /dev/null
+[//]: # "NOTE: THIS FILE WAS AUTOGENERATED FROM README.md"
+
+# GitHub Actions
+
+Create a file named `.github/workflows/black.yml` inside your repository with:
+
+```yaml
+name: Lint
+
+on: [push, pull_request]
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-python@v2
+ - uses: psf/black@stable
+```
--- /dev/null
+[//]: # "NOTE: THIS FILE WAS AUTOGENERATED FROM README.md"
+
+# Ignoring unmodified files
+
+_Black_ remembers files it has already formatted, unless the `--diff` flag is used or
+code is passed via standard input. This information is stored per-user. The exact
+location of the file depends on the _Black_ version and the system on which _Black_ is
+run. The file is non-portable. The standard location on common operating systems is:
+
+- Windows:
+ `C:\\Users\<username>\AppData\Local\black\black\Cache\<version>\cache.<line-length>.<file-mode>.pickle`
+- macOS:
+ `/Users/<username>/Library/Caches/black/<version>/cache.<line-length>.<file-mode>.pickle`
+- Linux:
+ `/home/<username>/.cache/black/<version>/cache.<line-length>.<file-mode>.pickle`
+
+`file-mode` is an int flag that determines whether the file was formatted as 3.6+ only,
+as .pyi, and whether string normalization was omitted.
+
+To override the location of these files on macOS or Linux, set the environment variable
+`XDG_CACHE_HOME` to your preferred location. For example, if you want to put the cache
+in the directory you're running _Black_ from, set `XDG_CACHE_HOME=.cache`. _Black_ will
+then write the above files to `.cache/black/<version>/`.
--- /dev/null
+[//]: # "NOTE: THIS FILE WAS AUTOGENERATED FROM README.md"
+
+# Installation and usage
+
+## Installation
+
+_Black_ can be installed by running `pip install black`. It requires Python 3.6.0+ to
+run but you can reformat Python 2 code with it, too.
+
+### Install from GitHub
+
+If you can't wait for the latest _hotness_ and want to install from GitHub, use:
+
+`pip install git+git://github.com/psf/black`
+
+## Usage
+
+To get started right away with sensible defaults:
+
+```sh
+black {source_file_or_directory}
+```
+
+You can run _Black_ as a package if running it as a script doesn't work:
+
+```sh
+python -m black {source_file_or_directory}
+```
+
+## Command line options
+
+_Black_ doesn't provide many options. You can list them by running `black --help`:
+
+```text
+Usage: black [OPTIONS] [SRC]...
+
+ The uncompromising code formatter.
+
+Options:
+ -c, --code TEXT Format the code passed in as a string.
+ -l, --line-length INTEGER How many characters per line to allow.
+ [default: 88]
+
+ -t, --target-version [py27|py33|py34|py35|py36|py37|py38]
+ Python versions that should be supported by
+ Black's output. [default: per-file auto-
+ detection]
+
+ --pyi Format all input files like typing stubs
+ regardless of file extension (useful when
+ piping source on standard input).
+
+ -S, --skip-string-normalization
+ Don't normalize string quotes or prefixes.
+ --check Don't write the files back, just return the
+ status. Return code 0 means nothing would
+ change. Return code 1 means some files
+ would be reformatted. Return code 123 means
+ there was an internal error.
+
+ --diff Don't write the files back, just output a
+ diff for each file on stdout.
+
+ --color / --no-color Show colored diff. Only applies when
+ `--diff` is given.
+
+ --fast / --safe If --fast given, skip temporary sanity
+ checks. [default: --safe]
+
+ --include TEXT A regular expression that matches files and
+ directories that should be included on
+ recursive searches. An empty value means
+ all files are included regardless of the
+ name. Use forward slashes for directories
+ on all platforms (Windows, too). Exclusions
+ are calculated first, inclusions later.
+ [default: \.pyi?$]
+
+ --exclude TEXT A regular expression that matches files and
+ directories that should be excluded on
+ recursive searches. An empty value means no
+ paths are excluded. Use forward slashes for
+ directories on all platforms (Windows, too).
+ Exclusions are calculated first, inclusions
+ later. [default: /(\.eggs|\.git|\.hg|\.mypy
+ _cache|\.nox|\.tox|\.venv|\.svn|_build|buck-
+ out|build|dist)/]
+
+ --force-exclude TEXT Like --exclude, but files and directories
+ matching this regex will be excluded even
+ when they are passed explicitly as arguments
+
+ -q, --quiet Don't emit non-error messages to stderr.
+ Errors are still emitted; silence those with
+ 2>/dev/null.
+
+ -v, --verbose Also emit messages to stderr about files
+ that were not changed or were ignored due to
+ --exclude=.
+
+ --version Show the version and exit.
+ --config FILE Read configuration from FILE path.
+ -h, --help Show this message and exit.
+```
+
+_Black_ is a well-behaved Unix-style command-line tool:
+
+- it does nothing if no sources are passed to it;
+- it will read from standard input and write to standard output if `-` is used as the
+ filename;
+- it only outputs messages to users on standard error;
+- exits with code 0 unless an internal error occurred (or `--check` was used).
+
+## Using _Black_ with other tools
+
+While _Black_ enforces formatting that conforms to PEP 8, other tools may raise warnings
+about _Black_'s changes or will overwrite _Black_'s changes. A good example of this is
+[isort](https://pypi.org/p/isort). Since _Black_ is barely configurable, these tools
+should be configured to neither warn about nor overwrite _Black_'s changes.
+
+Actual details on _Black_ compatible configurations for various tools can be found in
+[compatible_configs](https://github.com/psf/black/blob/master/docs/compatible_configs.md).
+
+## Migrating your code style without ruining git blame
+
+A long-standing argument against moving to automated code formatters like _Black_ is
+that the migration will clutter up the output of `git blame`. This was a valid argument,
+but since Git version 2.23, Git natively supports
+[ignoring revisions in blame](https://git-scm.com/docs/git-blame#Documentation/git-blame.txt---ignore-revltrevgt)
+with the `--ignore-rev` option. You can also pass a file listing the revisions to ignore
+using the `--ignore-revs-file` option. The changes made by the revision will be ignored
+when assigning blame. Lines modified by an ignored revision will be blamed on the
+previous revision that modified those lines.
+
+So when migrating your project's code style to _Black_, reformat everything and commit
+the changes (preferably in one massive commit). Then put the full 40 characters commit
+identifier(s) into a file.
+
+```
+# Migrate code style to Black
+5b4ab991dede475d393e9d69ec388fd6bd949699
+```
+
+Afterwards, you can pass that file to `git blame` and see clean and meaningful blame
+information.
+
+```console
+$ git blame important.py --ignore-revs-file .git-blame-ignore-revs
+7a1ae265 (John Smith 2019-04-15 15:55:13 -0400 1) def very_important_function(text, file):
+abdfd8b0 (Alice Doe 2019-09-23 11:39:32 -0400 2) text = text.lstrip()
+7a1ae265 (John Smith 2019-04-15 15:55:13 -0400 3) with open(file, "r+") as f:
+7a1ae265 (John Smith 2019-04-15 15:55:13 -0400 4) f.write(formatted)
+```
+
+You can even configure `git` to automatically ignore revisions listed in a file on every
+call to `git blame`.
+
+```console
+$ git config blame.ignoreRevsFile .git-blame-ignore-revs
+```
+
+**The one caveat is that GitHub and GitLab do not yet support ignoring revisions using
+their native UI of blame.** So blame information will be cluttered with a reformatting
+commit on those platforms. (If you'd like this feature, there's an open issue for
+[GitLab](https://gitlab.com/gitlab-org/gitlab/-/issues/31423) and please let GitHub
+know!)
+
+## NOTE: This is a beta product
+
+_Black_ is already [successfully used](#used-by) by many projects, small and big. It
+also sports a decent test suite. However, it is still very new. Things will probably be
+wonky for a while. This is made explicit by the "Beta" trove classifier, as well as by
+the "b" in the version number. What this means for you is that **until the formatter
+becomes stable, you should expect some formatting to change in the future**. That being
+said, no drastic stylistic changes are planned, mostly responses to bug reports.
+
+Also, as a temporary safety measure, _Black_ will check that the reformatted code still
+produces a valid AST that is equivalent to the original. This slows it down. If you're
+feeling confident, use `--fast`.
--- /dev/null
+[//]: # "NOTE: THIS FILE WAS AUTOGENERATED FROM README.md"
+
+# pyproject.toml
+
+_Black_ is able to read project-specific default values for its command line options
+from a `pyproject.toml` file. This is especially useful for specifying custom
+`--include` and `--exclude` patterns for your project.
+
+**Pro-tip**: If you're asking yourself "Do I need to configure anything?" the answer is
+"No". _Black_ is all about sensible defaults.
+
+## What on Earth is a `pyproject.toml` file?
+
+[PEP 518](https://www.python.org/dev/peps/pep-0518/) defines `pyproject.toml` as a
+configuration file to store build system requirements for Python projects. With the help
+of tools like [Poetry](https://python-poetry.org/) or
+[Flit](https://flit.readthedocs.io/en/latest/) it can fully replace the need for
+`setup.py` and `setup.cfg` files.
+
+## Where _Black_ looks for the file
+
+By default _Black_ looks for `pyproject.toml` starting from the common base directory of
+all files and directories passed on the command line. If it's not there, it looks in
+parent directories. It stops looking when it finds the file, or a `.git` directory, or a
+`.hg` directory, or the root of the file system, whichever comes first.
+
+If you're formatting standard input, _Black_ will look for configuration starting from
+the current working directory.
+
+You can also explicitly specify the path to a particular file that you want with
+`--config`. In this situation _Black_ will not look for any other file.
+
+If you're running with `--verbose`, you will see a blue message if a file was found and
+used.
+
+Please note `blackd` will not use `pyproject.toml` configuration.
+
+## Configuration format
+
+As the file extension suggests, `pyproject.toml` is a
+[TOML](https://github.com/toml-lang/toml) file. It contains separate sections for
+different tools. _Black_ is using the `[tool.black]` section. The option keys are the
+same as long names of options on the command line.
+
+Note that you have to use single-quoted strings in TOML for regular expressions. It's
+the equivalent of r-strings in Python. Multiline strings are treated as verbose regular
+expressions by Black. Use `[ ]` to denote a significant space character.
+
+<details>
+<summary>Example <code>pyproject.toml</code></summary>
+
+```toml
+[tool.black]
+line-length = 88
+target-version = ['py37']
+include = '\.pyi?$'
+exclude = '''
+
+(
+ /(
+ \.eggs # exclude a few common directories in the
+ | \.git # root of the project
+ | \.hg
+ | \.mypy_cache
+ | \.tox
+ | \.venv
+ | _build
+ | buck-out
+ | build
+ | dist
+ )/
+ | foo.py # also separately exclude a file named foo.py in
+ # the root of the project
+)
+'''
+```
+
+</details>
+
+## Lookup hierarchy
+
+Command-line options have defaults that you can see in `--help`. A `pyproject.toml` can
+override those defaults. Finally, options provided by the user on the command line
+override both.
+
+_Black_ will only ever use one `pyproject.toml` file during an entire run. It doesn't
+look for multiple files, and doesn't compose configuration from different levels of the
+file hierarchy.
--- /dev/null
+[//]: # "NOTE: THIS FILE WAS AUTOGENERATED FROM README.md"
+
+# Show your style
+
+Use the badge in your project's README.md:
+
+```md
+[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
+```
+
+Using the badge in README.rst:
+
+```
+.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
+ :target: https://github.com/psf/black
+```
+
+Looks like this:
+[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
--- /dev/null
+[//]: # "NOTE: THIS FILE WAS AUTOGENERATED FROM README.md"
+
+# Version control integration
+
+Use [pre-commit](https://pre-commit.com/). Once you
+[have it installed](https://pre-commit.com/#install), add this to the
+`.pre-commit-config.yaml` in your repository:
+
+```yaml
+repos:
+ - repo: https://github.com/psf/black
+ rev: 19.10b0 # Replace by any tag/version: https://github.com/psf/black/tags
+ hooks:
+ - id: black
+ language_version: python3 # Should be a command that runs python3.6+
+```
+
+Then run `pre-commit install` and you're ready to go.
+
+Avoid using `args` in the hook. Instead, store necessary configuration in
+`pyproject.toml` so that editors and command-line usage of Black all behave consistently
+for your project. See _Black_'s own
+[pyproject.toml](https://github.com/psf/black/blob/master/pyproject.toml) for an
+example.
+
+If you're already using Python 3.7, switch the `language_version` accordingly. Finally,
+`stable` is a branch that tracks the latest release on PyPI. If you'd rather run on
+master, this is also an option.