Skip to content
This repository was archived by the owner on Jul 11, 2022. It is now read-only.

Commit da3c2f3

Browse files
ambvLukasz Langa
authored andcommitted
Fix spurious extra spaces after opening parentheses and in default arguments
Fixes pytest-dev#14 Fixes pytest-dev#17
1 parent 174fc47 commit da3c2f3

File tree

2 files changed

+52
-75
lines changed

2 files changed

+52
-75
lines changed

black.py

Lines changed: 38 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ def any_open_brackets(self) -> bool:
358358
"""Returns True if there is an yet unmatched open bracket on the line."""
359359
return bool(self.bracket_match)
360360

361-
def max_priority(self, exclude: Iterable[LeafID] = ()) -> int:
361+
def max_priority(self, exclude: Iterable[LeafID] =()) -> int:
362362
"""Returns the highest priority of a delimiter found on the line.
363363
364364
Values are consistent with what `is_delimiter()` returns.
@@ -781,13 +781,48 @@ def whitespace(leaf: Leaf) -> str:
781781
if t == STANDALONE_COMMENT:
782782
return NO
783783

784+
if t in CLOSING_BRACKETS:
785+
return NO
786+
784787
assert p is not None, f"INTERNAL ERROR: hand-made leaf without parent: {leaf!r}"
788+
prev = leaf.prev_sibling
789+
if not prev:
790+
prevp = preceding_leaf(p)
791+
if not prevp or prevp.type in OPENING_BRACKETS:
792+
return NO
793+
794+
if prevp.type == token.EQUAL:
795+
if prevp.parent and prevp.parent.type in {
796+
syms.typedargslist,
797+
syms.varargslist,
798+
syms.parameters,
799+
syms.arglist,
800+
syms.argument,
801+
}:
802+
return NO
803+
804+
elif prevp.type == token.DOUBLESTAR:
805+
if prevp.parent and prevp.parent.type in {
806+
syms.typedargslist,
807+
syms.varargslist,
808+
syms.parameters,
809+
syms.arglist,
810+
syms.dictsetmaker,
811+
}:
812+
return NO
813+
814+
elif prevp.type == token.COLON:
815+
if prevp.parent and prevp.parent.type == syms.subscript:
816+
return NO
817+
818+
elif prev.type in OPENING_BRACKETS:
819+
return NO
820+
785821
if p.type in {syms.parameters, syms.arglist}:
786822
# untyped function signatures or calls
787823
if t == token.RPAR:
788824
return NO
789825

790-
prev = leaf.prev_sibling
791826
if not prev or prev.type != token.COMMA:
792827
return NO
793828

@@ -796,13 +831,11 @@ def whitespace(leaf: Leaf) -> str:
796831
if t == token.RPAR:
797832
return NO
798833

799-
prev = leaf.prev_sibling
800834
if prev and prev.type != token.COMMA:
801835
return NO
802836

803837
elif p.type == syms.typedargslist:
804838
# typed function signatures
805-
prev = leaf.prev_sibling
806839
if not prev:
807840
return NO
808841

@@ -820,7 +853,6 @@ def whitespace(leaf: Leaf) -> str:
820853

821854
elif p.type == syms.tname:
822855
# type names
823-
prev = leaf.prev_sibling
824856
if not prev:
825857
prevp = preceding_leaf(p)
826858
if not prevp or prevp.type != token.COMMA:
@@ -831,7 +863,6 @@ def whitespace(leaf: Leaf) -> str:
831863
if t == token.LPAR or t == token.RPAR:
832864
return NO
833865

834-
prev = leaf.prev_sibling
835866
if not prev:
836867
if t == token.DOT:
837868
prevp = preceding_leaf(p)
@@ -849,7 +880,6 @@ def whitespace(leaf: Leaf) -> str:
849880
if t == token.EQUAL:
850881
return NO
851882

852-
prev = leaf.prev_sibling
853883
if not prev:
854884
prevp = preceding_leaf(p)
855885
if not prevp or prevp.type == token.LPAR:
@@ -863,7 +893,6 @@ def whitespace(leaf: Leaf) -> str:
863893
return NO
864894

865895
elif p.type == syms.dotted_name:
866-
prev = leaf.prev_sibling
867896
if prev:
868897
return NO
869898

@@ -875,77 +904,16 @@ def whitespace(leaf: Leaf) -> str:
875904
if t == token.LPAR:
876905
return NO
877906

878-
prev = leaf.prev_sibling
879907
if prev and prev.type == token.LPAR:
880908
return NO
881909

882910
elif p.type == syms.subscript:
883911
# indexing
884-
if t == token.COLON:
885-
return NO
886-
887-
prev = leaf.prev_sibling
888912
if not prev or prev.type == token.COLON:
889913
return NO
890914

891-
elif p.type in {
892-
syms.test,
893-
syms.not_test,
894-
syms.xor_expr,
895-
syms.or_test,
896-
syms.and_test,
897-
syms.arith_expr,
898-
syms.expr,
899-
syms.shift_expr,
900-
syms.yield_expr,
901-
syms.term,
902-
syms.power,
903-
syms.comparison,
904-
}:
905-
# various arithmetic and logic expressions
906-
prev = leaf.prev_sibling
907-
if not prev:
908-
prevp = preceding_leaf(p)
909-
if not prevp or prevp.type in OPENING_BRACKETS:
910-
return NO
911-
912-
if prevp.type == token.EQUAL:
913-
if prevp.parent and prevp.parent.type in {
914-
syms.varargslist, syms.parameters, syms.arglist, syms.argument
915-
}:
916-
return NO
917-
918-
return SPACE
919-
920915
elif p.type == syms.atom:
921-
if t in CLOSING_BRACKETS:
922-
return NO
923-
924-
prev = leaf.prev_sibling
925-
if not prev:
926-
prevp = preceding_leaf(p)
927-
if not prevp:
928-
return NO
929-
930-
if prevp.type in OPENING_BRACKETS:
931-
return NO
932-
933-
if prevp.type == token.EQUAL:
934-
if prevp.parent and prevp.parent.type in {
935-
syms.varargslist, syms.parameters, syms.arglist, syms.argument
936-
}:
937-
return NO
938-
939-
if prevp.type == token.DOUBLESTAR:
940-
if prevp.parent and prevp.parent.type in {
941-
syms.varargslist, syms.parameters, syms.arglist, syms.dictsetmaker
942-
}:
943-
return NO
944-
945-
elif prev.type in OPENING_BRACKETS:
946-
return NO
947-
948-
elif t == token.DOT:
916+
if prev and t == token.DOT:
949917
# dots, but not the first one.
950918
return NO
951919

@@ -955,13 +923,11 @@ def whitespace(leaf: Leaf) -> str:
955923
p.type == syms.subscriptlist
956924
):
957925
# list interior, including unpacking
958-
prev = leaf.prev_sibling
959926
if not prev:
960927
return NO
961928

962929
elif p.type == syms.dictsetmaker:
963930
# dict and set interior, including unpacking
964-
prev = leaf.prev_sibling
965931
if not prev:
966932
return NO
967933

@@ -970,7 +936,6 @@ def whitespace(leaf: Leaf) -> str:
970936

971937
elif p.type == syms.factor or p.type == syms.star_expr:
972938
# unary ops
973-
prev = leaf.prev_sibling
974939
if not prev:
975940
prevp = preceding_leaf(p)
976941
if not prevp or prevp.type in OPENING_BRACKETS:
@@ -991,15 +956,13 @@ def whitespace(leaf: Leaf) -> str:
991956

992957
elif p.type == syms.import_from:
993958
if t == token.DOT:
994-
prev = leaf.prev_sibling
995959
if prev and prev.type == token.DOT:
996960
return NO
997961

998962
elif t == token.NAME:
999963
if v == 'import':
1000964
return SPACE
1001965

1002-
prev = leaf.prev_sibling
1003966
if prev and prev.type == token.DOT:
1004967
return NO
1005968

tests/function.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ async def coroutine(arg):
2727
)
2828
def function_signature_stress_test(number:int,no_annotation=None,text:str="default",* ,debug:bool=False,**kwargs) -> str:
2929
return text[number:-1]
30+
def spaces(a=1, b=(), c=[], d={}, e=True, f=-1, g=1 if False else 2, h="", i=r''):
31+
offset = attr.ib(default=attr.Factory( lambda: _r.uniform(10000, 200000)))
32+
assert task._cancel_stack[:len(old_stack)] == old_stack
33+
def spaces2(result= _core.Value(None)):
34+
...
3035

3136
def long_lines():
3237
if True:
@@ -103,6 +108,15 @@ def function_signature_stress_test(
103108
return text[number:-1]
104109

105110

111+
def spaces(a=1, b=(), c=[], d={}, e=True, f=-1, g=1 if False else 2, h="", i=r''):
112+
offset = attr.ib(default=attr.Factory(lambda: _r.uniform(10000, 200000)))
113+
assert task._cancel_stack[:len(old_stack)] == old_stack
114+
115+
116+
def spaces2(result=_core.Value(None)):
117+
...
118+
119+
106120
def long_lines():
107121
if True:
108122
typedargslist.extend(

0 commit comments

Comments
 (0)