From 04a33490a0db67455d8a902bacb5c61e5702bd29 Mon Sep 17 00:00:00 2001 From: Michael Mitchell Date: Fri, 16 Jan 2026 15:19:24 -0500 Subject: [PATCH] Document undesirable generator expression behavior in test and fix one case --- mypy/checkexpr.py | 2 +- test-data/unit/check-expressions.test | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/mypy/checkexpr.py b/mypy/checkexpr.py index e293a2d72ef3..2f6743bc7ff3 100644 --- a/mypy/checkexpr.py +++ b/mypy/checkexpr.py @@ -2918,7 +2918,7 @@ def infer_overload_return_type( for typ in plausible_targets: assert self.msg is self.chk.msg - with self.msg.filter_errors() as w: + with self.msg.filter_errors(filter_revealed_type=True) as w: with self.chk.local_type_map as m: ret_type, infer_type = self.check_call( callee=typ, diff --git a/test-data/unit/check-expressions.test b/test-data/unit/check-expressions.test index 30b1f1a68e15..1acda7079cc8 100644 --- a/test-data/unit/check-expressions.test +++ b/test-data/unit/check-expressions.test @@ -1456,6 +1456,27 @@ if int(): b = (x for x in a) # E: Generator has incompatible item type "Callable[[], str]"; expected "Callable[[], int]" [builtins fixtures/list.pyi] +[case testGeneratorNoSpuriousError] +from typing import Iterable, overload + +@overload +def take_iterable(iterable: Iterable[bool], /) -> None: ... +@overload +def take_iterable(iterable: Iterable[int], /) -> None: ... +def take_iterable(iterable): pass + +take_iterable(1 for _ in []) +take_iterable(reveal_type(1 for _ in [])) # N: Revealed type is "typing.Generator[builtins.int, None, None]" + +# NOTE: Type is revealed for every overload tried +# TODO: Overload shouldn't fail if expression contains an error that shouldn't affect the inferred type. +take_iterable(reveal_type(1 if (-"") else 1 for _ in [])) # N: Revealed type is "typing.Generator[builtins.int, None, None]" \ + # N: Revealed type is "typing.Generator[builtins.bool, None, None]" \ + # E: Generator has incompatible item type "int"; expected "bool" \ + # E: Unsupported operand type for unary - ("str") + +[builtins fixtures/for.pyi] + -- Conditional expressions -- -----------------------