From be49ac72a04dd70d3f496d3d062405ad4166ea0b Mon Sep 17 00:00:00 2001 From: Vlad Emelianov Date: Sat, 18 Jan 2020 16:21:46 +0100 Subject: [PATCH] Support py38-style starred expressions in return statement (#1121) --- blib2to3/Grammar.txt | 4 ++-- tests/data/python38.py | 27 +++++++++++++++++++++++++++ tests/test_black.py | 10 ++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 tests/data/python38.py diff --git a/blib2to3/Grammar.txt b/blib2to3/Grammar.txt index d90710f..f14e2b5 100644 --- a/blib2to3/Grammar.txt +++ b/blib2to3/Grammar.txt @@ -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 @@ -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 diff --git a/tests/data/python38.py b/tests/data/python38.py new file mode 100644 index 0000000..1a7f761 --- /dev/null +++ b/tests/data/python38.py @@ -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 diff --git a/tests/test_black.py b/tests/test_black.py index 66aa360..acbaade 100644 --- a/tests/test_black.py +++ b/tests/test_black.py @@ -598,6 +598,16 @@ class BlackTestCase(unittest.TestCase): # 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") -- 2.39.5