summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authororSolocate <38433858+orSolocate@users.noreply.github.com>2022-03-26 15:47:26 +0300
committerPierre Sassoulas <pierre.sassoulas@gmail.com>2022-03-26 13:58:09 +0100
commit4a057941a0a30e2fa6d485416ca4167cda6bf6fb (patch)
tree672f5ab6b823599d09850bf604738a4118f3514f
parentef2e17662313c94a12c842d8f763583b5ed42cf6 (diff)
downloadpylint-git-4a057941a0a30e2fa6d485416ca4167cda6bf6fb.tar.gz
Fix issue #5969 for `modified_iterating-list` (#5986)
When the list/dict/set being iterated through is a function call. Co-authored-by: Pierre Sassoulas <pierre.sassoulas@gmail.com>
-rw-r--r--ChangeLog5
-rw-r--r--pylint/checkers/modified_iterating_checker.py5
-rw-r--r--tests/functional/m/modified_iterating.py16
3 files changed, 24 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index ea6f7701e..be25eceb2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -39,6 +39,11 @@ Release date: TBA
Closes #5187
+* Fix program crash for ``modified_iterating-list/set/dict`` when the list/dict/set
+ being iterated through is a function call.
+
+ Closes #5969
+
* Don't emit ``broken-noreturn`` and ``broken-collections-callable`` errors
inside ``if TYPE_CHECKING`` blocks.
diff --git a/pylint/checkers/modified_iterating_checker.py b/pylint/checkers/modified_iterating_checker.py
index d1fe08d40..ca2a0c900 100644
--- a/pylint/checkers/modified_iterating_checker.py
+++ b/pylint/checkers/modified_iterating_checker.py
@@ -57,8 +57,9 @@ class ModifiedIterationChecker(checkers.BaseChecker):
)
def visit_for(self, node: nodes.For) -> None:
iter_obj = node.iter
- for body_node in node.body:
- self._modified_iterating_check_on_node_and_children(body_node, iter_obj)
+ if isinstance(iter_obj, nodes.Name):
+ for body_node in node.body:
+ self._modified_iterating_check_on_node_and_children(body_node, iter_obj)
def _modified_iterating_check_on_node_and_children(
self, body_node: nodes.NodeNG, iter_obj: nodes.NodeNG
diff --git a/tests/functional/m/modified_iterating.py b/tests/functional/m/modified_iterating.py
index 32155fbc8..8817c1db0 100644
--- a/tests/functional/m/modified_iterating.py
+++ b/tests/functional/m/modified_iterating.py
@@ -55,3 +55,19 @@ for l in item_list:
item_list.remove(1) # [modified-iterating-list]
for _ in []:
item_list.append(1) # [modified-iterating-list]
+
+
+def format_manifest_serializer_errors(errors):
+ """Regression test for issue #5969 - iter_obj is a function call."""
+ errors_messages = []
+ for key, value in errors.items():
+ for message in format_manifest_serializer_errors(value):
+ error_message = f"{key}: {message}"
+ errors_messages.append(error_message)
+ return errors_messages
+
+
+dict1 = {"1": 1}
+dict2 = {"2": 2}
+for item in dict1:
+ dict2[item] = 1