Support py38-style starred expressions in return statement (#1121)
This commit is contained in:
parent
7f5d0e9754
commit
be49ac72a0
@ -89,7 +89,7 @@ pass_stmt: 'pass'
|
|||||||
flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt
|
flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt
|
||||||
break_stmt: 'break'
|
break_stmt: 'break'
|
||||||
continue_stmt: 'continue'
|
continue_stmt: 'continue'
|
||||||
return_stmt: 'return' [testlist]
|
return_stmt: 'return' [testlist_star_expr]
|
||||||
yield_stmt: yield_expr
|
yield_stmt: yield_expr
|
||||||
raise_stmt: 'raise' [test ['from' test | ',' test [',' test]]]
|
raise_stmt: 'raise' [test ['from' test | ',' test [',' test]]]
|
||||||
import_stmt: import_name | import_from
|
import_stmt: import_name | import_from
|
||||||
@ -212,4 +212,4 @@ testlist1: test (',' test)*
|
|||||||
encoding_decl: NAME
|
encoding_decl: NAME
|
||||||
|
|
||||||
yield_expr: 'yield' [yield_arg]
|
yield_expr: 'yield' [yield_arg]
|
||||||
yield_arg: 'from' test | testlist
|
yield_arg: 'from' test | testlist_star_expr
|
||||||
|
27
tests/data/python38.py
Normal file
27
tests/data/python38.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#!/usr/bin/env python3.8
|
||||||
|
|
||||||
|
|
||||||
|
def starred_return():
|
||||||
|
my_list = ["value2", "value3"]
|
||||||
|
return "value1", *my_list
|
||||||
|
|
||||||
|
|
||||||
|
def starred_yield():
|
||||||
|
my_list = ["value2", "value3"]
|
||||||
|
yield "value1", *my_list
|
||||||
|
|
||||||
|
|
||||||
|
# output
|
||||||
|
|
||||||
|
|
||||||
|
#!/usr/bin/env python3.8
|
||||||
|
|
||||||
|
|
||||||
|
def starred_return():
|
||||||
|
my_list = ["value2", "value3"]
|
||||||
|
return "value1", *my_list
|
||||||
|
|
||||||
|
|
||||||
|
def starred_yield():
|
||||||
|
my_list = ["value2", "value3"]
|
||||||
|
yield "value1", *my_list
|
@ -598,6 +598,16 @@ def test_python37(self) -> None:
|
|||||||
# but not on 3.6, because we use async as a reserved keyword
|
# but not on 3.6, because we use async as a reserved keyword
|
||||||
self.invokeBlack([str(source_path), "--target-version", "py36"], exit_code=123)
|
self.invokeBlack([str(source_path), "--target-version", "py36"], exit_code=123)
|
||||||
|
|
||||||
|
@patch("black.dump_to_file", dump_to_stderr)
|
||||||
|
def test_python38(self) -> None:
|
||||||
|
source, expected = read_data("python38")
|
||||||
|
actual = fs(source)
|
||||||
|
self.assertFormatEqual(expected, actual)
|
||||||
|
major, minor = sys.version_info[:2]
|
||||||
|
if major > 3 or (major == 3 and minor >= 8):
|
||||||
|
black.assert_equivalent(source, actual)
|
||||||
|
black.assert_stable(source, actual, black.FileMode())
|
||||||
|
|
||||||
@patch("black.dump_to_file", dump_to_stderr)
|
@patch("black.dump_to_file", dump_to_stderr)
|
||||||
def test_fmtonoff(self) -> None:
|
def test_fmtonoff(self) -> None:
|
||||||
source, expected = read_data("fmtonoff")
|
source, expected = read_data("fmtonoff")
|
||||||
|
Loading…
Reference in New Issue
Block a user