diff --git a/python/src/com/jetbrains/python/parsing/ExpressionParsing.java b/python/src/com/jetbrains/python/parsing/ExpressionParsing.java index 4742164e08d4..fd009bdefb0a 100644 --- a/python/src/com/jetbrains/python/parsing/ExpressionParsing.java +++ b/python/src/com/jetbrains/python/parsing/ExpressionParsing.java @@ -141,7 +141,9 @@ public class ExpressionParsing extends Parsing { parseComprehensionRange(); while (myBuilder.getTokenType() == PyTokenTypes.IF_KEYWORD) { myBuilder.advanceLexer(); - parseOldExpression(); + if (!parseOldExpression()) { + myBuilder.error(message("PARSE.expected.expression")); + } } if (atToken(endToken)) { if (leaveEndTokenOutside) { diff --git a/python/testData/psi/ComprehensionErrors.py b/python/testData/psi/ComprehensionErrors.py new file mode 100644 index 000000000000..340f4338993c --- /dev/null +++ b/python/testData/psi/ComprehensionErrors.py @@ -0,0 +1 @@ +[for in if] diff --git a/python/testData/psi/ComprehensionErrors.txt b/python/testData/psi/ComprehensionErrors.txt new file mode 100644 index 000000000000..f7b9daa48ad7 --- /dev/null +++ b/python/testData/psi/ComprehensionErrors.txt @@ -0,0 +1,18 @@ +PyFile:ComprehensionErrors.py + PyExpressionStatement + PyListCompExpression + PsiElement(Py:LBRACKET)('[') + PsiErrorElement:expression expected + + PsiElement(Py:FOR_KEYWORD)('for') + PsiErrorElement:expression expected + + PsiWhiteSpace(' ') + PsiElement(Py:IN_KEYWORD)('in') + PsiErrorElement:expression expected + + PsiWhiteSpace(' ') + PsiElement(Py:IF_KEYWORD)('if') + PsiErrorElement:expression expected + + PsiElement(Py:RBRACKET)(']') \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PythonParsingTest.java b/python/testSrc/com/jetbrains/python/PythonParsingTest.java index d47015273c22..c2fa80fa7408 100644 --- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java @@ -333,6 +333,11 @@ public class PythonParsingTest extends ParsingTestCase { doTest(LanguageLevel.PYTHON30); } + // PY-6781 + public void testComprehensionErrors() { + doTest(); + } + public void doTest() { doTest(LanguageLevel.PYTHON25); }