Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
Closed
Description
Feature or enhancement
There's already a similar rule:
Line 1378 in084e0f3
| | or_pattern 'as' !NAME a=expression { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "invalid pattern target") } |
But, it has two problems:
- It does not work for cases like
as a.b, becauseamatchesNAME - It does not show rich error message, only a static one:
invalid pattern target
My proposed change:
| or_pattern 'as' a=expression { RAISE_SYNTAX_ERROR_KNOWN_LOCATION( a, "cannot use pattern target as %s", _PyPegen_get_expr_name(a)) }Why is it safe?
Here's how the parent rule is defined:
as_pattern[pattern_ty]: | pattern=or_pattern 'as' target=pattern_capture_target { _PyAST_MatchAs(pattern, target->v.Name.id, EXTRA) } | invalid_as_patternSo, ifpattern=or_pattern 'as' target=pattern_capture_target with a valid'as' NAME is matched, we won't fall to the nextinvalid_ rule.
Proposed result:
>>>match1:...casexasa.b: ......File"<python-input-0>",line2casexasa.b: ...^^^SyntaxError:cannotusepatterntargetasattribute
Refs#123440