From 55803b0c218e1718db67c6c477b40518aeff59c6 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Fri, 15 Jun 2012 20:43:26 +0400 Subject: [PATCH] Fixed false negative in parsing for empty 'if' in list comprehensions (PY-6781) --- .../python/parsing/ExpressionParsing.java | 4 +++- python/testData/psi/ComprehensionErrors.py | 1 + python/testData/psi/ComprehensionErrors.txt | 18 ++++++++++++++++++ .../jetbrains/python/PythonParsingTest.java | 5 +++++ 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 python/testData/psi/ComprehensionErrors.py create mode 100644 python/testData/psi/ComprehensionErrors.txt 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); }