@@ -4653,22 +4653,13 @@ def analyze_async_iterable_item_type(self, expr: Expression) -> tuple[Type, Type
46534653
46544654 def analyze_iterable_item_type (self , expr : Expression ) -> tuple [Type , Type ]:
46554655 """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+ )
46604659 int_type = self .analyze_range_native_int_type (expr )
46614660 if int_type :
46624661 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
46724663
46734664 def analyze_iterable_item_type_without_expression (
46744665 self , type : Type , context : Context
@@ -4678,17 +4669,15 @@ def analyze_iterable_item_type_without_expression(
46784669 iterable = get_proper_type (type )
46794670 iterator = echk .check_method_call_by_name ("__iter__" , iterable , [], [], context )[0 ]
46804671
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 ]
46864677 else :
46874678 # 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
46924681
46934682 def analyze_range_native_int_type (self , expr : Expression ) -> Type | None :
46944683 """Try to infer native int item type from arguments to range(...).
0 commit comments