Skip to content

Commit

Permalink
Support py38-style starred expressions in return statement (#1121)
Browse files Browse the repository at this point in the history
  • Loading branch information
vemel authored and JelleZijlstra committed Jan 18, 2020
1 parent 7f5d0e9 commit be49ac7
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 2 deletions.
4 changes: 2 additions & 2 deletions blib2to3/Grammar.txt
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ pass_stmt: 'pass'
flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt
break_stmt: 'break'
continue_stmt: 'continue'
return_stmt: 'return' [testlist]
return_stmt: 'return' [testlist_star_expr]
yield_stmt: yield_expr
raise_stmt: 'raise' [test ['from' test | ',' test [',' test]]]
import_stmt: import_name | import_from
Expand Down Expand Up @@ -212,4 +212,4 @@ testlist1: test (',' test)*
encoding_decl: NAME

yield_expr: 'yield' [yield_arg]
yield_arg: 'from' test | testlist
yield_arg: 'from' test | testlist_star_expr
27 changes: 27 additions & 0 deletions tests/data/python38.py
Original file line number Diff line number Diff line change
@@ -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
10 changes: 10 additions & 0 deletions tests/test_black.py
Original file line number Diff line number Diff line change
Expand Up @@ -598,6 +598,16 @@ def test_python37(self) -> None:
# but not on 3.6, because we use async as a reserved keyword
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)
def test_fmtonoff(self) -> None:
source, expected = read_data("fmtonoff")
Expand Down

0 comments on commit be49ac7

Please sign in to comment.