summaryrefslogtreecommitdiff
path: root/tests/functional/u/unnecessary/unnecessary_list_index_lookup.py
blob: ec5ee22c204913a9ced97c66a0ce10220df4d1b6 (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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
"""Tests for unnecessary-list-index-lookup."""

# pylint: disable=missing-docstring, too-few-public-methods, expression-not-assigned, line-too-long, unused-variable

my_list = ['a', 'b']

for idx, val in enumerate(my_list):
    print(my_list[idx]) # [unnecessary-list-index-lookup]

for idx, _ in enumerate(my_list):
    print(my_list[0])
    if idx > 0:
        print(my_list[idx - 1])

for idx, val in enumerate(my_list):
    del my_list[idx]

for idx, val in enumerate(my_list):
    my_list[idx] = 42

for vals in enumerate(my_list):
    # This could be refactored, but too complex to infer
    print(my_list[vals[0]])

def process_list(data):
    for index, value in enumerate(data):
        index = 1
        print(data[index])

def process_list_again(data):
    for index, value in enumerate(data):
        value = 1
        print(data[index]) # Can't use value here, it's been redefined

other_list = [1, 2]
for idx, val in enumerate(my_list):
    print(other_list[idx])

OTHER_INDEX = 0
for idx, val in enumerate(my_list):
    print(my_list[OTHER_INDEX])

result = [val for idx, val in enumerate(my_list) if my_list[idx] == 'a'] # [unnecessary-list-index-lookup]
result = [val for idx, val in enumerate(my_list) if idx > 0 and my_list[idx - 1] == 'a']
result = [val for idx, val in enumerate(my_list) if other_list[idx] == 'a']
result = [my_list[idx] for idx, val in enumerate(my_list)] # [unnecessary-list-index-lookup]

# Regression test for https://github.com/PyCQA/pylint/issues/6049
pairs = [(0, 0)]
for i, (a, b) in enumerate(pairs):
    print(pairs[i][0])

# Regression test for https://github.com/PyCQA/pylint/issues/6603
for i, num in enumerate():  # raises TypeError, but shouldn't crash pylint
    pass

# Regression test for https://github.com/PyCQA/pylint/issues/6788
num_list = [1, 2, 3]
for a, b in enumerate(num_list):
    num_list[a], _ = (2, 1)

num_list = [1, 2, 3]
for a, b in enumerate(num_list):
    ([x, num_list[a]], _) = ([5, 6], 1)

# Regression test for https://github.com/PyCQA/pylint/issues/6818
updated_list = [1, 2, 3]
for idx, val in enumerate(updated_list):
    while updated_list[idx] > 0:
        updated_list[idx] -= 1

updated_list = [1, 2, 3]
for idx, val in enumerate(updated_list):
    print(updated_list[idx]) # [unnecessary-list-index-lookup]
    updated_list[idx] -= 1
    print(updated_list[idx])

# Regression test for https://github.com/PyCQA/pylint/issues/6896
parts = ["a", "b", "c", "d"]
for i, part in enumerate(parts):
    if i == 3:  # more complex condition actually
        parts.insert(i, "X")
    print(part, parts[i])

# regression tests for https://github.com/PyCQA/pylint/issues/7682
series = [1, 2, 3, 4, 5]
output_list = [
    (item, series[index])
    for index, item in enumerate(series, start=1)
    if index < len(series)
]

output_list = [
    (item, series[index])
    for index, item in enumerate(series, 1)
    if index < len(series)
]

for idx, val in enumerate(series, start=2):
    print(series[idx])

for idx, val in enumerate(series, 2):
    print(series[idx])

for idx, val in enumerate(series, start=-2):
    print(series[idx])

for idx, val in enumerate(series, -2):
    print(series[idx])

for idx, val in enumerate(series, start=0):
    print(series[idx])  # [unnecessary-list-index-lookup]

for idx, val in enumerate(series, 0):
    print(series[idx])  # [unnecessary-list-index-lookup]

START = 0
for idx, val in enumerate(series, start=START):
    print(series[idx])  # [unnecessary-list-index-lookup]

for idx, val in enumerate(series, START):
    print(series[idx])  # [unnecessary-list-index-lookup]

START = [1, 2, 3]
for i, k in enumerate(series, len(START)):
    print(series[idx])

def return_start(start):
    return start

for i, k in enumerate(series, return_start(20)):
    print(series[idx])

for idx, val in enumerate(iterable=series, start=0):
    print(series[idx])  # [unnecessary-list-index-lookup]

result = [my_list[idx] for idx, val in enumerate(iterable=my_list)]  # [unnecessary-list-index-lookup]

for idx, val in enumerate():
    print(my_list[idx])

class Command:
    def _get_extra_attrs(self, extra_columns):
        self.extra_rows_start = 8  # pylint: disable=attribute-defined-outside-init
        for index, column in enumerate(extra_columns, start=self.extra_rows_start):
            pass

Y_START = 2
nums = list(range(20))
for y, x in enumerate(nums, start=Y_START + 1):
    pass