Improve SyntaxError message for inconsistent name binding in OR-patterns
- 主要言語
- Python
- スター
- 77.2k
- フォーク
- 35.9k
- PR マージ指標
- PR 指標を取得中
説明
Feature or enhancement
Proposal:
Title
compiler: improve SyntaxError message for inconsistent name binding in OR-patterns
Summary
When using structural pattern matching (PEP 634), all alternatives of an OR-pattern (|) are required to bind the same set of names.
Currently, if this rule is violated, CPython raises a SyntaxError with the message:
SyntaxError: alternative patterns bind different names
While technically correct, this message does not indicate which names differ or how the bindings are inconsistent.
This issue proposes enhancing the diagnostic to explicitly report the mismatched bindings.
Reproducer
match value:
case 1 | x:
pass
Output:
SyntaxError: alternative patterns bind different names
The message does not clarify:
- Which variable(s) are inconsistently bound
- Which alternative introduces additional bindings
- What the required constraint is
Expected Behavior
The error message should clearly indicate the binding mismatch. For example:
SyntaxError: OR-pattern alternatives must bind the same names;
left alternative binds no names, right alternative binds {'x'}
or:
SyntaxError: inconsistent variable binding in OR-pattern: 'x' is not bound in all alternatives
The exact wording can be adjusted, but the diagnostic should identify the differing name(s).
Rationale
PEP 634 specifies that all OR-pattern alternatives must bind identical sets of names.
Providing more detailed diagnostics would:
- Improve developer experience
- Make the rule easier to understand
- Align with recent improvements in CPython error reporting
- Maintain consistency with Python’s philosophy of helpful error messages
Scope
- No syntax changes
- No semantic changes
- No AST changes
- Diagnostic enhancement only
Implementation Notes
The relevant validation logic appears to occur during semantic analysis of pattern matching (likely in Python/ast.c or related compiler validation code).
The change would involve augmenting the existing name-set comparison logic to include information about the differing bindings in the raised SyntaxError.
Backward Compatibility
This change affects only the wording of an error message and does not alter runtime behavior.
Tests
Regression tests can be added to Lib/test/test_patma.py to assert that the improved diagnostic includes information about mismatched variable names.
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
No response
Linked PRs
- gh-145939
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まずリンクされている PR #145939 を確認し、次に Python/ast.c の OR-patterns の検証ロジックと関連するコンパイラコードを調査します。Lib/test/test_patma.py の関連する pattern-matching テストを実行します。回帰テストによって、一貫性のない bindings が不一致の名前を特定し、構文や実行時の動作を変更しないことを検証できれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- compilers
- issue の種類
- 機能追加
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100