Skip to content

Commit

Permalink
Fix trailing comma for function with one arg (psf#880)
Browse files Browse the repository at this point in the history
Modified maybe_remove_trailing_comma to remove trailing commas for
typedarglists (in addition to arglists), and updated line split logic
to ensure that all lines in a function definition that contain only one
arg have a trailing comma.
  • Loading branch information
djb7 committed Jun 9, 2019
1 parent 1bbb01b commit 4a27d43
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 4 deletions.
15 changes: 11 additions & 4 deletions black.py
Original file line number Diff line number Diff line change
Expand Up @@ -1352,7 +1352,10 @@ def maybe_remove_trailing_comma(self, closing: Leaf) -> bool:
bracket_depth = leaf.bracket_depth
if bracket_depth == depth and leaf.type == token.COMMA:
commas += 1
if leaf.parent and leaf.parent.type == syms.arglist:
if leaf.parent and leaf.parent.type in {
syms.arglist,
syms.typedargslist,
}:
commas += 1
break

Expand Down Expand Up @@ -2488,9 +2491,13 @@ def bracket_split_build_line(
if leaves:
# Since body is a new indent level, remove spurious leading whitespace.
normalize_prefix(leaves[0], inside_brackets=True)
# Ensure a trailing comma for imports, but be careful not to add one after
# any comments.
if original.is_import:
# Ensure a trailing comma for imports and standalone function arguments, but be
# careful not to add one after any comments. Test condition for standalone
# arguments is that
no_commas = original.is_def and not [
l for l in leaves if l.type == token.COMMA
]
if original.is_import or no_commas:
for i in range(len(leaves) - 1, -1, -1):
if leaves[i].type == STANDALONE_COMMENT:
continue
Expand Down
14 changes: 14 additions & 0 deletions tests/data/function3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
def f(a,):
...

def f(a:int=1,):
...

# output

def f(a):
...


def f(a: int = 1):
...
8 changes: 8 additions & 0 deletions tests/test_black.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,14 @@ def test_function2(self) -> None:
black.assert_equivalent(source, actual)
black.assert_stable(source, actual, black.FileMode())

@patch("black.dump_to_file", dump_to_stderr)
def test_function3(self) -> None:
source, expected = read_data("function3")
actual = fs(source)
self.assertFormatEqual(expected, actual)
black.assert_equivalent(source, actual)
black.assert_stable(source, actual, black.FileMode())

@patch("black.dump_to_file", dump_to_stderr)
def test_expression(self) -> None:
source, expected = read_data("expression")
Expand Down

0 comments on commit 4a27d43

Please sign in to comment.