Skip to content

Commit 55f1482

Browse files
Fix crash when an attribute node was used inside an unary op (#8209) (#8225)
Closes #8207 (cherry picked from commit 70f7e3a) Co-authored-by: Pierre Sassoulas <[email protected]>
1 parent 3c27c47 commit 55f1482

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

doc/whatsnew/fragments/8207.bugfix

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Fix a crash happening when a class attribute was negated in the start argument of an enumerate.
2+
3+
Closes #8207

pylint/checkers/refactoring/refactoring_checker.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -2338,13 +2338,16 @@ def _enumerate_with_start(
23382338
return False, confidence
23392339

23402340
def _get_start_value(self, node: nodes.NodeNG) -> tuple[int | None, Confidence]:
2341-
if isinstance(node, (nodes.Name, nodes.Call, nodes.Attribute)):
2341+
if (
2342+
isinstance(node, (nodes.Name, nodes.Call, nodes.Attribute))
2343+
or isinstance(node, nodes.UnaryOp)
2344+
and isinstance(node.operand, nodes.Attribute)
2345+
):
23422346
inferred = utils.safe_infer(node)
23432347
start_val = inferred.value if inferred else None
23442348
return start_val, INFERENCE
23452349
if isinstance(node, nodes.UnaryOp):
23462350
return node.operand.value, HIGH
23472351
if isinstance(node, nodes.Const):
23482352
return node.value, HIGH
2349-
23502353
return None, HIGH
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
"""Regression test for 8207."""
2+
3+
# pylint: disable=missing-docstring,too-few-public-methods
4+
5+
class Example:
6+
def __init__(self):
7+
self.offset = -10
8+
9+
def minus_offset(self):
10+
return {
11+
(x, x): value
12+
for x, row in enumerate([(5, 10), (20, 30)])
13+
for y, value in enumerate(row, -self.offset)
14+
}

0 commit comments

Comments
 (0)