From 3fafd806b30cbff5788525f050a635639d97b11c Mon Sep 17 00:00:00 2001 From: Batuhan Taskaya Date: Tue, 21 Dec 2021 21:16:55 +0300 Subject: [PATCH] Support multiple top-level as-expressions on case statements (#2716) --- CHANGES.md | 2 ++ src/blib2to3/Grammar.txt | 4 ++-- tests/data/pattern_matching_extras.py | 11 +++++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 252f2cc8863..d5cfb623c9a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,6 +10,8 @@ underlying SyntaxError (#2693) - Fix mapping cases that contain as-expressions, like `case {"key": 1 | 2 as password}` (#2686) +- Fix cases that contain multiple top-level as-expressions, like `case 1 as a, 2 as b` + (#2716) - No longer color diff headers white as it's unreadable in light themed terminals (#2691) - Tuple unpacking on `return` and `yield` constructs now implies 3.8+ (#2700) diff --git a/src/blib2to3/Grammar.txt b/src/blib2to3/Grammar.txt index 600712ce2f0..27776a3b65c 100644 --- a/src/blib2to3/Grammar.txt +++ b/src/blib2to3/Grammar.txt @@ -247,5 +247,5 @@ subject_expr: (namedexpr_test|star_expr) (',' (namedexpr_test|star_expr))* [','] # cases case_block: "case" patterns [guard] ':' suite guard: 'if' namedexpr_test -patterns: pattern ['as' pattern] -pattern: (expr|star_expr) (',' (expr|star_expr))* [','] +patterns: pattern (',' pattern)* [','] +pattern: (expr|star_expr) ['as' expr] diff --git a/tests/data/pattern_matching_extras.py b/tests/data/pattern_matching_extras.py index c00585e9285..b652d2685ec 100644 --- a/tests/data/pattern_matching_extras.py +++ b/tests/data/pattern_matching_extras.py @@ -92,3 +92,14 @@ def func(match: case, case: match) -> case: pass case {"maybe": something(complicated as this) as that}: pass + + +match something: + case 1 as a: + pass + + case 2 as b, 3 as c: + pass + + case 4 as d, (5 as e), (6 | 7 as g), *h: + pass