Skip to content

Commit 68faccb

Browse files
committed
Added logic to check for augassign statements
1 parent 9d4f47f commit 68faccb

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

pylint/checkers/refactoring/recommendation_checker.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def _check_consider_using_enumerate(self, node: astroid.For) -> None:
135135
return
136136

137137
def _check_consider_using_dict_items(self, node: astroid.For) -> None:
138-
"""Emit a convention when dict key used to index dict."""
138+
"""Add message when accessing dict values by index lookup."""
139139
# Verify that we have a .keys() call and
140140
# that the object which is iterated is used as a subscript in the
141141
# body of the for.
@@ -173,8 +173,10 @@ def _check_consider_using_dict_items(self, node: astroid.For) -> None:
173173
# defined and compare that to the for loop's line number
174174
continue
175175
if (
176-
isinstance(subscript.parent, astroid.Assign)
176+
isinstance(subscript.parent, (astroid.Assign))
177177
and subscript in subscript.parent.targets
178+
or isinstance(subscript.parent, (astroid.AugAssign))
179+
and subscript == subscript.parent.target
178180
):
179181
# Ignore this subscript if it is the target of an assignment
180182
continue
@@ -190,7 +192,7 @@ def visit_comprehension(self, node: astroid.Comprehension) -> None:
190192

191193
children = list(node.parent.get_children())
192194
if node.ifs:
193-
children += node.ifs
195+
children.extend(node.ifs)
194196
for child in children:
195197
for subscript in child.nodes_of_class(astroid.Subscript):
196198
subscript = cast(astroid.Subscript, subscript)

tests/functional/c/consider/consider_using_dict_items.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ def another_good():
3434
for k2 in b_dict: # Should not emit warning, key access necessary
3535
b_dict[k2] = 2
3636

37+
for k2 in b_dict: # Should not emit warning, key access necessary (augassign)
38+
b_dict[k2] += 2
39+
3740
# Warning should be emitted in this case
3841
for k6 in b_dict: # [consider-using-dict-items]
3942
val = b_dict[k6]
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
consider-using-dict-items:7:4:bad:Consider iterating with .items()
22
consider-using-dict-items:10:4:bad:Consider iterating with .items()
33
consider-using-dict-items:22:4:another_bad:Consider iterating with .items()
4-
consider-using-dict-items:38:0::Consider iterating with .items()
5-
consider-using-dict-items:42:0::Consider iterating with .items()
6-
consider-iterating-dictionary:45:10::Consider iterating the dictionary directly instead of calling .keys()
4+
consider-using-dict-items:41:0::Consider iterating with .items()
75
consider-using-dict-items:45:0::Consider iterating with .items()
8-
consider-using-dict-items:52:0::Consider iterating with .items()
9-
consider-using-dict-items:56:0::Consider iterating with .items()
10-
consider-using-dict-items:57:0::Consider iterating with .items()
6+
consider-iterating-dictionary:48:10::Consider iterating the dictionary directly instead of calling .keys()
7+
consider-using-dict-items:48:0::Consider iterating with .items()
8+
consider-using-dict-items:55:0::Consider iterating with .items()
9+
consider-using-dict-items:59:0::Consider iterating with .items()
1110
consider-using-dict-items:60:0::Consider iterating with .items()
12-
consider-using-dict-items:61:0::Consider iterating with .items()
11+
consider-using-dict-items:63:0::Consider iterating with .items()
1312
consider-using-dict-items:64:0::Consider iterating with .items()
13+
consider-using-dict-items:67:0::Consider iterating with .items()

0 commit comments

Comments
 (0)