From dba64fbcea659443c0fd085e7bde7e397a9d323a Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 28 Jun 2011 17:56:01 +0200 Subject: [PATCH] a trailing comma in argument list is not an error (PY-4016) --- .../python/parsing/FunctionParsing.java | 3 +++ python/testData/psi/TrailingCommaInArgList.py | 2 ++ python/testData/psi/TrailingCommaInArgList.txt | 16 ++++++++++++++++ .../com/jetbrains/python/PythonParsingTest.java | 4 ++++ 4 files changed, 25 insertions(+) create mode 100644 python/testData/psi/TrailingCommaInArgList.py create mode 100644 python/testData/psi/TrailingCommaInArgList.txt diff --git a/python/src/com/jetbrains/python/parsing/FunctionParsing.java b/python/src/com/jetbrains/python/parsing/FunctionParsing.java index a91532380914..70c2bb67bbab 100644 --- a/python/src/com/jetbrains/python/parsing/FunctionParsing.java +++ b/python/src/com/jetbrains/python/parsing/FunctionParsing.java @@ -157,6 +157,9 @@ public class FunctionParsing extends Parsing { } else { parameter.rollbackTo(); + if (atToken(endToken)) { + break; + } PsiBuilder.Marker invalidElements = myBuilder.mark(); while (!atToken(endToken) && !atToken(PyTokenTypes.LINE_BREAK) && !atToken(PyTokenTypes.COMMA) && !atToken(null)) { nextToken(); diff --git a/python/testData/psi/TrailingCommaInArgList.py b/python/testData/psi/TrailingCommaInArgList.py new file mode 100644 index 000000000000..9abd27d64348 --- /dev/null +++ b/python/testData/psi/TrailingCommaInArgList.py @@ -0,0 +1,2 @@ +def some_function(a,): + pass \ No newline at end of file diff --git a/python/testData/psi/TrailingCommaInArgList.txt b/python/testData/psi/TrailingCommaInArgList.txt new file mode 100644 index 000000000000..5d107c77c9b2 --- /dev/null +++ b/python/testData/psi/TrailingCommaInArgList.txt @@ -0,0 +1,16 @@ +PyFile:TrailingCommaInArgList.py + PyFunction('some_function') + PsiElement(Py:DEF_KEYWORD)('def') + PsiWhiteSpace(' ') + PsiElement(Py:IDENTIFIER)('some_function') + PyParameterList + PsiElement(Py:LPAR)('(') + PyNamedParameter('a') + PsiElement(Py:IDENTIFIER)('a') + PsiElement(Py:COMMA)(',') + 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 65fd7b5ed108..75115b2d16a0 100644 --- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java @@ -271,6 +271,10 @@ public class PythonParsingTest extends ParsingTestCase { doTest(); } + public void testTrailingCommaInArgList() { // PY-4016 + doTest(); + } + public void doTest() { doTest(LanguageLevel.PYTHON25); }