diff --git a/packages/pyright-internal/src/analyzer/typeEvaluator.ts b/packages/pyright-internal/src/analyzer/typeEvaluator.ts index ed220eb73..dd43a1bb7 100644 --- a/packages/pyright-internal/src/analyzer/typeEvaluator.ts +++ b/packages/pyright-internal/src/analyzer/typeEvaluator.ts @@ -13006,14 +13006,12 @@ export function createTypeEvaluator( ); } - let classFlags = baseClass.details.flags & ~(ClassTypeFlags.BuiltInClass | ClassTypeFlags.SpecialBuiltIn); - classFlags |= ClassTypeFlags.Final | ClassTypeFlags.NewTypeClass | ClassTypeFlags.ValidTypeAliasClass; const classType = ClassType.createInstantiable( className, ParseTreeUtils.getClassFullName(errorNode, fileInfo.moduleName, className), fileInfo.moduleName, fileInfo.fileUri, - classFlags, + ClassTypeFlags.Final | ClassTypeFlags.NewTypeClass | ClassTypeFlags.ValidTypeAliasClass, ParseTreeUtils.getTypeSourceId(errorNode), /* declaredMetaclass */ undefined, baseClass.details.effectiveMetaclass diff --git a/packages/pyright-internal/src/tests/samples/newType1.py b/packages/pyright-internal/src/tests/samples/newType1.py index 0a51a0bdc..6a3dfa0dc 100644 --- a/packages/pyright-internal/src/tests/samples/newType1.py +++ b/packages/pyright-internal/src/tests/samples/newType1.py @@ -1,6 +1,7 @@ # This sample tests the type handler's handling of the # built-in NewType function. +from abc import ABC, abstractmethod from typing import Any, NewType, TypeVar, TypedDict MyString = NewType("MyString", "str") @@ -76,3 +77,17 @@ def func2(x: MyString): # with a NewType. if issubclass(type(x), (MyString, int)): pass + + +class AbstractBase(ABC): + @abstractmethod + def method1(self, /) -> int: ... + + +class DerivedBase(AbstractBase): + def method1(self, /) -> int: + return 0 + + +NewDerived = NewType("NewDerived", AbstractBase) +new_derived = NewDerived(DerivedBase())