diff --git a/python/src/com/jetbrains/python/parsing/FunctionParsing.java b/python/src/com/jetbrains/python/parsing/FunctionParsing.java index 65709882d37c..79e1c0f67c0d 100644 --- a/python/src/com/jetbrains/python/parsing/FunctionParsing.java +++ b/python/src/com/jetbrains/python/parsing/FunctionParsing.java @@ -225,7 +225,7 @@ public class FunctionParsing extends Parsing { nextToken(); } invalidElements.error(message("PARSE.expected.formal.param.name")); - return false; + return atToken(endToken) || atToken(PyTokenTypes.COMMA); } return true; } diff --git a/python/testData/psi/KeywordAsNamedParameter.py b/python/testData/psi/KeywordAsNamedParameter.py new file mode 100644 index 000000000000..6694d8edbc21 --- /dev/null +++ b/python/testData/psi/KeywordAsNamedParameter.py @@ -0,0 +1,2 @@ +def f(from=1, another_one=2): + pass \ No newline at end of file diff --git a/python/testData/psi/KeywordAsNamedParameter.txt b/python/testData/psi/KeywordAsNamedParameter.txt new file mode 100644 index 000000000000..51d4413bd2eb --- /dev/null +++ b/python/testData/psi/KeywordAsNamedParameter.txt @@ -0,0 +1,24 @@ +PyFile:KeywordAsNamedParameter.py + PyFunction('f') + PsiElement(Py:DEF_KEYWORD)('def') + PsiWhiteSpace(' ') + PsiElement(Py:IDENTIFIER)('f') + PyParameterList + PsiElement(Py:LPAR)('(') + PsiErrorElement:formal parameter name expected + PsiElement(Py:FROM_KEYWORD)('from') + PsiElement(Py:EQ)('=') + PsiElement(Py:INTEGER_LITERAL)('1') + PsiElement(Py:COMMA)(',') + PsiWhiteSpace(' ') + PyNamedParameter('another_one') + PsiElement(Py:IDENTIFIER)('another_one') + PsiElement(Py:EQ)('=') + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('2') + 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 4dcef353c7f1..ec0528d79efa 100644 --- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java @@ -406,6 +406,10 @@ public class PythonParsingTest extends ParsingTestCase { doTest(); } + public void testKeywordAsNamedParameter() { // PY-8318 + doTest(); + } + public void doTest(LanguageLevel languageLevel) { LanguageLevel prev = myLanguageLevel; myLanguageLevel = languageLevel;