From 4e5262f44354aa70c7ee6b8bd5054f85df14ba90 Mon Sep 17 00:00:00 2001 From: Batuhan Taskaya Date: Sun, 12 Dec 2021 18:25:26 +0300 Subject: [PATCH] Support as-expressions on dict items --- CHANGES.md | 2 ++ src/blib2to3/Grammar.txt | 4 ++-- tests/data/pattern_matching_extras.py | 10 ++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 37248202750..0dcf35ea199 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,6 +5,8 @@ ### _Black_ - Improve error message for invalid regular expression (#2678) +- Fix mapping cases that contain as-expressions, like `case {"key": 1 | 2 as password}` + (#2686) ## 21.12b0 diff --git a/src/blib2to3/Grammar.txt b/src/blib2to3/Grammar.txt index c3001e81065..600712ce2f0 100644 --- a/src/blib2to3/Grammar.txt +++ b/src/blib2to3/Grammar.txt @@ -168,8 +168,8 @@ subscript: test [':=' test] | [test] ':' [test] [sliceop] sliceop: ':' [test] exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] testlist: test (',' test)* [','] -dictsetmaker: ( ((test ':' test | '**' expr) - (comp_for | (',' (test ':' test | '**' expr))* [','])) | +dictsetmaker: ( ((test ':' asexpr_test | '**' expr) + (comp_for | (',' (test ':' asexpr_test | '**' expr))* [','])) | ((test [':=' test] | star_expr) (comp_for | (',' (test [':=' test] | star_expr))* [','])) ) diff --git a/tests/data/pattern_matching_extras.py b/tests/data/pattern_matching_extras.py index 60ad8a3d81b..c00585e9285 100644 --- a/tests/data/pattern_matching_extras.py +++ b/tests/data/pattern_matching_extras.py @@ -82,3 +82,13 @@ def func(match: case, case: match) -> case: match a, *b(), c: case d, *f, g: pass + + +match something: + case { + "key": key as key_1, + "password": PASS.ONE | PASS.TWO | PASS.THREE as password, + }: + pass + case {"maybe": something(complicated as this) as that}: + pass