diff --git a/python/src/com/jetbrains/python/parsing/ExpressionParsing.java b/python/src/com/jetbrains/python/parsing/ExpressionParsing.java index e6617a4145ba..4742164e08d4 100644 --- a/python/src/com/jetbrains/python/parsing/ExpressionParsing.java +++ b/python/src/com/jetbrains/python/parsing/ExpressionParsing.java @@ -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); diff --git a/python/testData/psi/YieldFromNoExpr.py b/python/testData/psi/YieldFromNoExpr.py new file mode 100644 index 000000000000..894ca234f412 --- /dev/null +++ b/python/testData/psi/YieldFromNoExpr.py @@ -0,0 +1,2 @@ +def f(): + yield from diff --git a/python/testData/psi/YieldFromNoExpr.txt b/python/testData/psi/YieldFromNoExpr.txt new file mode 100644 index 000000000000..3f9ccbd28bb8 --- /dev/null +++ b/python/testData/psi/YieldFromNoExpr.txt @@ -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 + \ 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 4b137b05e310..9c8e488a4cf2 100644 --- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java @@ -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); }