Assignment to await expressions is forbidden now

This commit is contained in:
Semyon Proshev
2016-07-08 13:47:38 +03:00
parent de9258e460
commit 61b92120d7
3 changed files with 49 additions and 2 deletions
@@ -972,12 +972,21 @@ public class ExpressionParsing extends Parsing {
private boolean parseAwaitExpression(boolean isTargetExpression) {
if (atToken(PyTokenTypes.AWAIT_KEYWORD)) {
PsiBuilder.Marker expr = myBuilder.mark();
final PsiBuilder.Marker expr = myBuilder.mark();
myBuilder.advanceLexer();
if (!parseMemberExpression(isTargetExpression)) {
myBuilder.error(message("PARSE.expected.expression"));
expr.done(PyElementTypes.PREFIX_EXPRESSION);
}
expr.done(PyElementTypes.PREFIX_EXPRESSION);
else {
if (isTargetExpression) {
expr.error("can't assign to await expression");
} else {
expr.done(PyElementTypes.PREFIX_EXPRESSION);
}
}
return true;
}
else {
+5
View File
@@ -2,4 +2,9 @@ async def f(x):
await x
async def g(y):
await x = 5
await y
await = 1
+33
View File
@@ -20,6 +20,39 @@ PyFile:Await.py
PyReferenceExpression: x
PsiElement(Py:IDENTIFIER)('x')
PsiWhiteSpace('\n\n\n')
PyFunction('g')
PsiElement(Py:ASYNC_KEYWORD)('async')
PsiWhiteSpace(' ')
PsiElement(Py:DEF_KEYWORD)('def')
PsiWhiteSpace(' ')
PsiElement(Py:IDENTIFIER)('g')
PyParameterList
PsiElement(Py:LPAR)('(')
PyNamedParameter('y')
PsiElement(Py:IDENTIFIER)('y')
PsiElement(Py:RPAR)(')')
PsiElement(Py:COLON)(':')
PsiWhiteSpace('\n ')
PyStatementList
PyAssignmentStatement
PsiErrorElement:can't assign to await expression
PsiElement(Py:AWAIT_KEYWORD)('await')
PsiWhiteSpace(' ')
PyTargetExpression: x
PsiElement(Py:IDENTIFIER)('x')
PsiWhiteSpace(' ')
PsiElement(Py:EQ)('=')
PsiWhiteSpace(' ')
PyNumericLiteralExpression
PsiElement(Py:INTEGER_LITERAL)('5')
PsiWhiteSpace('\n ')
PyExpressionStatement
PyPrefixExpression
PsiElement(Py:AWAIT_KEYWORD)('await')
PsiWhiteSpace(' ')
PyReferenceExpression: y
PsiElement(Py:IDENTIFIER)('y')
PsiWhiteSpace('\n\n\n')
PyAssignmentStatement
PyTargetExpression: await
PsiElement(Py:IDENTIFIER)('await')