summaryrefslogtreecommitdiff
path: root/tests/functional/m/modified_iterating.py
blob: 2dae6c1069ed4143162ec04e0731025f9b415859 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
"""Tests for iterating-modified messages"""
# pylint: disable=not-callable,unnecessary-comprehension,too-few-public-methods,missing-class-docstring,missing-function-docstring

import copy
from enum import Enum

item_list = [1, 2, 3]
for item in item_list:
    item_list.append(item)  # [modified-iterating-list]

for item in item_list:
    item_list.remove(item)  # [modified-iterating-list]

for item in item_list.copy():
    item_list.append(item)
    item_list.remove(item)

for item in copy(item_list):
    item_list.append(item)
    item_list.remove(item)

for item in [k for k in item_list]:
    item_list.append(item)
    item_list.remove(item)

my_dict = {"1": 1, "2": 2, "3": 3}
i = 1
for item in my_dict:
    item_list[0] = i  # for coverage, see reference at /pull/5628#discussion_r792181642
    my_dict[i] = 1  # [modified-iterating-dict]
    i += 1

i = 1
for item in my_dict.copy():
    my_dict[i] = 1
    i += 1

item_set = {1, 2, 3}
for item in item_set:
    item_set.add(item + 10)  # [modified-iterating-set]

for item in item_set.copy():
    item_set.add(item + 10)

for l in item_list:
    for s in item_set:
        item_list.append(1)  # [modified-iterating-list]
        item_set.remove(4)  # [modified-iterating-set]
    item_list.remove(1)  # [modified-iterating-list]

for item in [1, 2, 3]:
    del item  # [modified-iterating-list]

for inner_first, inner_second in [[1, 2], [1, 2]]:
    del inner_second  # [modified-iterating-list]

for k in my_dict:
    del k  # [modified-iterating-dict]

for element in item_set:
    del element  # [modified-iterating-set]

# Check for nested for loops and changes to iterators
for l in item_list:
    item_list.append(1)  # [modified-iterating-list]
    for _ in []:
        for _ in []:
            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


def update_existing_key():
    """No message when updating existing keys"""
    for key in my_dict:
        my_dict[key] = 1

    for key in my_dict:
        new_key = key.lower()
        my_dict[new_key] = 1  # [modified-iterating-dict]


class MyClass:
    """Regression test for https://github.com/pylint-dev/pylint/issues/7380"""

    def __init__(self) -> None:
        self.attribute = [1, 2, 3]

    def my_method(self):
        """This should raise as we are deleting."""
        for var in self.attribute:
            del var  # [modified-iterating-list]


class MyClass2:
    """Regression test for https://github.com/pylint-dev/pylint/issues/7461"""
    def __init__(self) -> None:
        self.attribute = {}

    def my_method(self):
        """This should not raise, as a copy was made."""
        for key in self.attribute:
            tmp = self.attribute.copy()
            tmp[key] = None

class MyEnum(Enum):
    FOO = 1
    BAR = 2

class EnumClass:
    ENUM_SET = {MyEnum.FOO, MyEnum.BAR}

    def useless(self):
        other_set = set(self.ENUM_SET)
        for obj in self.ENUM_SET:
            other_set.remove(obj)