diff --git a/python/src/com/jetbrains/python/parsing/FunctionParsing.java b/python/src/com/jetbrains/python/parsing/FunctionParsing.java index 1951ba6c9f39..82db49d1ceb5 100644 --- a/python/src/com/jetbrains/python/parsing/FunctionParsing.java +++ b/python/src/com/jetbrains/python/parsing/FunctionParsing.java @@ -148,7 +148,9 @@ public class FunctionParsing extends Parsing { annotationMarker.done(PyElementTypes.ANNOTATION); } if (!isStarParameter && matchToken(PyTokenTypes.EQ)) { - getExpressionParser().parseSingleExpression(false); + if (!getExpressionParser().parseSingleExpression(false)) { + myBuilder.error(message("PARSE.expected.expression")); + } } parameter.done(PyElementTypes.NAMED_PARAMETER); } diff --git a/python/testData/psi/MissingDefaultValue.py b/python/testData/psi/MissingDefaultValue.py new file mode 100644 index 000000000000..0d5a7775f6be --- /dev/null +++ b/python/testData/psi/MissingDefaultValue.py @@ -0,0 +1,2 @@ +def fa(a=): + pass \ No newline at end of file diff --git a/python/testData/psi/MissingDefaultValue.txt b/python/testData/psi/MissingDefaultValue.txt new file mode 100644 index 000000000000..dc9533a942fe --- /dev/null +++ b/python/testData/psi/MissingDefaultValue.txt @@ -0,0 +1,18 @@ +PyFile:MissingDefaultValue.py + PyFunction('fa') + PsiElement(Py:DEF_KEYWORD)('def') + PsiWhiteSpace(' ') + PsiElement(Py:IDENTIFIER)('fa') + PyParameterList + PsiElement(Py:LPAR)('(') + PyNamedParameter('a') + PsiElement(Py:IDENTIFIER)('a') + PsiElement(Py:EQ)('=') + PsiErrorElement:expression expected + + PsiElement(Py:RPAR)(')') + PsiElement(Py:COLON)(':') + PsiWhiteSpace('\n ') + PyStatementList + PyPassStatement + PsiElement(Py:PASS_KEYWORD)('pass') \ 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 f3c454d588e9..4e9ded661510 100644 --- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java @@ -263,6 +263,10 @@ public class PythonParsingTest extends ParsingTestCase { doTest(); } + public void testMissingDefaultValue() { // PY-3253 + doTest(); + } + public void doTest() { doTest(LanguageLevel.PYTHON25); }