From 72da244f6ffe84ac415efa78db0c432045c8b9a9 Mon Sep 17 00:00:00 2001 From: Brian Schubert Date: Sat, 21 Sep 2024 12:23:35 -0400 Subject: [PATCH] Fix pretty_callable not displaying some TypeVar upper bounds --- mypy/messages.py | 4 ++-- test-data/unit/check-functions.test | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/mypy/messages.py b/mypy/messages.py index dadce149680e8..6567d9d96d0bb 100644 --- a/mypy/messages.py +++ b/mypy/messages.py @@ -2942,9 +2942,9 @@ def [T <: int] f(self, x: int, y: T) -> None for tvar in tp.variables: if isinstance(tvar, TypeVarType): upper_bound = get_proper_type(tvar.upper_bound) - if ( + if not ( isinstance(upper_bound, Instance) - and upper_bound.type.fullname != "builtins.object" + and upper_bound.type.fullname == "builtins.object" ): tvars.append(f"{tvar.name}: {format_type_bare(upper_bound, options)}") elif tvar.values: diff --git a/test-data/unit/check-functions.test b/test-data/unit/check-functions.test index b681c544a6bda..96f9815019e63 100644 --- a/test-data/unit/check-functions.test +++ b/test-data/unit/check-functions.test @@ -1428,6 +1428,20 @@ else: # N: Redefinition: \ # N: def f(x: int = ...) -> None +[case testIncompatibleConditionalFunctionDefinition4] +from typing import Any, Union, TypeVar +T1 = TypeVar('T1') +T2 = TypeVar('T2', bound=Union[int, str]) +x = None # type: Any +if x: + def f(x: T1) -> T1: pass +else: + def f(x: T2) -> T2: pass # E: All conditional function variants must have identical signatures \ + # N: Original: \ + # N: def [T1] f(x: T1) -> T1 \ + # N: Redefinition: \ + # N: def [T2: Union[int, str]] f(x: T2) -> T2 + [case testConditionalFunctionDefinitionUsingDecorator1] from typing import Callable