-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implement multiline dictionary and list hugging for preview style (#8293
) ## Summary This PR implement's Black's new single-argument hugging for lists, sets, and dictionaries under preview style. For example, this: ```python foo( [ 1, 2, 3, ] ) ``` Would instead now be formatted as: ```python foo([ 1, 2, 3, ]) ``` A couple notes: - This doesn't apply when the argument has a magic trailing comma. - This _does_ apply when the argument is starred or double-starred. - We don't apply this when there are comments before or after the argument, though Black does in some cases (and moves the comments outside the call parentheses). It doesn't say it in the originating PR (psf/black#3964), but I think this also applies to parenthesized expressions? At least, it does in my testing of preview vs. stable, though it's possible that behavior predated the linked PR. See: #8279. ## Test Plan Before: | project | similarity index | total files | changed files | |----------------|------------------:|------------------:|------------------:| | cpython | 0.75804 | 1799 | 1648 | | django | 0.99984 | 2772 | 34 | | home-assistant | 0.99963 | 10596 | 146 | | poetry | 0.99925 | 317 | 12 | | transformers | 0.99967 | 2657 | 322 | | twine | 1.00000 | 33 | 0 | | typeshed | 0.99980 | 3669 | 18 | | warehouse | 0.99977 | 654 | 13 | | zulip | 0.99970 | 1459 | 21 | After: | project | similarity index | total files | changed files | |----------------|------------------:|------------------:|------------------:| | cpython | 0.75804 | 1799 | 1648 | | django | 0.99984 | 2772 | 34 | | home-assistant | 0.99963 | 10596 | 146 | | poetry | 0.96215 | 317 | 34 | | transformers | 0.99967 | 2657 | 322 | | twine | 1.00000 | 33 | 0 | | typeshed | 0.99980 | 3669 | 18 | | warehouse | 0.99977 | 654 | 13 | | zulip | 0.99970 | 1459 | 21 |
- Loading branch information
1 parent
f06c5dc
commit 019d9ae
Showing
11 changed files
with
1,969 additions
and
15 deletions.
There are no files selected for viewing
3 changes: 3 additions & 0 deletions
3
...xtures/black/simple_cases/preview_hug_parens_with_braces_and_square_brackets.options.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"preview": "enabled" | ||
} |
141 changes: 141 additions & 0 deletions
141
...es/test/fixtures/black/simple_cases/preview_hug_parens_with_braces_and_square_brackets.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,141 @@ | ||
def foo_brackets(request): | ||
return JsonResponse( | ||
{ | ||
"var_1": foo, | ||
"var_2": bar, | ||
} | ||
) | ||
|
||
def foo_square_brackets(request): | ||
return JsonResponse( | ||
[ | ||
"var_1", | ||
"var_2", | ||
] | ||
) | ||
|
||
func({"a": 37, "b": 42, "c": 927, "aaaaaaaaaaaaaaaaaaaaaaaaa": 11111111111111111111111111111111111111111}) | ||
|
||
func(["random_string_number_one","random_string_number_two","random_string_number_three","random_string_number_four"]) | ||
|
||
func( | ||
{ | ||
# expand me | ||
'a':37, | ||
'b':42, | ||
'c':927 | ||
} | ||
) | ||
|
||
func( | ||
[ | ||
'a', | ||
'b', | ||
'c', | ||
] | ||
) | ||
|
||
func( | ||
[ | ||
'a', | ||
'b', | ||
'c', | ||
], | ||
) | ||
|
||
func( # a | ||
[ # b | ||
"c", # c | ||
"d", # d | ||
"e", # e | ||
] # f | ||
) # g | ||
|
||
func( # a | ||
{ # b | ||
"c": 1, # c | ||
"d": 2, # d | ||
"e": 3, # e | ||
} # f | ||
) # g | ||
|
||
func( | ||
# preserve me | ||
[ | ||
"c", | ||
"d", | ||
"e", | ||
] | ||
) | ||
|
||
func( | ||
[ # preserve me but hug brackets | ||
"c", | ||
"d", | ||
"e", | ||
] | ||
) | ||
|
||
func( | ||
[ | ||
# preserve me but hug brackets | ||
"c", | ||
"d", | ||
"e", | ||
] | ||
) | ||
|
||
func( | ||
[ | ||
"c", | ||
# preserve me but hug brackets | ||
"d", | ||
"e", | ||
] | ||
) | ||
|
||
func( | ||
[ | ||
"c", | ||
"d", | ||
"e", | ||
# preserve me but hug brackets | ||
] | ||
) | ||
|
||
func( | ||
[ | ||
"c", | ||
"d", | ||
"e", | ||
] # preserve me but hug brackets | ||
) | ||
|
||
func( | ||
[ | ||
"c", | ||
"d", | ||
"e", | ||
] | ||
# preserve me | ||
) | ||
|
||
func([x for x in "short line"]) | ||
func([x for x in "long line long line long line long line long line long line long line"]) | ||
func([x for x in [x for x in "long line long line long line long line long line long line long line"]]) | ||
|
||
func({"short line"}) | ||
func({"long line", "long long line", "long long long line", "long long long long line", "long long long long long line"}) | ||
func({{"long line", "long long line", "long long long line", "long long long long line", "long long long long long line"}}) | ||
|
||
foooooooooooooooooooo( | ||
[{c: n + 1 for c in range(256)} for n in range(100)] + [{}], {size} | ||
) | ||
|
||
baaaaaaaaaaaaar( | ||
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], {x}, "a string", [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | ||
) | ||
|
||
foo(*["long long long long long line", "long long long long long line", "long long long long long line"]) | ||
|
||
foo(*[str(i) for i in range(100000000000000000000000000000000000000000000000000000000000)]) |
159 changes: 159 additions & 0 deletions
159
.../fixtures/black/simple_cases/preview_hug_parens_with_braces_and_square_brackets.py.expect
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,159 @@ | ||
def foo_brackets(request): | ||
return JsonResponse({ | ||
"var_1": foo, | ||
"var_2": bar, | ||
}) | ||
|
||
|
||
def foo_square_brackets(request): | ||
return JsonResponse([ | ||
"var_1", | ||
"var_2", | ||
]) | ||
|
||
|
||
func({ | ||
"a": 37, | ||
"b": 42, | ||
"c": 927, | ||
"aaaaaaaaaaaaaaaaaaaaaaaaa": 11111111111111111111111111111111111111111, | ||
}) | ||
|
||
func([ | ||
"random_string_number_one", | ||
"random_string_number_two", | ||
"random_string_number_three", | ||
"random_string_number_four", | ||
]) | ||
|
||
func({ | ||
# expand me | ||
"a": 37, | ||
"b": 42, | ||
"c": 927, | ||
}) | ||
|
||
func([ | ||
"a", | ||
"b", | ||
"c", | ||
]) | ||
|
||
func( | ||
[ | ||
"a", | ||
"b", | ||
"c", | ||
], | ||
) | ||
|
||
func([ # a # b | ||
"c", # c | ||
"d", # d | ||
"e", # e | ||
]) # f # g | ||
|
||
func({ # a # b | ||
"c": 1, # c | ||
"d": 2, # d | ||
"e": 3, # e | ||
}) # f # g | ||
|
||
func( | ||
# preserve me | ||
[ | ||
"c", | ||
"d", | ||
"e", | ||
] | ||
) | ||
|
||
func([ # preserve me but hug brackets | ||
"c", | ||
"d", | ||
"e", | ||
]) | ||
|
||
func([ | ||
# preserve me but hug brackets | ||
"c", | ||
"d", | ||
"e", | ||
]) | ||
|
||
func([ | ||
"c", | ||
# preserve me but hug brackets | ||
"d", | ||
"e", | ||
]) | ||
|
||
func([ | ||
"c", | ||
"d", | ||
"e", | ||
# preserve me but hug brackets | ||
]) | ||
|
||
func([ | ||
"c", | ||
"d", | ||
"e", | ||
]) # preserve me but hug brackets | ||
|
||
func( | ||
[ | ||
"c", | ||
"d", | ||
"e", | ||
] | ||
# preserve me | ||
) | ||
|
||
func([x for x in "short line"]) | ||
func([ | ||
x for x in "long line long line long line long line long line long line long line" | ||
]) | ||
func([ | ||
x | ||
for x in [ | ||
x | ||
for x in "long line long line long line long line long line long line long line" | ||
] | ||
]) | ||
|
||
func({"short line"}) | ||
func({ | ||
"long line", | ||
"long long line", | ||
"long long long line", | ||
"long long long long line", | ||
"long long long long long line", | ||
}) | ||
func({ | ||
{ | ||
"long line", | ||
"long long line", | ||
"long long long line", | ||
"long long long long line", | ||
"long long long long long line", | ||
} | ||
}) | ||
|
||
foooooooooooooooooooo( | ||
[{c: n + 1 for c in range(256)} for n in range(100)] + [{}], {size} | ||
) | ||
|
||
baaaaaaaaaaaaar( | ||
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], {x}, "a string", [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | ||
) | ||
|
||
foo(*[ | ||
"long long long long long line", | ||
"long long long long long line", | ||
"long long long long long line", | ||
]) | ||
|
||
foo(*[ | ||
str(i) for i in range(100000000000000000000000000000000000000000000000000000000000) | ||
]) |
Oops, something went wrong.