From e1e89091d1de878c98e2d2b0cefd81cc75e7a128 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C5=81ukasz=20Langa?= Date: Thu, 15 Mar 2018 11:21:53 -0700 Subject: [PATCH] Fix invalid spacing of dots in relative imports Fixes #6 Fixes #13 --- README.md | 5 +++++ black.py | 22 ++++++++++++++++------ tests/import_spacing.py | 30 ++++++++++++------------------ 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 56321c7..28f79db 100644 --- a/README.md +++ b/README.md @@ -251,6 +251,11 @@ You can still try but prepare to be disappointed. ## Change Log +### 18.3a1 + +* fixed invalid spacing of dots in relative imports (#6, #13) + + ### 18.3a0 * first published version, Happy 🍰 Day 2018! diff --git a/black.py b/black.py index 24c57ca..7ae2627 100644 --- a/black.py +++ b/black.py @@ -20,7 +20,7 @@ from blib2to3 import pygram, pytree from blib2to3.pgen2 import driver, token from blib2to3.pgen2.parse import ParseError -__version__ = "18.3a0" +__version__ = "18.3a1" DEFAULT_LINE_LENGTH = 88 # types syms = pygram.python_symbols @@ -765,6 +765,7 @@ def whitespace(leaf: Leaf) -> str: DOUBLESPACE = ' ' t = leaf.type p = leaf.parent + v = leaf.value if t == token.COLON: return NO @@ -867,7 +868,7 @@ def whitespace(leaf: Leaf) -> str: return NO prevp = preceding_leaf(p) - if not prevp or prevp.type == token.AT: + if not prevp or prevp.type == token.AT or prevp.type == token.DOT: return NO elif p.type == syms.classdef: @@ -987,10 +988,19 @@ def whitespace(leaf: Leaf) -> str: elif t == token.NAME or t == token.NUMBER: return NO - elif p.type == syms.import_from and t == token.NAME: - prev = leaf.prev_sibling - if prev and prev.type == token.DOT: - return NO + elif p.type == syms.import_from: + if t == token.DOT: + prev = leaf.prev_sibling + if prev and prev.type == token.DOT: + return NO + + elif t == token.NAME: + if v == 'import': + return SPACE + + prev = leaf.prev_sibling + if prev and prev.type == token.DOT: + return NO elif p.type == syms.sliceop: return NO diff --git a/tests/import_spacing.py b/tests/import_spacing.py index 0597b62..a9856e7 100644 --- a/tests/import_spacing.py +++ b/tests/import_spacing.py @@ -13,13 +13,12 @@ from .futures import * from .locks import * # comment here from .protocols import * -from .runners import * # comment here -from .queues import * -from .streams import * +from ..runners import * # comment here +from ..queues import * +from ..streams import * -from .subprocess import * -from .tasks import * -from .transports import * +from .a.b.c.subprocess import * +from . import tasks __all__ = ( base_events.__all__ + @@ -31,9 +30,7 @@ __all__ = ( runners.__all__ + queues.__all__ + streams.__all__ + - subprocess.__all__ + - tasks.__all__ + - transports.__all__ + tasks.__all__ ) @@ -53,13 +50,12 @@ from .futures import * from .locks import * # comment here from .protocols import * -from .runners import * # comment here -from .queues import * -from .streams import * +from ..runners import * # comment here +from ..queues import * +from ..streams import * -from .subprocess import * -from .tasks import * -from .transports import * +from .a.b.c.subprocess import * +from . import tasks __all__ = ( base_events.__all__ + @@ -71,7 +67,5 @@ __all__ = ( runners.__all__ + queues.__all__ + streams.__all__ + - subprocess.__all__ + - tasks.__all__ + - transports.__all__ + tasks.__all__ ) -- 2.39.5