Fixed false negative in parsing incomplete 'yield from' expression (PY-6733)

This commit is contained in:
Andrey Vlasovskikh
2012-06-14 15:32:24 +04:00
parent fb56ad53e1
commit c28200769a
4 changed files with 36 additions and 3 deletions
@@ -533,10 +533,18 @@ public class ExpressionParsing extends Parsing {
myBuilder.advanceLexer();
if (myBuilder.getTokenType() == PyTokenTypes.FROM_KEYWORD) {
myBuilder.advanceLexer();
final boolean parsed = parseTupleExpression(false, isTargetExpression, false);
if (!parsed) {
myBuilder.error(message("PARSE.expected.expression"));
}
yieldExpr.done(PyElementTypes.YIELD_EXPRESSION);
return parsed;
}
else {
parseTupleExpression(false, isTargetExpression, false);
yieldExpr.done(PyElementTypes.YIELD_EXPRESSION);
return true;
}
parseTupleExpression(false, isTargetExpression, false);
yieldExpr.done(PyElementTypes.YIELD_EXPRESSION);
return true;
}
else {
return parseTupleExpression(false, isTargetExpression, false);
+2
View File
@@ -0,0 +1,2 @@
def f():
yield from
+18
View File
@@ -0,0 +1,18 @@
PyFile:YieldFromNoExpr.py
PyFunction('f')
PsiElement(Py:DEF_KEYWORD)('def')
PsiWhiteSpace(' ')
PsiElement(Py:IDENTIFIER)('f')
PyParameterList
PsiElement(Py:LPAR)('(')
PsiElement(Py:RPAR)(')')
PsiElement(Py:COLON)(':')
PsiWhiteSpace('\n ')
PyStatementList
PyExpressionStatement
PyYieldExpression
PsiElement(Py:YIELD_KEYWORD)('yield')
PsiWhiteSpace(' ')
PsiElement(Py:FROM_KEYWORD)('from')
PsiErrorElement:expression expected
<empty list>
@@ -323,6 +323,11 @@ public class PythonParsingTest extends ParsingTestCase {
doTest(LanguageLevel.PYTHON33);
}
// PY-6733
public void testYieldFromNoExpr() {
doTest(LanguageLevel.PYTHON33);
}
public void doTest() {
doTest(LanguageLevel.PYTHON25);
}