diff options
author | orSolocate <38433858+orSolocate@users.noreply.github.com> | 2022-03-26 15:47:26 +0300 |
---|---|---|
committer | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2022-03-26 13:58:09 +0100 |
commit | 4a057941a0a30e2fa6d485416ca4167cda6bf6fb (patch) | |
tree | 672f5ab6b823599d09850bf604738a4118f3514f | |
parent | ef2e17662313c94a12c842d8f763583b5ed42cf6 (diff) | |
download | pylint-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-- | ChangeLog | 5 | ||||
-rw-r--r-- | pylint/checkers/modified_iterating_checker.py | 5 | ||||
-rw-r--r-- | tests/functional/m/modified_iterating.py | 16 |
3 files changed, 24 insertions, 2 deletions
@@ -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 |