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
* 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
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:
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
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)
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