From 648ae44bfe1ad77798dee4c14f5a5712266f5f01 Mon Sep 17 00:00:00 2001 From: Eric Traut Date: Thu, 5 May 2022 16:15:34 -0700 Subject: [PATCH] Fixed bug that resulted in false positive error when using a member access expression within a list of base classes in a class declaration statement. --- .../src/analyzer/typeEvaluator.ts | 10 +++++++--- .../src/tests/samples/classes1.py | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/packages/pyright-internal/src/analyzer/typeEvaluator.ts b/packages/pyright-internal/src/analyzer/typeEvaluator.ts index 913eeebdf..8177f0a55 100644 --- a/packages/pyright-internal/src/analyzer/typeEvaluator.ts +++ b/packages/pyright-internal/src/analyzer/typeEvaluator.ts @@ -3926,7 +3926,12 @@ export function createTypeEvaluator(importLookup: ImportLookup, evaluatorOptions } } - if (isTypeVar(type) && (flags & EvaluatorFlags.ExpectingType) === 0 && type.details.name === name) { + if ( + isTypeVar(type) && + !type.details.isParamSpec && + (flags & EvaluatorFlags.ExpectingType) === 0 && + type.details.name === name + ) { // Handle the special case of a PEP 604 union. These can appear within // an implied type alias where we are not expecting a type. const isPep604Union = @@ -4332,8 +4337,7 @@ export function createTypeEvaluator(importLookup: ImportLookup, evaluatorOptions const baseTypeFlags = EvaluatorFlags.DoNotSpecialize | (flags & - (EvaluatorFlags.ExpectingType | - EvaluatorFlags.ExpectingTypeAnnotation | + (EvaluatorFlags.ExpectingTypeAnnotation | EvaluatorFlags.VariableTypeAnnotation | EvaluatorFlags.AllowForwardReferences | EvaluatorFlags.NotParsedByInterpreter | diff --git a/packages/pyright-internal/src/tests/samples/classes1.py b/packages/pyright-internal/src/tests/samples/classes1.py index cc5c6feac..c47a7b260 100644 --- a/packages/pyright-internal/src/tests/samples/classes1.py +++ b/packages/pyright-internal/src/tests/samples/classes1.py @@ -2,6 +2,9 @@ # handle various class definition cases. +from typing import Type + + class Foo: pass @@ -22,3 +25,18 @@ class Bar3(Foo, metaclass=type, metaclass=type): class Bar4(Foo, other_keyword=2): pass + + +class A: + ... + + +class B: + C: Type[A] + + +app = B() + + +class D(app.C): + ...