Skip to content

Commit be7bda6

Browse files
committed
Fix use-sequence-for-iteration when unpacking a set with *.
Closes pylint-dev#5788
1 parent 2ae0e98 commit be7bda6

File tree

5 files changed

+20
-5
lines changed

5 files changed

+20
-5
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Fix ``use-sequence-for-iteration`` when unpacking a set with ``*``.
2+
3+
Closes #5788

pylint/checkers/refactoring/recommendation_checker.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -333,8 +333,13 @@ def _check_consider_using_dict_items_comprehension(
333333
def _check_use_sequence_for_iteration(
334334
self, node: nodes.For | nodes.Comprehension
335335
) -> None:
336-
"""Check if code iterates over an in-place defined set."""
337-
if isinstance(node.iter, nodes.Set):
336+
"""Check if code iterates over an in-place defined set.
337+
338+
Sets using `*` are not considered in-place.
339+
"""
340+
if isinstance(node.iter, nodes.Set) and not any(
341+
isinstance(x, nodes.Starred) for x in node.iter.elts
342+
):
338343
self.add_message("use-sequence-for-iteration", node=node.iter)
339344

340345
@utils.only_required_for_messages("consider-using-f-string")

tests/functional/ext/code_style/cs_consider_using_tuple.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,4 @@
2828

2929
# Don't emit warning for sets as this is handled by builtin checker
3030
(x for x in {1, 2, 3}) # [use-sequence-for-iteration]
31-
[x for x in {*var, 2}] # [use-sequence-for-iteration]
31+
[x for x in {*var, 2}]

tests/functional/u/use/use_sequence_for_iteration.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,12 @@
1313
[x for x in var]
1414
[x for x in {1, 2, 3}] # [use-sequence-for-iteration]
1515

16-
[x for x in {*var, 4}] # [use-sequence-for-iteration]
16+
[x for x in {*var, 4}]
17+
18+
def deduplicate(list_in):
19+
for thing in {*list_in}:
20+
print(thing)
21+
22+
def deduplicate_two_lists(input1, input2):
23+
for thing in {*input1, *input2}:
24+
print(thing)
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
use-sequence-for-iteration:7:9:7:18::Use a sequence type when iterating over values:UNDEFINED
22
use-sequence-for-iteration:11:12:11:21::Use a sequence type when iterating over values:UNDEFINED
33
use-sequence-for-iteration:14:12:14:21::Use a sequence type when iterating over values:UNDEFINED
4-
use-sequence-for-iteration:16:12:16:21::Use a sequence type when iterating over values:UNDEFINED

0 commit comments

Comments
 (0)