Skip to content

Commit b0ffd6b

Browse files
committed
Warn deprecated constructor calls from old-style type aliases
1 parent 8f08c60 commit b0ffd6b

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

mypy/checkexpr.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1679,6 +1679,12 @@ def check_callable_call(
16791679
callable_info: TypeInfo | None = None
16801680
if isinstance(callable_node.node, TypeInfo):
16811681
callable_info = callable_node.node
1682+
elif (
1683+
isinstance(callable_node.node, TypeAlias)
1684+
and isinstance(callable_node.node.target, Instance)
1685+
and isinstance(callable_node.node.target.type, TypeInfo)
1686+
):
1687+
callable_info = callable_node.node.target.type
16821688
if callable_info is not None:
16831689
self.chk.check_deprecated(callee.definition, context)
16841690

test-data/unit/check-deprecated.test

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,35 @@ class D(C):
370370
[builtins fixtures/tuple.pyi]
371371

372372

373+
[case testDeprecatedClassConstructorCalledFromTypeAlias]
374+
# flags: --enable-error-code=deprecated
375+
376+
from typing_extensions import deprecated, TypeAlias
377+
378+
class A:
379+
@deprecated("do not use")
380+
def __init__(self) -> None: ...
381+
382+
class B(A): ...
383+
384+
A_alias = A
385+
A_explicit_alias: TypeAlias = A
386+
B_alias = B
387+
B_explicit_alias: TypeAlias = B
388+
389+
A_alias() # E: function __main__.A.__init__ is deprecated: do not use
390+
A_explicit_alias() # E: function __main__.A.__init__ is deprecated: do not use
391+
B_alias() # E: function __main__.A.__init__ is deprecated: do not use
392+
B_explicit_alias() # E: function __main__.A.__init__ is deprecated: do not use
393+
394+
A_alias
395+
A_explicit_alias
396+
B_alias
397+
B_explicit_alias
398+
399+
[builtins fixtures/tuple.pyi]
400+
401+
373402
[case testDeprecatedSpecialMethods]
374403
# flags: --enable-error-code=deprecated
375404

0 commit comments

Comments
 (0)