PY-48008 Report missing subject expression in match statements

GitOrigin-RevId: 2c49ea19ac0fb5bdda966e4077c45321c397df8a
This commit is contained in:
Mikhail Golubev
2021-06-24 16:26:18 +00:00
committed by intellij-monorepo-bot
parent a4c6272073
commit 70efe3108f
4 changed files with 26 additions and 1 deletions
@@ -147,7 +147,7 @@ public class StatementParsing extends Parsing implements ITokenTypeRemapper {
SyntaxTreeBuilder.Marker mark = myBuilder.mark();
myBuilder.remapCurrentToken(PyTokenTypes.MATCH_KEYWORD);
myBuilder.advanceLexer();
myContext.getExpressionParser().parseTupleExpression(true, false, false);
myContext.getExpressionParser().parseExpression();
if (!matchToken(PyTokenTypes.COLON)) {
mark.rollbackTo();
myBuilder.remapCurrentToken(PyTokenTypes.IDENTIFIER);
@@ -0,0 +1,3 @@
match:
case 1:
pass
@@ -0,0 +1,18 @@
PyFile:PatternMatchingRecoveryNoSubjectAfterMatch.py
PyMatchStatement
PsiElement(Py:MATCH_KEYWORD)('match')
PsiErrorElement:Expression expected
<empty list>
PsiElement(Py:COLON)(':')
PsiWhiteSpace('\n ')
PyCaseClause
PsiElement(Py:CASE_KEYWORD)('case')
PsiWhiteSpace(' ')
PyLiteralPattern
PyNumericLiteralExpression
PsiElement(Py:INTEGER_LITERAL)('1')
PsiElement(Py:COLON)(':')
PsiWhiteSpace('\n ')
PyStatementList
PyPassStatement
PsiElement(Py:PASS_KEYWORD)('pass')
@@ -986,6 +986,10 @@ public class PythonParsingTest extends ParsingTestCase {
doTest(LanguageLevel.PYTHON310);
}
public void testPatternMatchingRecoveryNoSubjectAfterMatch() {
doTest(LanguageLevel.PYTHON310);
}
public void testPatternMatchingRecoveryNoPatternAfterCase() {
doTest(LanguageLevel.PYTHON310);
}