Fixed parsing ellipsis as an expression in Python 3 (PY-8257)

In Python 3 ellipsis can appear anywhere, not only in sequence slicings. The parser
now always passes ellipsis, it's incorrect use is detected at the unsupported features
annotator or compatibility inspection levels.
This commit is contained in:
Andrey Vlasovskikh
2013-02-18 16:08:33 +04:00
parent 8b5b707e9c
commit 377662303c
14 changed files with 164 additions and 98 deletions
@@ -1,5 +0,0 @@
def a():
... # <- highlighted as "Statement seems to have no effect"
pass
a()
@@ -1,33 +0,0 @@
PyFile:EllipsisAsStatement.py
PyFunction('a')
PsiElement(Py:DEF_KEYWORD)('def')
PsiWhiteSpace(' ')
PsiElement(Py:IDENTIFIER)('a')
PyParameterList
PsiElement(Py:LPAR)('(')
PsiElement(Py:RPAR)(')')
PsiElement(Py:COLON)(':')
PsiWhiteSpace('\n ')
PyStatementList
PsiElement(Py:DOT)('.')
PsiErrorElement:Statement expected, found Py:DOT
<empty list>
PsiElement(Py:DOT)('.')
PsiErrorElement:Statement expected, found Py:DOT
<empty list>
PsiElement(Py:DOT)('.')
PsiErrorElement:Statement expected, found Py:DOT
<empty list>
PsiWhiteSpace(' ')
PsiComment(Py:END_OF_LINE_COMMENT)('# <- highlighted as "Statement seems to have no effect"')
PsiWhiteSpace('\n ')
PyPassStatement
PsiElement(Py:PASS_KEYWORD)('pass')
PsiWhiteSpace('\n\n')
PyExpressionStatement
PyCallExpression: a
PyReferenceExpression: a
PsiElement(Py:IDENTIFIER)('a')
PyArgumentList
PsiElement(Py:LPAR)('(')
PsiElement(Py:RPAR)(')')
+5
View File
@@ -0,0 +1,5 @@
...
x = ...
[1, 2, ...]
def f():
...
+50
View File
@@ -0,0 +1,50 @@
PyFile:EllipsisPython3.py
PyExpressionStatement
PyNoneLiteralExpression
PsiElement(Py:DOT)('.')
PsiElement(Py:DOT)('.')
PsiElement(Py:DOT)('.')
PsiWhiteSpace('\n')
PyAssignmentStatement
PyTargetExpression: x
PsiElement(Py:IDENTIFIER)('x')
PsiWhiteSpace(' ')
PsiElement(Py:EQ)('=')
PsiWhiteSpace(' ')
PyNoneLiteralExpression
PsiElement(Py:DOT)('.')
PsiElement(Py:DOT)('.')
PsiElement(Py:DOT)('.')
PsiWhiteSpace('\n')
PyExpressionStatement
PyListLiteralExpression
PsiElement(Py:LBRACKET)('[')
PyNumericLiteralExpression
PsiElement(Py:INTEGER_LITERAL)('1')
PsiElement(Py:COMMA)(',')
PsiWhiteSpace(' ')
PyNumericLiteralExpression
PsiElement(Py:INTEGER_LITERAL)('2')
PsiElement(Py:COMMA)(',')
PsiWhiteSpace(' ')
PyNoneLiteralExpression
PsiElement(Py:DOT)('.')
PsiElement(Py:DOT)('.')
PsiElement(Py:DOT)('.')
PsiElement(Py:RBRACKET)(']')
PsiWhiteSpace('\n')
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
PyNoneLiteralExpression
PsiElement(Py:DOT)('.')
PsiElement(Py:DOT)('.')
PsiElement(Py:DOT)('.')