Fixed recent regression that results in a false positive error when attempting to assign the expression `type(Any)` to type `type[Any]`. This addresses #8973. (#8976)

This commit is contained in:
Eric Traut 2024-09-12 12:49:41 -07:00 коммит произвёл GitHub
Родитель a0ecfe25d6
Коммит dd3ba0a96a
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
3 изменённых файлов: 17 добавлений и 6 удалений

Просмотреть файл

@ -24193,7 +24193,11 @@ export function createTypeEvaluator(
if (isClassInstance(destType)) {
if (ClassType.isBuiltIn(destType, 'type')) {
if (isInstantiableClass(srcType) && isSpecialFormClass(srcType, flags)) {
if (
isInstantiableClass(srcType) &&
isSpecialFormClass(srcType, flags) &&
TypeBase.getInstantiableDepth(srcType) === 0
) {
return false;
}

Просмотреть файл

@ -13,12 +13,10 @@ v1 = cast(Any, 0)
v2 = cast(typing.Any, 0)
class A(Any):
...
class A(Any): ...
class B(typing.Any):
...
class B(typing.Any): ...
# This should generate an error because Any is not callable.
@ -36,3 +34,12 @@ def func1() -> int:
def func2() -> int:
# This should generate an error because Any cannot be used as a value.
return typing.Any
v3: type[Any] = type(Any)
# This should generate an error.
v4: type[type] = type(Any)
# This should generate an error.
v5: type = Any

Просмотреть файл

@ -962,7 +962,7 @@ test('Del2', () => {
test('Any1', () => {
const analysisResults = TestUtils.typeAnalyzeSampleFiles(['any1.py']);
TestUtils.validateResults(analysisResults, 6);
TestUtils.validateResults(analysisResults, 8);
});
test('Type1', () => {