blob: 6cc160fad81fffdc5d4fa54106f7182a48dcb9da [file] [log] [blame] [edit]
-- Type checker test cases for reporting deprecations.
[case testDeprecatedDisabled]
from typing_extensions import deprecated
@deprecated("use f2 instead")
def f() -> None: ...
f()
[builtins fixtures/tuple.pyi]
[case testDeprecatedAsNoteWithErrorCode]
# flags: --enable-error-code=deprecated --show-error-codes --report-deprecated-as-note
from typing_extensions import deprecated
@deprecated("use f2 instead")
def f() -> None: ...
f() # type: ignore[deprecated]
f() # N: function __main__.f is deprecated: use f2 instead [deprecated]
[builtins fixtures/tuple.pyi]
[case testDeprecatedAsErrorWithErrorCode]
# flags: --enable-error-code=deprecated --show-error-codes
from typing_extensions import deprecated
@deprecated("use f2 instead")
def f() -> None: ...
f() # type: ignore[deprecated]
f() # E: function __main__.f is deprecated: use f2 instead [deprecated]
[builtins fixtures/tuple.pyi]
[case testDeprecatedFunction]
# flags: --enable-error-code=deprecated
from typing_extensions import deprecated
@deprecated("use f2 instead")
def f() -> None: ...
f # E: function __main__.f is deprecated: use f2 instead # type: ignore[deprecated]
f(1) # E: function __main__.f is deprecated: use f2 instead \
# E: Too many arguments for "f"
f[1] # E: function __main__.f is deprecated: use f2 instead \
# E: Value of type "Callable[[], None]" is not indexable
g = f # E: function __main__.f is deprecated: use f2 instead
g()
t = (f, f, g) # E: function __main__.f is deprecated: use f2 instead
[builtins fixtures/tuple.pyi]
[case testDeprecatedFunctionDifferentModule]
# flags: --enable-error-code=deprecated
import m
import p.s
import m as n
import p.s as ps
from m import f # E: function m.f is deprecated: use f2 instead
from p.s import g # E: function p.s.g is deprecated: use g2 instead
from k import *
m.f() # E: function m.f is deprecated: use f2 instead
p.s.g() # E: function p.s.g is deprecated: use g2 instead
n.f() # E: function m.f is deprecated: use f2 instead
ps.g() # E: function p.s.g is deprecated: use g2 instead
f()
g()
h() # E: function k.h is deprecated: use h2 instead
[file m.py]
from typing_extensions import deprecated
@deprecated("use f2 instead")
def f() -> None: ...
[file p/s.py]
from typing_extensions import deprecated
@deprecated("use g2 instead")
def g() -> None: ...
[file k.py]
from typing_extensions import deprecated
@deprecated("use h2 instead")
def h() -> None: ...
[builtins fixtures/tuple.pyi]
[case testDeprecatedClass]
# flags: --enable-error-code=deprecated
from typing import Callable, List, Optional, Tuple, Union
from typing_extensions import deprecated, TypeAlias, TypeVar
@deprecated("use C2 instead")
class C: ...
c: C # E: class __main__.C is deprecated: use C2 instead
C() # E: class __main__.C is deprecated: use C2 instead
C.missing() # E: class __main__.C is deprecated: use C2 instead \
# E: "Type[C]" has no attribute "missing"
C.__init__(c) # E: class __main__.C is deprecated: use C2 instead
C(1) # E: class __main__.C is deprecated: use C2 instead \
# E: Too many arguments for "C"
D = C # E: class __main__.C is deprecated: use C2 instead
D()
t = (C, C, D) # E: class __main__.C is deprecated: use C2 instead
u1: Union[C, int] = 1 # E: class __main__.C is deprecated: use C2 instead
u1 = 1
u2 = 1 # type: Union[C, int] # E: class __main__.C is deprecated: use C2 instead
u2 = 1
c1 = c2 = C() # E: class __main__.C is deprecated: use C2 instead
i, c3 = 1, C() # E: class __main__.C is deprecated: use C2 instead
class E: ...
x1: Optional[C] # E: class __main__.C is deprecated: use C2 instead
x2: Union[D, C, E] # E: class __main__.C is deprecated: use C2 instead
x3: Union[D, Optional[C], E] # E: class __main__.C is deprecated: use C2 instead
x4: Tuple[D, C, E] # E: class __main__.C is deprecated: use C2 instead
x5: Tuple[Tuple[D, C], E] # E: class __main__.C is deprecated: use C2 instead
x6: List[C] # E: class __main__.C is deprecated: use C2 instead
x7: List[List[C]] # E: class __main__.C is deprecated: use C2 instead
x8: List[Optional[Tuple[Union[List[C], int]]]] # E: class __main__.C is deprecated: use C2 instead
x9: Callable[[int], C] # E: class __main__.C is deprecated: use C2 instead
x10: Callable[[int, C, int], int] # E: class __main__.C is deprecated: use C2 instead
T = TypeVar("T")
A1: TypeAlias = Optional[C] # E: class __main__.C is deprecated: use C2 instead
x11: A1
A2: TypeAlias = List[Union[A2, C]] # E: class __main__.C is deprecated: use C2 instead
x12: A2
A3: TypeAlias = List[Optional[T]]
x13: A3[C] # E: class __main__.C is deprecated: use C2 instead
[builtins fixtures/tuple.pyi]
[case testDeprecatedBaseClass]
# flags: --enable-error-code=deprecated
from typing_extensions import deprecated
@deprecated("use C2 instead")
class C: ...
class D(C): ... # E: class __main__.C is deprecated: use C2 instead
class E(D): ...
class F(D, C): ... # E: class __main__.C is deprecated: use C2 instead
[builtins fixtures/tuple.pyi]
[case testDeprecatedClassInTypeVar]
# flags: --enable-error-code=deprecated
from typing import Generic, TypeVar
from typing_extensions import deprecated
class B: ...
@deprecated("use C2 instead")
class C: ...
T = TypeVar("T", bound=C) # E: class __main__.C is deprecated: use C2 instead
def f(x: T) -> T: ...
class D(Generic[T]): ...
V = TypeVar("V", B, C) # E: class __main__.C is deprecated: use C2 instead
def g(x: V) -> V: ...
class E(Generic[V]): ...
[builtins fixtures/tuple.pyi]
[case testDeprecatedClassInCast]
# flags: --enable-error-code=deprecated
from typing import cast, Generic
from typing_extensions import deprecated
class B: ...
@deprecated("use C2 instead")
class C: ...
c = C() # E: class __main__.C is deprecated: use C2 instead
b = cast(B, c)
[builtins fixtures/tuple.pyi]
[case testDeprecatedInstanceInFunctionDefinition]
# flags: --enable-error-code=deprecated
from typing import Generic, List, Optional, TypeVar
from typing_extensions import deprecated
@deprecated("use C2 instead")
class C: ...
def f1(c: C) -> None: # E: class __main__.C is deprecated: use C2 instead
def g1() -> None: ...
def f2(c: List[Optional[C]]) -> None: # E: class __main__.C is deprecated: use C2 instead
def g2() -> None: ...
def f3() -> C: # E: class __main__.C is deprecated: use C2 instead
def g3() -> None: ...
return C() # E: class __main__.C is deprecated: use C2 instead
def f4() -> List[Optional[C]]: # E: class __main__.C is deprecated: use C2 instead
def g4() -> None: ...
return []
def f5() -> None:
def g5(c: C) -> None: ... # E: class __main__.C is deprecated: use C2 instead
def f6() -> None:
def g6() -> C: ... # E: class __main__.C is deprecated: use C2 instead
@deprecated("use D2 instead")
class D:
def f1(self, c: C) -> None: # E: class __main__.C is deprecated: use C2 instead
def g1() -> None: ...
def f2(self, c: List[Optional[C]]) -> None: # E: class __main__.C is deprecated: use C2 instead
def g2() -> None: ...
def f3(self) -> None:
def g3(c: C) -> None: ... # E: class __main__.C is deprecated: use C2 instead
def f4(self) -> None:
def g4() -> C: ... # E: class __main__.C is deprecated: use C2 instead
T = TypeVar("T")
@deprecated("use E2 instead")
class E(Generic[T]):
def f1(self: E[C]) -> None: ... # E: class __main__.C is deprecated: use C2 instead
def f2(self, e: E[C]) -> None: ... # E: class __main__.C is deprecated: use C2 instead
def f3(self) -> E[C]: ... # E: class __main__.C is deprecated: use C2 instead
[builtins fixtures/tuple.pyi]
[case testDeprecatedClassDifferentModule]
# flags: --enable-error-code=deprecated
import m
import p.s
import m as n
import p.s as ps
from m import B, C # E: class m.B is deprecated: use B2 instead \
# E: class m.C is deprecated: use C2 instead
from p.s import D # E: class p.s.D is deprecated: use D2 instead
from k import *
m.C() # E: class m.C is deprecated: use C2 instead
p.s.D() # E: class p.s.D is deprecated: use D2 instead
n.C() # E: class m.C is deprecated: use C2 instead
ps.D() # E: class p.s.D is deprecated: use D2 instead
C()
D()
E() # E: class k.E is deprecated: use E2 instead
x1: m.A # E: class m.A is deprecated: use A2 instead
x2: m.A = m.A() # E: class m.A is deprecated: use A2 instead
y1: B
y2: B = B()
[file m.py]
from typing_extensions import deprecated
@deprecated("use A2 instead")
class A: ...
@deprecated("use B2 instead")
class B: ...
@deprecated("use C2 instead")
class C: ...
[file p/s.py]
from typing_extensions import deprecated
@deprecated("use D2 instead")
class D: ...
[file k.py]
from typing_extensions import deprecated
@deprecated("use E2 instead")
class E: ...
[builtins fixtures/tuple.pyi]
[case testDeprecatedClassInitMethod]
# flags: --enable-error-code=deprecated
from typing_extensions import deprecated
@deprecated("use C2 instead")
class C:
def __init__(self) -> None: ...
c: C # E: class __main__.C is deprecated: use C2 instead
C() # E: class __main__.C is deprecated: use C2 instead
C.__init__(c) # E: class __main__.C is deprecated: use C2 instead
[builtins fixtures/tuple.pyi]
[case testDeprecatedSpecialMethods]
# flags: --enable-error-code=deprecated
from typing import Iterator
from typing_extensions import deprecated
class A:
@deprecated("no A + int")
def __add__(self, v: int) -> None: ...
@deprecated("no int + A")
def __radd__(self, v: int) -> None: ...
@deprecated("no A = A + int")
def __iadd__(self, v: int) -> A: ...
@deprecated("no iteration")
def __iter__(self) -> Iterator[int]: ...
@deprecated("no in")
def __contains__(self, v: int) -> int: ...
@deprecated("no integer")
def __int__(self) -> int: ...
@deprecated("no inversion")
def __invert__(self) -> A: ...
class B:
@deprecated("still no in")
def __contains__(self, v: int) -> int: ...
a = A()
b = B()
a + 1 # E: function __main__.A.__add__ is deprecated: no A + int
1 + a # E: function __main__.A.__radd__ is deprecated: no int + A
a += 1 # E: function __main__.A.__iadd__ is deprecated: no A = A + int
for i in a: # E: function __main__.A.__iter__ is deprecated: no iteration
reveal_type(i) # N: Revealed type is "builtins.int"
1 in a # E: function __main__.A.__contains__ is deprecated: no in
1 in b # E: function __main__.B.__contains__ is deprecated: still no in
~a # E: function __main__.A.__invert__ is deprecated: no inversion
[builtins fixtures/tuple.pyi]
[case testDeprecatedOverloadedInstanceMethods]
# flags: --enable-error-code=deprecated
from typing import Iterator, Union, overload
from typing_extensions import deprecated
class A:
@overload
@deprecated("pass `str` instead")
def f(self, v: int) -> None: ...
@overload
def f(self, v: str) -> None: ...
def f(self, v: Union[int, str]) -> None: ...
@overload
def g(self, v: int) -> None: ...
@overload
@deprecated("pass `int` instead")
def g(self, v: str) -> None: ...
def g(self, v: Union[int, str]) -> None: ...
@overload
def h(self, v: int) -> A: ...
@overload
def h(self, v: str) -> A: ...
@deprecated("use `h2` instead")
def h(self, v: Union[int, str]) -> A: ...
class B(A): ...
a = A()
a.f(1) # E: overload def (self: __main__.A, v: builtins.int) of function __main__.A.f is deprecated: pass `str` instead
a.f("x")
a.g(1)
a.g("x") # E: overload def (self: __main__.A, v: builtins.str) of function __main__.A.g is deprecated: pass `int` instead
a.h(1) # E: function __main__.A.h is deprecated: use `h2` instead
a.h("x") # E: function __main__.A.h is deprecated: use `h2` instead
b = B()
b.f(1) # E: overload def (self: __main__.A, v: builtins.int) of function __main__.A.f is deprecated: pass `str` instead
b.f("x")
b.g(1)
b.g("x") # E: overload def (self: __main__.A, v: builtins.str) of function __main__.A.g is deprecated: pass `int` instead
b.h(1) # E: function __main__.A.h is deprecated: use `h2` instead
b.h("x") # E: function __main__.A.h is deprecated: use `h2` instead
[builtins fixtures/tuple.pyi]
[case testDeprecatedOverloadedClassMethods]
# flags: --enable-error-code=deprecated
from typing import Iterator, Union, overload
from typing_extensions import deprecated
class A:
@overload
@classmethod
@deprecated("pass `str` instead")
def f(cls, v: int) -> None: ...
@overload
@classmethod
def f(cls, v: str) -> None: ...
@classmethod
def f(cls, v: Union[int, str]) -> None: ...
@overload
@classmethod
def g(cls, v: int) -> None: ...
@overload
@classmethod
@deprecated("pass `int` instead")
def g(cls, v: str) -> None: ...
@classmethod
def g(cls, v: Union[int, str]) -> None: ...
@overload
@classmethod
def h(cls, v: int) -> A: ...
@overload
@classmethod
def h(cls, v: str) -> A: ...
@deprecated("use `h2` instead")
@classmethod
def h(cls, v: Union[int, str]) -> A: ...
class B(A): ...
a = A()
a.f(1) # E: overload def (cls: type[__main__.A], v: builtins.int) of function __main__.A.f is deprecated: pass `str` instead
a.f("x")
a.g(1)
a.g("x") # E: overload def (cls: type[__main__.A], v: builtins.str) of function __main__.A.g is deprecated: pass `int` instead
a.h(1) # E: function __main__.A.h is deprecated: use `h2` instead
a.h("x") # E: function __main__.A.h is deprecated: use `h2` instead
b = B()
b.f(1) # E: overload def (cls: type[__main__.A], v: builtins.int) of function __main__.A.f is deprecated: pass `str` instead
b.f("x")
b.g(1)
b.g("x") # E: overload def (cls: type[__main__.A], v: builtins.str) of function __main__.A.g is deprecated: pass `int` instead
b.h(1) # E: function __main__.A.h is deprecated: use `h2` instead
b.h("x") # E: function __main__.A.h is deprecated: use `h2` instead
[builtins fixtures/tuple.pyi]
[case testDeprecatedOverloadedStaticMethods]
# flags: --enable-error-code=deprecated
from typing import Iterator, Union, overload
from typing_extensions import deprecated
class A:
@overload
@staticmethod
@deprecated("pass `str` instead")
def f(v: int) -> None: ...
@overload
@staticmethod
def f(v: str) -> None: ...
@staticmethod
def f(v: Union[int, str]) -> None: ...
@overload
@staticmethod
def g(v: int) -> None: ...
@overload
@staticmethod
@deprecated("pass `int` instead")
def g(v: str) -> None: ...
@staticmethod
def g(v: Union[int, str]) -> None: ...
@overload
@staticmethod
def h(v: int) -> A: ...
@overload
@staticmethod
def h(v: str) -> A: ...
@deprecated("use `h2` instead")
@staticmethod
def h(v: Union[int, str]) -> A: ...
class B(A): ...
a = A()
a.f(1) # E: overload def (v: builtins.int) of function __main__.A.f is deprecated: pass `str` instead
a.f("x")
a.g(1)
a.g("x") # E: overload def (v: builtins.str) of function __main__.A.g is deprecated: pass `int` instead
a.h(1) # E: function __main__.A.h is deprecated: use `h2` instead
a.h("x") # E: function __main__.A.h is deprecated: use `h2` instead
b = B()
b.f(1) # E: overload def (v: builtins.int) of function __main__.A.f is deprecated: pass `str` instead
b.f("x")
b.g(1)
b.g("x") # E: overload def (v: builtins.str) of function __main__.A.g is deprecated: pass `int` instead
b.h(1) # E: function __main__.A.h is deprecated: use `h2` instead
b.h("x") # E: function __main__.A.h is deprecated: use `h2` instead
[builtins fixtures/classmethod.pyi]
[case testDeprecatedOverloadedSpecialMethods]
# flags: --enable-error-code=deprecated
from typing import Iterator, Union, overload
from typing_extensions import deprecated
class A:
@overload
@deprecated("no A + int")
def __add__(self, v: int) -> None: ...
@overload
def __add__(self, v: str) -> None: ...
def __add__(self, v: Union[int, str]) -> None: ...
@overload
def __radd__(self, v: int) -> None: ...
@overload
@deprecated("no str + A")
def __radd__(self, v: str) -> None: ...
def __radd__(self, v: Union[int, str]) -> None: ...
@overload
def __iadd__(self, v: int) -> A: ...
@overload
def __iadd__(self, v: str) -> A: ...
@deprecated("no A += Any")
def __iadd__(self, v: Union[int, str]) -> A: ...
a = A()
a + 1 # E: overload def (__main__.A, builtins.int) of function __main__.A.__add__ is deprecated: no A + int
a + "x"
1 + a
"x" + a # E: overload def (__main__.A, builtins.str) of function __main__.A.__radd__ is deprecated: no str + A
a += 1 # E: function __main__.A.__iadd__ is deprecated: no A += Any
a += "x" # E: function __main__.A.__iadd__ is deprecated: no A += Any
[builtins fixtures/tuple.pyi]
[case testDeprecatedMethod]
# flags: --enable-error-code=deprecated
from typing_extensions import deprecated
class C:
@deprecated("use g instead")
def f(self) -> None: ...
def g(self) -> None: ...
@staticmethod
@deprecated("use g instead")
def h() -> None: ...
@deprecated("use g instead")
@staticmethod
def k() -> None: ...
C.f # E: function __main__.C.f is deprecated: use g instead
C().f # E: function __main__.C.f is deprecated: use g instead
C().f() # E: function __main__.C.f is deprecated: use g instead
C().f(1) # E: function __main__.C.f is deprecated: use g instead \
# E: Too many arguments for "f" of "C"
f = C().f # E: function __main__.C.f is deprecated: use g instead
f()
t = (C.f, C.f, C.g) # E: function __main__.C.f is deprecated: use g instead
C().g()
C().h() # E: function __main__.C.h is deprecated: use g instead
C().k() # E: function __main__.C.k is deprecated: use g instead
[builtins fixtures/callable.pyi]
[case testDeprecatedClassWithDeprecatedMethod]
# flags: --enable-error-code=deprecated
from typing_extensions import deprecated
@deprecated("use D instead")
class C:
@deprecated("use g instead")
def f(self) -> None: ...
def g(self) -> None: ...
C().f() # E: class __main__.C is deprecated: use D instead \
# E: function __main__.C.f is deprecated: use g instead
C().g() # E: class __main__.C is deprecated: use D instead
[builtins fixtures/callable.pyi]
[case testDeprecatedProperty]
# flags: --enable-error-code=deprecated
from typing_extensions import deprecated
class C:
@property
@deprecated("use f2 instead")
def f(self) -> int: ...
@property
def g(self) -> int: ...
@g.setter
@deprecated("use g2 instead")
def g(self, v: int) -> None: ...
C.f # E: function __main__.C.f is deprecated: use f2 instead
C().f # E: function __main__.C.f is deprecated: use f2 instead
C().f() # E: function __main__.C.f is deprecated: use f2 instead \
# E: "int" not callable
C().f = 1 # E: function __main__.C.f is deprecated: use f2 instead \
# E: Property "f" defined in "C" is read-only
C.g
C().g
C().g = 1 # E: function __main__.C.g is deprecated: use g2 instead
C().g = "x" # E: function __main__.C.g is deprecated: use g2 instead \
# E: Incompatible types in assignment (expression has type "str", variable has type "int")
[builtins fixtures/property.pyi]
[case testDeprecatedDescriptor]
# flags: --enable-error-code=deprecated
from typing import Any, Optional, Union, overload
from typing_extensions import deprecated
@deprecated("use E1 instead")
class D1:
def __get__(self, obj: Optional[C], objtype: Any) -> Union[D1, int]: ...
class D2:
@deprecated("use E2.__get__ instead")
def __get__(self, obj: Optional[C], objtype: Any) -> Union[D2, int]: ...
@deprecated("use E2.__set__ instead")
def __set__(self, obj: C, value: int) -> None: ...
class D3:
@overload
@deprecated("use E3.__get__ instead")
def __get__(self, obj: None, objtype: Any) -> D3: ...
@overload
@deprecated("use E3.__get__ instead")
def __get__(self, obj: C, objtype: Any) -> int: ...
def __get__(self, obj: Optional[C], objtype: Any) -> Union[D3, int]: ...
@overload
def __set__(self, obj: C, value: int) -> None: ...
@overload
@deprecated("use E3.__set__ instead")
def __set__(self, obj: C, value: str) -> None: ...
def __set__(self, obj: C, value: Union[int, str]) -> None: ...
class C:
d1 = D1() # E: class __main__.D1 is deprecated: use E1 instead
d2 = D2()
d3 = D3()
c: C
C.d1
c.d1
c.d1 = 1
C.d2 # E: function __main__.D2.__get__ is deprecated: use E2.__get__ instead
c.d2 # E: function __main__.D2.__get__ is deprecated: use E2.__get__ instead
c.d2 = 1 # E: function __main__.D2.__set__ is deprecated: use E2.__set__ instead
C.d3 # E: overload def (self: __main__.D3, obj: None, objtype: Any) -> __main__.D3 of function __main__.D3.__get__ is deprecated: use E3.__get__ instead
c.d3 # E: overload def (self: __main__.D3, obj: __main__.C, objtype: Any) -> builtins.int of function __main__.D3.__get__ is deprecated: use E3.__get__ instead
c.d3 = 1
c.d3 = "x" # E: overload def (self: __main__.D3, obj: __main__.C, value: builtins.str) of function __main__.D3.__set__ is deprecated: use E3.__set__ instead
[builtins fixtures/property.pyi]
[case testDeprecatedOverloadedFunction]
# flags: --enable-error-code=deprecated
from typing import Union, overload
from typing_extensions import deprecated
@overload
def f(x: int) -> int: ...
@overload
def f(x: str) -> str: ...
@deprecated("use f2 instead")
def f(x: Union[int, str]) -> Union[int, str]: ...
f # E: function __main__.f is deprecated: use f2 instead
f(1) # E: function __main__.f is deprecated: use f2 instead
f("x") # E: function __main__.f is deprecated: use f2 instead
f(1.0) # E: function __main__.f is deprecated: use f2 instead \
# E: No overload variant of "f" matches argument type "float" \
# N: Possible overload variants: \
# N: def f(x: int) -> int \
# N: def f(x: str) -> str
@overload
@deprecated("work with str instead")
def g(x: int) -> int: ...
@overload
def g(x: str) -> str: ...
def g(x: Union[int, str]) -> Union[int, str]: ...
g
g(1) # E: overload def (x: builtins.int) -> builtins.int of function __main__.g is deprecated: work with str instead
g("x")
g(1.0) # E: No overload variant of "g" matches argument type "float" \
# N: Possible overload variants: \
# N: def g(x: int) -> int \
# N: def g(x: str) -> str
@overload
def h(x: int) -> int: ...
@deprecated("work with int instead")
@overload # N: @overload should be placed before @deprecated
def h(x: str) -> str: ...
def h(x: Union[int, str]) -> Union[int, str]: ...
h
h(1)
h("x") # E: overload def (x: builtins.str) -> builtins.str of function __main__.h is deprecated: work with int instead
h(1.0) # E: No overload variant of "h" matches argument type "float" \
# N: Possible overload variants: \
# N: def h(x: int) -> int \
# N: def h(x: str) -> str
[builtins fixtures/tuple.pyi]
[case testDeprecatedImportedOverloadedFunction]
# flags: --enable-error-code=deprecated
import m
m.g
m.g(1) # E: overload def (x: builtins.int) -> builtins.int of function m.g is deprecated: work with str instead
m.g("x")
[file m.py]
from typing import Union, overload
from typing_extensions import deprecated
@overload
@deprecated("work with str instead")
def g(x: int) -> int: ...
@overload
def g(x: str) -> str: ...
def g(x: Union[int, str]) -> Union[int, str]: ...
[builtins fixtures/tuple.pyi]
[case testDeprecatedExclude]
# flags: --enable-error-code=deprecated --deprecated-calls-exclude=m.C --deprecated-calls-exclude=m.D --deprecated-calls-exclude=m.E.f --deprecated-calls-exclude=m.E.g --deprecated-calls-exclude=m.E.__add__
from m import C, D, E
[file m.py]
from typing import Union, overload
from typing_extensions import deprecated
@deprecated("use C2 instead")
class C:
def __init__(self) -> None: ...
c: C
C()
C.__init__(c)
class D:
@deprecated("use D.g instead")
def f(self) -> None: ...
def g(self) -> None: ...
D.f
D().f
D().f()
class E:
@overload
def f(self, x: int) -> int: ...
@overload
def f(self, x: str) -> str: ...
@deprecated("use E.f2 instead")
def f(self, x: Union[int, str]) -> Union[int, str]: ...
@deprecated("use E.h instead")
def g(self) -> None: ...
@overload
@deprecated("no A + int")
def __add__(self, v: int) -> None: ...
@overload
def __add__(self, v: str) -> None: ...
def __add__(self, v: Union[int, str]) -> None: ...
E().f(1)
E().f("x")
e = E()
e.g()
e + 1
[builtins fixtures/tuple.pyi]