Bug report
Bug description:
In the grammar file, a soft keyword being the start of an expression makes it fail the path where the error message has this appended: "Perhaps you forgot a comma?"
However, it also apparently does the same thing for any identifer that is a prefix of any soft keyword.
>>> # multi-letter cases >>> # fine, expected behavior >>> (test x) File "<stdin>", line 1 (test x) ^^^^^^ SyntaxError: invalid syntax. Perhaps you forgot a comma? >>> (match_ x) File "<stdin>", line 1 (match_ x) ^^^^^^^^ SyntaxError: invalid syntax. Perhaps you forgot a comma? >>> (match x) File "<stdin>", line 1 (match x) ^ SyntaxError: invalid syntax >>> # unexpected behavior >>> (ma x) File "<stdin>", line 1 (ma x) ^ SyntaxError: invalid syntax >>> # single-letter bugs >>> # expected behavior >>> (f x) File "<stdin>", line 1 (f x) ^^^ SyntaxError: invalid syntax. Perhaps you forgot a comma? >>> # unexpected behavior >>> (m x) File "<stdin>", line 1 (m x) ^ SyntaxError: invalid syntax
Since m is a prefix of match, "forgetting a comma" (i.e. being in a situation that normally triggers that specific error) doesn't provide the same error message as other "normal" identifiers.
CPython versions tested on:
3.14
Operating systems tested on:
Windows
Linked PRs
- gh-130077: Enhance GrammarVisitor to differentiate visit methods for single and multi-character node classes #130162
- gh-130077: Properly match full soft keywords in the parser #135317
- [3.14] gh-130077: Properly match full soft keywords in the parser (GH-135317) #135348
- [3.13] gh-130077: Properly match full soft keywords in the parser (GH-135317) #135399
- [3.12] gh-130077: Properly match full soft keywords in the parser (GH-135317) #135400