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 24, 2022
1 parent a9c1cda commit 6abd0a0
Show file tree
Hide file tree
Showing 3 changed files with 21 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 @@ -2306,15 +2306,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
11 changes: 11 additions & 0 deletions tests/functional/u/unnecessary/unnecessary_list_index_lookup.py
Expand Up @@ -138,3 +138,14 @@ def return_start(start):

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 6abd0a0

Please sign in to comment.