From 1f20d68d268985d0c68c4e186820d6007233735c Mon Sep 17 00:00:00 2001 From: Ganden Schaffner Date: Thu, 19 Oct 2023 00:00:00 -0700 Subject: [PATCH 1/2] Test for typing_extensions.NewType support --- test-data/unit/check-newtype.test | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test-data/unit/check-newtype.test b/test-data/unit/check-newtype.test index 0ff6b8396fa7..99fdf5fe7ca3 100644 --- a/test-data/unit/check-newtype.test +++ b/test-data/unit/check-newtype.test @@ -379,3 +379,10 @@ N = NewType('N', XXX) # E: Argument 2 to NewType(...) must be subclassable (got # E: Name "XXX" is not defined x: List[Union[N, int]] [builtins fixtures/list.pyi] + +[case testTypingExtensionsNewType] +# flags: --python-version 3.7 +from typing_extensions import NewType +N = NewType("N", int) +x: N +[builtins fixtures/tuple.pyi] From 4882cccce0bcc839e2fa4c594332345c16583243 Mon Sep 17 00:00:00 2001 From: Ganden Schaffner Date: Thu, 19 Oct 2023 00:00:00 -0700 Subject: [PATCH 2/2] Correctly recognize typing_extensions.NewType --- mypy/semanal_newtype.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mypy/semanal_newtype.py b/mypy/semanal_newtype.py index a8380309d310..16c6c024800d 100644 --- a/mypy/semanal_newtype.py +++ b/mypy/semanal_newtype.py @@ -147,7 +147,7 @@ def analyze_newtype_declaration(self, s: AssignmentStmt) -> tuple[str | None, Ca and isinstance(s.lvalues[0], NameExpr) and isinstance(s.rvalue, CallExpr) and isinstance(s.rvalue.callee, RefExpr) - and s.rvalue.callee.fullname == "typing.NewType" + and (s.rvalue.callee.fullname in ("typing.NewType", "typing_extensions.NewType")) ): name = s.lvalues[0].name