From 0a309bf7d487d92612ecd213686dc5500833f27d Mon Sep 17 00:00:00 2001 From: naglis <827324+naglis@users.noreply.github.com> Date: Mon, 19 Feb 2024 13:45:05 +0200 Subject: [PATCH] Detect list being mutated by `del` statement Avoid `use-tuple-over-list` false positives when a list is being mutated by a `del` statement. --- perflint/list_checker.py | 2 +- tests/test_list_checker.py | 22 +++++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/perflint/list_checker.py b/perflint/list_checker.py index 068f225..a4dcb60 100644 --- a/perflint/list_checker.py +++ b/perflint/list_checker.py @@ -73,7 +73,7 @@ def _mark_mutated(self, _name: nodes.Name): del self._lists_to_watch[0][_name.name] def visit_subscript(self, node: nodes.Subscript): - if not isinstance(node.parent, nodes.Assign): + if not isinstance(node.parent, (nodes.Assign, nodes.Delete)): return if not isinstance(node.value, nodes.Name): return diff --git a/tests/test_list_checker.py b/tests/test_list_checker.py index 0835f46..d50deb6 100644 --- a/tests/test_list_checker.py +++ b/tests/test_list_checker.py @@ -45,6 +45,16 @@ def test(): #@ with self.assertNoMessages(): self.walk(test_func) + def test_mutated_list_by_del(self): + test_func = astroid.extract_node(""" + def test(): + items = [1,2,3,4] + del items[0] + """) + + with self.assertNoMessages(): + self.walk(test_func) + def test_mutated_global_list_by_index(self): test_func = astroid.extract_node(""" items = [1,2,3,4] @@ -63,4 +73,14 @@ def test(): #@ """) with self.assertNoMessages(): - self.walk(test_func) \ No newline at end of file + self.walk(test_func) + + def test_mutated_global_list_by_del(self): + test_func = astroid.extract_node(""" + items = [1,2,3,4] + def test(): + del items[0] + """) + + with self.assertNoMessages(): + self.walk(test_func)