From 093e74aa6e3eaa071bc781b8042ae2dc508f6c79 Mon Sep 17 00:00:00 2001 From: Eric Traut Date: Thu, 13 Jun 2024 08:56:09 -0700 Subject: [PATCH] Fixed bug that causes a "bare" `type` (with no type argument) or `type[Any]` to be treated as a possible descriptor object. This addresses #8136. (#8138) --- packages/pyright-internal/src/analyzer/typeEvaluator.ts | 2 +- packages/pyright-internal/src/tests/samples/type1.py | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/pyright-internal/src/analyzer/typeEvaluator.ts b/packages/pyright-internal/src/analyzer/typeEvaluator.ts index c46461ae7..336ff7c75 100644 --- a/packages/pyright-internal/src/analyzer/typeEvaluator.ts +++ b/packages/pyright-internal/src/analyzer/typeEvaluator.ts @@ -2239,7 +2239,7 @@ export function createTypeEvaluator( // If this is a type[Any] or type[Unknown], allow any other members. if (isClassInstance(objectType) && ClassType.isBuiltIn(objectType, 'type') && objectType.includeSubclasses) { - if ((flags & MemberAccessFlags.SkipTypeBaseClass) === 0) { + if ((flags & (MemberAccessFlags.SkipTypeBaseClass | MemberAccessFlags.SkipAttributeAccessOverride)) === 0) { const typeArg = objectType.typeArguments && objectType.typeArguments.length >= 1 ? objectType.typeArguments[0] diff --git a/packages/pyright-internal/src/tests/samples/type1.py b/packages/pyright-internal/src/tests/samples/type1.py index 0ca4899a6..0afcac63e 100644 --- a/packages/pyright-internal/src/tests/samples/type1.py +++ b/packages/pyright-internal/src/tests/samples/type1.py @@ -124,3 +124,12 @@ def func7(v: type): class Class1(Generic[T]): def method1(self, v: type) -> type[T]: return v + + +class Class2: + x1: type + x2: type[Any] + + +reveal_type(Class2.x1, expected_text="type") +reveal_type(Class2.x2, expected_text="type[Any]")