Skip to content

Commit d8a621e

Browse files
committed
Adding trailing commas to dictionaries when comments are present
at the end
1 parent d4a8564 commit d8a621e

File tree

2 files changed

+43
-9
lines changed

2 files changed

+43
-9
lines changed

src/black/linegen.py

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,25 @@ def split_wrapper(line: Line, features: Collection[Feature] = ()) -> Iterator[Li
830830
return split_wrapper
831831

832832

833+
def _get_last_non_comment_leaf(line: Line) -> Optional[int]:
834+
for leaf_idx in range(len(line.leaves) - 1, 0, -1):
835+
if line.leaves[leaf_idx].type != STANDALONE_COMMENT:
836+
return leaf_idx
837+
return None
838+
839+
840+
def _safe_add_trailing_comma(safe: bool, delimiter_priority: int, line: Line) -> Line:
841+
if (
842+
safe
843+
and delimiter_priority == COMMA_PRIORITY
844+
and line.leaves[-1].type != token.COMMA
845+
and line.leaves[-1].type != STANDALONE_COMMENT
846+
):
847+
new_comma = Leaf(token.COMMA, ",")
848+
line.append(new_comma)
849+
return line
850+
851+
833852
@dont_increase_indentation
834853
def delimiter_split(line: Line, features: Collection[Feature] = ()) -> Iterator[Line]:
835854
"""Split according to delimiters of the highest priority.
@@ -871,7 +890,9 @@ def append_to_line(leaf: Leaf) -> Iterator[Line]:
871890
)
872891
current_line.append(leaf)
873892

874-
for leaf in line.leaves:
893+
last_non_comment_leaf = _get_last_non_comment_leaf(line)
894+
895+
for leaf_idx, leaf in enumerate(line.leaves):
875896
yield from append_to_line(leaf)
876897

877898
for comment_after in line.comments_after(leaf):
@@ -888,6 +909,11 @@ def append_to_line(leaf: Leaf) -> Iterator[Line]:
888909
trailing_comma_safe and Feature.TRAILING_COMMA_IN_CALL in features
889910
)
890911

912+
if leaf_idx == last_non_comment_leaf and leaf_idx != len(line.leaves) - 1:
913+
current_line = _safe_add_trailing_comma(
914+
trailing_comma_safe, delimiter_priority, current_line
915+
)
916+
891917
leaf_priority = bt.delimiters.get(id(leaf))
892918
if leaf_priority == delimiter_priority:
893919
yield current_line
@@ -896,14 +922,9 @@ def append_to_line(leaf: Leaf) -> Iterator[Line]:
896922
mode=line.mode, depth=line.depth, inside_brackets=line.inside_brackets
897923
)
898924
if current_line:
899-
if (
900-
trailing_comma_safe
901-
and delimiter_priority == COMMA_PRIORITY
902-
and current_line.leaves[-1].type != token.COMMA
903-
and current_line.leaves[-1].type != STANDALONE_COMMENT
904-
):
905-
new_comma = Leaf(token.COMMA, ",")
906-
current_line.append(new_comma)
925+
current_line = _safe_add_trailing_comma(
926+
trailing_comma_safe, delimiter_priority, current_line
927+
)
907928
yield current_line
908929

909930

tests/data/simple_cases/function_trailing_comma.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
def f(a,):
22
d = {'key': 'value',}
3+
e = {
4+
"a": fun(msg, "ts"),
5+
"longggggggggggggggid": ...,
6+
"longgggggggggggggggggggkey": ..., "created": ...
7+
# "longkey": ...
8+
}
39
tup = (1,)
410

511
def f2(a,b,):
@@ -68,6 +74,13 @@ def f(
6874
d = {
6975
"key": "value",
7076
}
77+
e = {
78+
"a": fun(msg, "ts"),
79+
"longggggggggggggggid": ...,
80+
"longgggggggggggggggggggkey": ...,
81+
"created": ...,
82+
# "longkey": ...
83+
}
7184
tup = (1,)
7285

7386

0 commit comments

Comments
 (0)