Allow assign to () and [] (PY-27041)

This commit is contained in:
Semyon Proshev
2017-11-20 21:05:46 +03:00
parent 891b423d16
commit 0a3c7682e9
4 changed files with 9 additions and 7 deletions

View File

@@ -730,7 +730,6 @@ ANN.cant.aug.assign.to.tuple.or.generator=Augmented assign to tuple literal or g
ANN.cant.assign.to.generator=Assign to generator expression not possible
ANN.cant.assign.to.operator=Can't assign to operator
ANN.cant.assign.to.parens=Can't assign to ()
ANN.cant.assign.to.brackets=Can't assign to []
ANN.cant.aug.assign.to.list.or.comprh=Augmented assign to list literal or comprehension not possible
ANN.cant.assign.to.comprh=Can't assign to list comprehension
ANN.cant.assign.to.dict.comprh=Can't assign to dict comprehension

View File

@@ -130,7 +130,7 @@ public class AssignTargetAnnotator extends PyAnnotator {
@Override
public void visitPyTupleExpression(final PyTupleExpression node) {
if (node.isEmpty()) {
if (node.isEmpty() && LanguageLevel.forElement(node).isPython2()) {
getHolder().createErrorAnnotation(node, message("ANN.cant.assign.to.parens"));
}
else if (myOp == Operation.AugAssign) {
@@ -153,10 +153,7 @@ public class AssignTargetAnnotator extends PyAnnotator {
@Override
public void visitPyListLiteralExpression(final PyListLiteralExpression node) {
if (node.isEmpty()) {
getHolder().createErrorAnnotation(node, message("ANN.cant.assign.to.brackets"));
}
else if (myOp == Operation.AugAssign) {
if (myOp == Operation.AugAssign) {
getHolder().createErrorAnnotation(node, message("ANN.cant.aug.assign.to.list.or.comprh"));
}
else {
@@ -197,10 +194,12 @@ public class AssignTargetAnnotator extends PyAnnotator {
checkLiteral(node);
}
@Override
public void visitPyNumericLiteralExpression(final PyNumericLiteralExpression node) {
checkLiteral(node);
}
@Override
public void visitPyStringLiteralExpression(final PyStringLiteralExpression node) {
checkLiteral(node);
}
@@ -209,6 +208,7 @@ public class AssignTargetAnnotator extends PyAnnotator {
getHolder().createErrorAnnotation(node, message(myOp == Operation.Delete? "ANN.cant.delete.literal" : "ANN.cant.assign.to.literal"));
}
@Override
public void visitPyLambdaExpression(final PyLambdaExpression node) {
getHolder().createErrorAnnotation(node, message("ANN.cant.assign.to.lambda"));
}

View File

@@ -9,7 +9,7 @@
result = <error descr="Can't assign to operator">a < c and c</error> = 4
<error descr="Can't assign to ()">()</error> = 123
<error descr="Can't assign to []">[]</error> = 1
[] = 1
[<error descr="Can't assign to literal">1</error>] = 1
<error descr="Can't assign to literal">{}</error> = 1
<error descr="Can't assign to literal">{1, 2, 3}</error> = 1

View File

@@ -9,3 +9,6 @@ a, *b, c = seq
<error descr="assignment to keyword">False</error> = 1
<error descr="assignment to keyword">None</error> = 0
<error descr="assignment to keyword">__debug__</error> = -1
() = []
[] = []