*Black* makes code review faster by producing the smallest diffs
possible.
+---
-## Installation and Usage
+*Contents:* **[Installation and usage](#installation-and-usage)** |
+**[The *Black* code style](#the-black-code-style)** |
+**[Editor integration](#editor-integration)** |
+**[Version control integration](#version-control-integration)** |
+**[Ignoring unmodified files](#ignoring-unmodified-files)** |
+**[Testimonials](#testimonials)** |
+**[Show your style](#show-your-style)** |
+**[License](#license)** |
+**[Contributing](#contributing-to-black)** |
+**[Change Log](#change-log)** |
+**[Authors](#authors)**
+
+---
+
+## Installation and usage
### Installation
-q, --quiet Don't emit non-error messages to stderr. Errors
are still emitted, silence those with
2>/dev/null.
+ --pyi Consider all input files typing stubs regardless
+ of file extension (useful when piping source on
+ standard input).
+ --py36 Allow using Python 3.6-only syntax on all input
+ files. This will put trailing commas in function
+ signatures and calls also after *args and
+ **kwargs. [default: per-file auto-detection]
--version Show the version and exit.
--help Show this message and exit.
```
imports cannot fit in the allotted length, it's always split into one
element per line. This minimizes diffs as well as enables readers of
code to find which commit introduced a particular entry. This also
-makes *Black* compatible with [isort](https://pypi.org/p/isort/). Use
-`multi_line_output=3`, `include_trailing_comma=True`,
-`force_grid_wrap=0`, and `line_length=88` in your isort config.
+makes *Black* compatible with [isort](https://pypi.org/p/isort/) with
+the following configuration.
+
+<details>
+<summary>A compatible `.isort.cfg`</summary>
+
+```
+[settings]
+multi_line_output=3
+include_trailing_comma=True
+force_grid_wrap=0
+combine_as_imports=True
+line_length=88
+```
+The equivalent command line is:
+```
+$ isort --multi-line=3 --trailing-comma --force-grid-wrap=0 --combine-as --line-width=88 [ file.py ]
+```
+</details>
### Line length
It will also insert proper spacing before and after function definitions.
It's one line before and after inner functions and two lines before and
-after module-level functions. *Black* will not put empty lines between
-function/class definitions and standalone comments that immediately precede
-the given function/class.
+after module-level functions and classes. *Black* will not put empty
+lines between function/class definitions and standalone comments that
+immediately precede the given function/class.
+
+*Black* will enforce single empty lines between a class-level docstring
+and the first following field or method. This conforms to
+[PEP 257](https://www.python.org/dev/peps/pep-0257/#multi-line-docstrings).
+
+*Black* won't insert empty lines after function docstrings unless that
+empty line is required due to an inner function starting immediately
+after.
### Trailing commas
and let *Black* handle the transformation.
-### Line Breaks & Binary Operators
+### Line breaks & binary operators
*Black* will break a line before a binary operator when splitting a block
of code over multiple lines. This is so that *Black* is compliant with the
Some popular APIs, like ORMs, use call chaining. This API style is known
as a [fluent interface](https://en.wikipedia.org/wiki/Fluent_interface).
-*Black* formats those treating dots that follow a call or an indexing
+*Black* formats those by treating dots that follow a call or an indexing
operation like a very low priority delimiter. It's easier to show the
behavior than to explain it. Look at the example:
```py3
1. Install `black`.
- $ pip install black
+```console
+$ pip install black
+```
2. Locate your `black` installation folder.
- On MacOS / Linux / BSD:
+ On macOS / Linux / BSD:
- $ which black
- /usr/local/bin/black # possible location
+```console
+$ which black
+/usr/local/bin/black # possible location
+```
On Windows:
- $ where black
- %LocalAppData%\Programs\Python\Python36-32\Scripts\black.exe # possible location
+```console
+$ where black
+%LocalAppData%\Programs\Python\Python36-32\Scripts\black.exe # possible location
+```
3. Open External tools in PyCharm with `File -> Settings -> Tools -> External Tools`.
create a virtualenv manually and point `g:black_virtualenv` to it.
The plugin will use it.
+To run *Black* on save, add the following line to `.vimrc` or `init.vim`:
+
+```
+autocmd BufWritePost *.py execute ':Black'
+```
+
**How to get Vim with Python 3.6?**
On Ubuntu 17.10 Vim comes with Python 3.6 by default.
-On macOS with HomeBrew run: `brew install vim --with-python3`.
+On macOS with Homebrew run: `brew install vim --with-python3`.
When building Vim from source, use:
`./configure --enable-python3interp=yes`. There's many guides online how
to do this.
master, this is also an option.
-## Ignoring non-modified files
+## Ignoring unmodified files
-*Black* remembers files it already formatted, unless the `--diff` flag is used or
+*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
## Change Log
+### 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
* [Ivan Katanić](mailto:ivan.katanic@gmail.com)
* [Jelle Zijlstra](mailto:jelle.zijlstra@gmail.com)
* [Jonas Obrist](mailto:ojiidotch@gmail.com)
+* [Luka Sterbic](mailto:luka.sterbic@gmail.com)
* [Miguel Gaiowski](mailto:miggaiowski@gmail.com)
* [Osaetin Daniel](mailto:osaetindaniel@gmail.com)
* [Sunil Kapil](mailto:snlkapil@gmail.com)
* [Vishwas B Sharma](mailto:sharma.vishwas88@gmail.com)
+
+---
+
+*Contents:*
+**[Installation and Usage](#installation-and-usage)** |
+**[The *Black* code style](#the-black-code-style)** |
+**[Editor integration](#editor-integration)** |
+**[Version control integration](#version-control-integration)** |
+**[Ignoring unmodified files](#ignoring-unmodified-files)** |
+**[Testimonials](#testimonials)** |
+**[Show your style](#show-your-style)** |
+**[License](#license)** |
+**[Contributing](#contributing-to-black)** |
+**[Change Log](#change-log)** |
+**[Authors](#authors)**