@@ -2450,17 +2450,20 @@ def _enumerate_with_start(
24502450 return False , confidence
24512451
24522452 def _get_start_value (self , node : nodes .NodeNG ) -> tuple [int | None , Confidence ]:
2453- if isinstance (node , (nodes .Name , nodes .Call , nodes .Attribute )) or (
2454- isinstance (node , nodes .UnaryOp )
2455- and isinstance (node .operand , (nodes .Attribute , nodes .Name ))
2456- ):
2457- inferred = utils .safe_infer (node )
2458- # inferred can be an astroid.base.Instance as in 'enumerate(x, int(y))' or
2459- # not correctly inferred (None)
2460- start_val = inferred .value if isinstance (inferred , nodes .Const ) else None
2461- return start_val , INFERENCE
2462- if isinstance (node , nodes .UnaryOp ):
2463- return node .operand .value , HIGH
2453+ # Most common use cases are a constant integer or minus a constant integer. We
2454+ # don't need inference for that. If that's not the case, we assume arbitrary
2455+ # complexity and we use inference.
24642456 if isinstance (node , nodes .Const ):
24652457 return node .value , HIGH
2466- return None , HIGH
2458+ if isinstance (node , nodes .UnaryOp ) and isinstance (node .operand , nodes .Const ):
2459+ return node .operand .value , HIGH
2460+ inferred = utils .safe_infer (node )
2461+ if isinstance (inferred , nodes .Const ):
2462+ return inferred .value , INFERENCE
2463+ # inferred can be an 'astroid.base.Instance' in 'enumerate(x, int(y))',
2464+ # for example. We're doing nothing in this case for now, as extracting
2465+ # the value is costly.
2466+
2467+ # At this point the most likely cases is that the node is uninferable
2468+ # But we don't have to check if it's actually uninferable.
2469+ return None , INFERENCE
0 commit comments