@@ -4653,22 +4653,13 @@ def analyze_async_iterable_item_type(self, expr: Expression) -> tuple[Type, Type
4653
4653
4654
4654
def analyze_iterable_item_type (self , expr : Expression ) -> tuple [Type , Type ]:
4655
4655
"""Analyse iterable expression and return iterator and iterator item types."""
4656
- echk = self .expr_checker
4657
- iterable = get_proper_type (echk .accept (expr ))
4658
- iterator = echk .check_method_call_by_name ("__iter__" , iterable , [], [], expr )[0 ]
4659
-
4656
+ iterator , iterable = self .analyze_iterable_item_type_without_expression (
4657
+ self .expr_checker .accept (expr ), context = expr
4658
+ )
4660
4659
int_type = self .analyze_range_native_int_type (expr )
4661
4660
if int_type :
4662
4661
return iterator , int_type
4663
-
4664
- if (
4665
- isinstance (iterable , TupleType )
4666
- and iterable .partial_fallback .type .fullname == "builtins.tuple"
4667
- ):
4668
- return iterator , tuple_fallback (iterable ).args [0 ]
4669
- else :
4670
- # Non-tuple iterable.
4671
- return iterator , echk .check_method_call_by_name ("__next__" , iterator , [], [], expr )[0 ]
4662
+ return iterator , iterable
4672
4663
4673
4664
def analyze_iterable_item_type_without_expression (
4674
4665
self , type : Type , context : Context
@@ -4678,17 +4669,15 @@ def analyze_iterable_item_type_without_expression(
4678
4669
iterable = get_proper_type (type )
4679
4670
iterator = echk .check_method_call_by_name ("__iter__" , iterable , [], [], context )[0 ]
4680
4671
4681
- if isinstance ( iterable , TupleType ):
4682
- joined : Type = UninhabitedType ( )
4683
- for item in iterable . items :
4684
- joined = join_types ( joined , item )
4685
- return iterator , joined
4672
+ if (
4673
+ isinstance ( iterable , TupleType )
4674
+ and iterable . partial_fallback . type . fullname == "builtins.tuple"
4675
+ ):
4676
+ return iterator , tuple_fallback ( iterable ). args [ 0 ]
4686
4677
else :
4687
4678
# Non-tuple iterable.
4688
- return (
4689
- iterator ,
4690
- echk .check_method_call_by_name ("__next__" , iterator , [], [], context )[0 ],
4691
- )
4679
+ iterable = echk .check_method_call_by_name ("__next__" , iterator , [], [], context )[0 ]
4680
+ return iterator , iterable
4692
4681
4693
4682
def analyze_range_native_int_type (self , expr : Expression ) -> Type | None :
4694
4683
"""Try to infer native int item type from arguments to range(...).
0 commit comments