Content-Length: 286293 | pFad | https://github.com/python/cpython/issues/123562

2F Improve `SyntaxError` message for `case ... as a.b` · Issue #123562 · python/cpython · GitHub
Skip to content

Improve SyntaxError message for case ... as a.b #123562

@sobolevn

Description

@sobolevn

Feature or enhancement

There's already a similar rule:

| or_pattern 'as' !NAME a=expression { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "invalid pattern target") }

But, it has two problems:

  1. It does not work for cases like as a.b, because a matches NAME
  2. 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_pattern

So, if pattern=or_pattern 'as' target=pattern_capture_target with a valid 'as' NAME is matched, we won't fall to the next invalid_ rule.

Proposed result:

>>> match 1:
...     case x as a.b: ...
...     
  File "<python-input-0>", line 2
    case x as a.b: ...
              ^^^
SyntaxError: cannot use pattern target as attribute

Refs #123440

Linked PRs

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions









    ApplySandwichStrip

    pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


    --- a PPN by Garber Painting Akron. With Image Size Reduction included!

    Fetched URL: https://github.com/python/cpython/issues/123562

    Alternative Proxies:

    Alternative Proxy

    pFad Proxy

    pFad v3 Proxy

    pFad v4 Proxy