Fixed bug that resulted in a false positive error when an abstract class is used for a NewType and the new type is constructed. This addresses #8256.

This commit is contained in:
Eric Traut 2024-06-30 19:48:08 -07:00
parent 353a17cdec
commit 8a9ba9b77b
2 changed files with 16 additions and 3 deletions

View File

@ -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

View File

@ -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())