parent
b250aed47b
commit
09f5ee3a19
@ -176,6 +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` and
|
||||
`include_trailing_comma=True` in your isort config.
|
||||
|
||||
|
||||
### Line length
|
||||
|
||||
@ -528,6 +535,8 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md).
|
||||
* 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
|
||||
|
20
black.py
20
black.py
@ -1712,6 +1712,8 @@ def split_line(
|
||||
split_funcs: List[SplitFunc]
|
||||
if line.is_def:
|
||||
split_funcs = [left_hand_split]
|
||||
elif line.is_import:
|
||||
split_funcs = [explode_split]
|
||||
elif line.inside_brackets:
|
||||
split_funcs = [delimiter_split, standalone_comment_split, right_hand_split]
|
||||
else:
|
||||
@ -1978,6 +1980,24 @@ def append_to_line(leaf: Leaf) -> Iterator[Line]:
|
||||
yield current_line
|
||||
|
||||
|
||||
def explode_split(
|
||||
line: Line, py36: bool = False, omit: Collection[LeafID] = ()
|
||||
) -> Iterator[Line]:
|
||||
"""Split by RHS and immediately split contents by a delimiter."""
|
||||
new_lines = list(right_hand_split(line, py36, omit))
|
||||
if len(new_lines) != 3:
|
||||
yield from new_lines
|
||||
return
|
||||
|
||||
yield new_lines[0]
|
||||
try:
|
||||
yield from delimiter_split(new_lines[1], py36)
|
||||
except CannotSplit:
|
||||
yield new_lines[1]
|
||||
|
||||
yield new_lines[2]
|
||||
|
||||
|
||||
def is_import(leaf: Leaf) -> bool:
|
||||
"""Return True if the given leaf starts an import statement."""
|
||||
p = leaf.parent
|
||||
|
@ -17,6 +17,10 @@
|
||||
from ..queues import *
|
||||
from ..streams import *
|
||||
|
||||
from some_library import (
|
||||
Just, Enough, Libraries, To, Fit, In, This, Nice, Split, Which, We, No, Longer, Use
|
||||
)
|
||||
|
||||
from .a.b.c.subprocess import *
|
||||
from . import (tasks)
|
||||
from . import (A, B, C)
|
||||
@ -59,6 +63,23 @@
|
||||
from ..queues import *
|
||||
from ..streams import *
|
||||
|
||||
from some_library import (
|
||||
Just,
|
||||
Enough,
|
||||
Libraries,
|
||||
To,
|
||||
Fit,
|
||||
In,
|
||||
This,
|
||||
Nice,
|
||||
Split,
|
||||
Which,
|
||||
We,
|
||||
No,
|
||||
Longer,
|
||||
Use,
|
||||
)
|
||||
|
||||
from .a.b.c.subprocess import *
|
||||
from . import tasks
|
||||
from . import A, B, C
|
||||
|
Loading…
Reference in New Issue
Block a user