aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/tools/skylark/java/com/google/devtools/skylark/skylint/BadOperationChecker.java8
-rw-r--r--src/tools/skylark/javatests/com/google/devtools/skylark/skylint/BadOperationCheckerTest.java5
2 files changed, 12 insertions, 1 deletions
diff --git a/src/tools/skylark/java/com/google/devtools/skylark/skylint/BadOperationChecker.java b/src/tools/skylark/java/com/google/devtools/skylark/skylint/BadOperationChecker.java
index 09df8ff7fe..cb9460ad01 100644
--- a/src/tools/skylark/java/com/google/devtools/skylark/skylint/BadOperationChecker.java
+++ b/src/tools/skylark/java/com/google/devtools/skylark/skylint/BadOperationChecker.java
@@ -137,7 +137,13 @@ public class BadOperationChecker extends AstVisitorWithNameResolution {
@Override
public void visit(AugmentedAssignmentStatement node) {
super.visit(node);
- Identifier ident = Iterables.getOnlyElement(node.getLValue().boundIdentifiers());
+ ImmutableSet<Identifier> lvalues = node.getLValue().boundIdentifiers();
+ if (lvalues.size() != 1) {
+ // assignment visitor does not track information about assignments to IndexExpressions like
+ // kwargs["name"] += "foo" so nothing to do here until that changes
+ return;
+ }
+ Identifier ident = Iterables.getOnlyElement(lvalues);
NodeType identType = getInferredTypeOrNull(ident);
NodeType expressionType = getInferredTypeOrNull(node.getExpression());
if (identType == NodeType.DICT || expressionType == NodeType.DICT) {
diff --git a/src/tools/skylark/javatests/com/google/devtools/skylark/skylint/BadOperationCheckerTest.java b/src/tools/skylark/javatests/com/google/devtools/skylark/skylint/BadOperationCheckerTest.java
index 27c1063147..20cd662de7 100644
--- a/src/tools/skylark/javatests/com/google/devtools/skylark/skylint/BadOperationCheckerTest.java
+++ b/src/tools/skylark/javatests/com/google/devtools/skylark/skylint/BadOperationCheckerTest.java
@@ -152,4 +152,9 @@ public class BadOperationCheckerTest {
.contains("1:1-1:5: '/' operator is deprecated");
Truth.assertThat(findIssues("5 // 2")).isEmpty();
}
+
+ @Test
+ public void augmentedAssignmentOperator() {
+ Truth.assertThat(findIssues("kwargs['name'] += 'foo'")).isEmpty();
+ }
}