@@ -142,23 +142,129 @@ x9: Callable[[int], C] # N: class __main__.C is deprecated: use C2 instead
142142x10: Callable[[int, C, int], int] # N: class __main__.C is deprecated: use C2 instead
143143
144144T = TypeVar("T")
145- A1: TypeAlias = Optional[C] # ToDo
145+ A1: TypeAlias = Optional[C] # N: class __main__.C is deprecated: use C2 instead
146146x11: A1
147- A2: TypeAlias = List[Union[A2, C]] # ToDo
147+ A2: TypeAlias = List[Union[A2, C]] # N: class __main__.C is deprecated: use C2 instead
148148x12: A2
149149A3: TypeAlias = List[Optional[T]]
150150x13: A3[C] # N: class __main__.C is deprecated: use C2 instead
151151
152152[builtins fixtures/tuple.pyi]
153153
154154
155+ [case testDeprecatedBaseClass]
156+
157+ from typing_extensions import deprecated
158+
159+ @deprecated("use C2 instead")
160+ class C: ...
161+
162+ class D(C): ... # N: class __main__.C is deprecated: use C2 instead
163+ class E(D): ...
164+ class F(D, C): ... # N: class __main__.C is deprecated: use C2 instead
165+
166+ [builtins fixtures/tuple.pyi]
167+
168+
169+ [case testDeprecatedClassInTypeVar]
170+
171+ from typing import Generic, TypeVar
172+ from typing_extensions import deprecated
173+
174+ class B: ...
175+ @deprecated("use C2 instead")
176+ class C: ...
177+
178+ T = TypeVar("T", bound=C) # N: class __main__.C is deprecated: use C2 instead
179+ def f(x: T) -> T: ...
180+ class D(Generic[T]): ...
181+
182+ V = TypeVar("V", B, C) # N: class __main__.C is deprecated: use C2 instead
183+ def g(x: V) -> V: ...
184+ class E(Generic[V]): ...
185+
186+ [builtins fixtures/tuple.pyi]
187+
188+
189+ [case testDeprecatedClassInCast]
190+
191+ from typing import cast, Generic
192+ from typing_extensions import deprecated
193+
194+ class B: ...
195+ @deprecated("use C2 instead")
196+ class C: ...
197+
198+ c = C() # N: class __main__.C is deprecated: use C2 instead
199+ b = cast(B, c)
200+
201+ [builtins fixtures/tuple.pyi]
202+
203+
204+ [case testDeprecatedInstanceInFunctionDefinition]
205+
206+ from typing import Generic, List, Optional, TypeVar
207+ from typing_extensions import deprecated
208+
209+ @deprecated("use C2 instead")
210+ class C: ...
211+
212+ def f1(c: C) -> None: # N: class __main__.C is deprecated: use C2 instead
213+ def g1() -> None: ...
214+
215+ def f2(c: List[Optional[C]]) -> None: # N: class __main__.C is deprecated: use C2 instead
216+ def g2() -> None: ...
217+
218+ def f3() -> C: # N: class __main__.C is deprecated: use C2 instead
219+ def g3() -> None: ...
220+ return C() # N: class __main__.C is deprecated: use C2 instead
221+
222+ def f4() -> List[Optional[C]]: # N: class __main__.C is deprecated: use C2 instead
223+ def g4() -> None: ...
224+ return []
225+
226+ def f5() -> None:
227+ def g5(c: C) -> None: ... # N: class __main__.C is deprecated: use C2 instead
228+
229+ def f6() -> None:
230+ def g6() -> C: ... # N: class __main__.C is deprecated: use C2 instead
231+
232+
233+ @deprecated("use D2 instead")
234+ class D:
235+
236+ def f1(self, c: C) -> None: # N: class __main__.C is deprecated: use C2 instead
237+ def g1() -> None: ...
238+
239+ def f2(self, c: List[Optional[C]]) -> None: # N: class __main__.C is deprecated: use C2 instead
240+ def g2() -> None: ...
241+
242+ def f3(self) -> None:
243+ def g3(c: C) -> None: ... # N: class __main__.C is deprecated: use C2 instead
244+
245+ def f4(self) -> None:
246+ def g4() -> C: ... # N: class __main__.C is deprecated: use C2 instead
247+
248+ T = TypeVar("T")
249+
250+ @deprecated("use E2 instead")
251+ class E(Generic[T]):
252+
253+ def f1(self: E[C]) -> None: ... # N: class __main__.C is deprecated: use C2 instead
254+ def f2(self, e: E[C]) -> None: ... # N: class __main__.C is deprecated: use C2 instead
255+ def f3(self) -> E[C]: ... # N: class __main__.C is deprecated: use C2 instead
256+
257+ [builtins fixtures/tuple.pyi]
258+
259+
155260[case testDeprecatedClassDifferentModule]
156261
157262import m
158263import p.s
159264import m as n
160265import p.s as ps
161- from m import C # N: class m.C is deprecated: use C2 instead
266+ from m import B, C # N: class m.B is deprecated: use B2 instead \
267+ # N: class m.C is deprecated: use C2 instead
162268from p.s import D # N: class p.s.D is deprecated: use D2 instead
163269from k import *
164270
170276D()
171277E() # N: class k.E is deprecated: use E2 instead
172278
279+ x1: m.A # N: class m.A is deprecated: use A2 instead
280+ x2: m.A = m.A() # N: class m.A is deprecated: use A2 instead
281+ y1: B
282+ y2: B = B()
283+
173284[file m.py]
174285from typing_extensions import deprecated
175286
287+ @deprecated("use A2 instead")
288+ class A: ...
289+
290+ @deprecated("use B2 instead")
291+ class B: ...
292+
176293@deprecated("use C2 instead")
177294class C: ...
178295
0 commit comments