X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/8c74d7901fe8de0abd72a182d775b639b4202577..5dfc911e6b18927b4031a4f2951f9da3fe8f5f8e:/README.md?ds=sidebyside diff --git a/README.md b/README.md index ed69cb8..f587744 100644 --- a/README.md +++ b/README.md @@ -131,13 +131,13 @@ brackets and put that in a separate indented line. ```py3 # in: -l = [[n for n in list_bosses()], [n for n in list_employees()]] +TracebackException.from_exception(exc, limit, lookup_lines, capture_locals) # out: -l = [ - [n for n in list_bosses()], [n for n in list_employees()] -] +TracebackException.from_exception( + exc, limit, lookup_lines, capture_locals +) ``` If that still doesn't fit the bill, it will decompose the internal @@ -176,13 +176,13 @@ between two distinct sections of the code that otherwise share the same indentation level (like the arguments list and the docstring in the example above). -If a line of "from" imports cannot fit in the allotted length, it's always split -into one per line. Imports tend to change often and this minimizes diffs, as well -as enables readers of code to easily find which commit introduced a particular -import. This exception 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. +If a data structure literal (tuple, list, set, dict) or a line of "from" +imports cannot fit in the allotted length, it's always split into one +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. ### Line length @@ -268,6 +268,7 @@ if you'd like a trailing comma in this situation and *Black* didn't recognize it was safe to do so, put it there manually and *Black* will keep it. + ### Strings *Black* prefers double quotes (`"` and `"""`) over single quotes (`'` @@ -297,6 +298,7 @@ a bit easier than double quotes. The latter requires use of the Shift key. My recommendation here is to keep using whatever is faster to type and let *Black* handle the transformation. + ### Line Breaks & Binary Operators *Black* will break a line before a binary operator when splitting a block @@ -308,6 +310,7 @@ This behaviour may raise ``W503 line break before binary operator`` warnings in style guide enforcement tools like Flake8. Since ``W503`` is not PEP 8 compliant, you should tell Flake8 to ignore these warnings. + ### Slices PEP 8 [recommends](https://www.python.org/dev/peps/pep-0008/#whitespace-in-expressions-and-statements) @@ -321,6 +324,7 @@ This behaviour may raise ``E203 whitespace before ':'`` warnings in style guide enforcement tools like Flake8. Since ``E203`` is not PEP 8 compliant, you should tell Flake8 to ignore these warnings. + ### Parentheses Some parentheses are optional in the Python grammar. Any expression can @@ -340,7 +344,20 @@ interesting cases: In those cases, parentheses are removed when the entire statement fits in one line, or if the inner expression doesn't have any delimiters to -further split on. Otherwise, the parentheses are always added. +further split on. If there is only a single delimiter and the expression +starts or ends with a bracket, the parenthesis can also be successfully +omitted since the existing bracket pair will organize the expression +neatly anyway. Otherwise, the parentheses are added. + +Please note that *Black* does not add or remove any additional nested +parentheses that you might want to have for clarity or further +code organization. For example those parentheses are not going to be +removed: +```py3 +return not (this or that) +decision = (maybe.this() and values > 0) or (maybe.that() and values < 0) +``` + ### Call chains @@ -348,7 +365,7 @@ 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 operation like a very low priority delimiter. It's easier to show the -behavior than to explain it. Look at the example:: +behavior than to explain it. Look at the example: ```py3 def example(session): result = ( @@ -362,6 +379,7 @@ def example(session): ) ``` + ### Typing stub files PEP 484 describes the syntax for type hints in Python. One of the @@ -492,14 +510,17 @@ to do this. Use [joslarson.black-vscode](https://marketplace.visualstudio.com/items?itemName=joslarson.black-vscode). + ### SublimeText 3 Use [sublack plugin](https://github.com/jgirardet/sublack). + ### IPython Notebook Magic Use [blackcellmagic](https://github.com/csurfer/blackcellmagic). + ### Other editors Atom/Nuclide integration is planned by the author, others will @@ -609,7 +630,13 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md). ### 18.5a0 (unreleased) -* call chains are now formatted according to the [fluent interfaces](https://en.wikipedia.org/wiki/Fluent_interface) style (#67) +* 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) @@ -641,6 +668,9 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md). * 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