diff --git a/python/src/com/jetbrains/python/parsing/StatementParsing.java b/python/src/com/jetbrains/python/parsing/StatementParsing.java index a7018c9d87c4..ae8d235d62b1 100644 --- a/python/src/com/jetbrains/python/parsing/StatementParsing.java +++ b/python/src/com/jetbrains/python/parsing/StatementParsing.java @@ -340,7 +340,9 @@ public class StatementParsing extends Parsing implements ITokenTypeRemapper { } else if (myBuilder.getTokenType() == PyTokenTypes.FROM_KEYWORD) { myBuilder.advanceLexer(); - getExpressionParser().parseSingleExpression(false); + if (!getExpressionParser().parseSingleExpression(false)) { + myBuilder.error("Expression expected"); + } } } checkEndOfStatement(inSuite); diff --git a/python/testData/psi/RaiseFromNoExpr.py b/python/testData/psi/RaiseFromNoExpr.py new file mode 100644 index 000000000000..0f8e60cdb29e --- /dev/null +++ b/python/testData/psi/RaiseFromNoExpr.py @@ -0,0 +1,2 @@ +def f(): + raise AttributeError from \ No newline at end of file diff --git a/python/testData/psi/RaiseFromNoExpr.txt b/python/testData/psi/RaiseFromNoExpr.txt new file mode 100644 index 000000000000..e13fd7c3052e --- /dev/null +++ b/python/testData/psi/RaiseFromNoExpr.txt @@ -0,0 +1,20 @@ +PyFile:RaiseFromNoExpr.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 + PyRaiseStatement + PsiElement(Py:RAISE_KEYWORD)('raise') + PsiWhiteSpace(' ') + PyReferenceExpression: AttributeError + PsiElement(Py:IDENTIFIER)('AttributeError') + 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 9c8e488a4cf2..d47015273c22 100644 --- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java @@ -328,6 +328,11 @@ public class PythonParsingTest extends ParsingTestCase { doTest(LanguageLevel.PYTHON33); } + // PY-6734 + public void testRaiseFromNoExpr() { + doTest(LanguageLevel.PYTHON30); + } + public void doTest() { doTest(LanguageLevel.PYTHON25); }