Skip to content

Commit

Permalink
Fix crash when using enumerate with start and a class attribu…
Browse files Browse the repository at this point in the history
…te (#7824)

Co-authored-by: Pierre Sassoulas <pierre.sassoulas@gmail.com>
  • Loading branch information
clavedeluna and Pierre-Sassoulas committed Nov 25, 2022
1 parent ebf2824 commit 86b8c64
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 9 deletions.
3 changes: 3 additions & 0 deletions doc/whatsnew/fragments/7821.bugfix
@@ -0,0 +1,3 @@
Fixes a crash in the ``unnecessary_list_index_lookup`` check when using ``enumerate`` with ``start`` and a class attribute.

Closes #7821
16 changes: 7 additions & 9 deletions pylint/checkers/refactoring/refactoring_checker.py
Expand Up @@ -2248,15 +2248,13 @@ def _enumerate_with_start(
return False, confidence

def _get_start_value(self, node: nodes.NodeNG) -> tuple[int | None, Confidence]:
confidence = HIGH

if isinstance(node, (nodes.Name, nodes.Call)):
if isinstance(node, (nodes.Name, nodes.Call, nodes.Attribute)):
inferred = utils.safe_infer(node)
start_val = inferred.value if inferred else None
confidence = INFERENCE
elif isinstance(node, nodes.UnaryOp):
start_val = node.operand.value
else:
start_val = node.value
return start_val, INFERENCE
if isinstance(node, nodes.UnaryOp):
return node.operand.value, HIGH
if isinstance(node, nodes.Const):
return node.value, HIGH

return start_val, confidence
return None, HIGH
19 changes: 19 additions & 0 deletions tests/functional/u/unnecessary/unnecessary_list_index_lookup.py
Expand Up @@ -130,3 +130,22 @@ def return_start(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

0 comments on commit 86b8c64

Please sign in to comment.