@@ -4360,7 +4360,7 @@ export function createTypeEvaluator(
43604360 let annotationType: Type | undefined = getTypeOfAnnotation(target.d.annotation, {
43614361 varTypeAnnotation: true,
43624362 allowFinal: ParseTreeUtils.isFinalAllowedForAssignmentTarget(target.d.valueExpr),
4363- allowClassVar: ParseTreeUtils. isClassVarAllowedForAssignmentTarget(target.d.valueExpr),
4363+ allowClassVar: isClassVarAllowedForAssignmentTarget(target.d.valueExpr),
43644364 });
43654365
43664366 if (annotationType) {
@@ -4433,6 +4433,21 @@ export function createTypeEvaluator(
44334433 }
44344434 }
44354435
4436+ function isClassVarAllowedForAssignmentTarget(targetNode: ExpressionNode): boolean {
4437+ const classNode = ParseTreeUtils.getEnclosingClass(targetNode, /* stopAtFunction */ true);
4438+ if (!classNode) {
4439+ return false;
4440+ }
4441+
4442+ // ClassVar is not allowed in a TypedDict or a NamedTuple class.
4443+ const classType = getTypeOfClass(classNode)?.classType;
4444+ if (!classType) {
4445+ return false;
4446+ }
4447+
4448+ return !ClassType.isTypedDictClass(classType) && !classType.shared.namedTupleEntries;
4449+ }
4450+
44364451 function verifyRaiseExceptionType(node: ExpressionNode, allowNone: boolean) {
44374452 const baseExceptionType = getBuiltInType(node, 'BaseException');
44384453 const exceptionType = getTypeOfExpression(node).type;
@@ -19924,7 +19939,7 @@ export function createTypeEvaluator(
1992419939 const annotationType = getTypeOfAnnotation(node.d.annotation, {
1992519940 varTypeAnnotation: true,
1992619941 allowFinal: ParseTreeUtils.isFinalAllowedForAssignmentTarget(node.d.valueExpr),
19927- allowClassVar: ParseTreeUtils. isClassVarAllowedForAssignmentTarget(node.d.valueExpr),
19942+ allowClassVar: isClassVarAllowedForAssignmentTarget(node.d.valueExpr),
1992819943 });
1992919944
1993019945 writeTypeCache(node.d.valueExpr, { type: annotationType }, EvalFlags.None);
@@ -20073,7 +20088,7 @@ export function createTypeEvaluator(
2007320088 getTypeOfAnnotation(annotationNode, {
2007420089 varTypeAnnotation: true,
2007520090 allowFinal: ParseTreeUtils.isFinalAllowedForAssignmentTarget(annotationParent.d.leftExpr),
20076- allowClassVar: ParseTreeUtils. isClassVarAllowedForAssignmentTarget(annotationParent.d.leftExpr),
20091+ allowClassVar: isClassVarAllowedForAssignmentTarget(annotationParent.d.leftExpr),
2007720092 });
2007820093 } else {
2007920094 evaluateTypesForAssignmentStatement(annotationParent);
@@ -22048,7 +22063,7 @@ export function createTypeEvaluator(
2204822063 declaration.node.parent?.nodeType === ParseNodeType.MemberAccess
2204922064 ? declaration.node.parent
2205022065 : declaration.node;
22051- const allowClassVar = ParseTreeUtils. isClassVarAllowedForAssignmentTarget(declNode);
22066+ const allowClassVar = isClassVarAllowedForAssignmentTarget(declNode);
2205222067 const allowFinal = ParseTreeUtils.isFinalAllowedForAssignmentTarget(declNode);
2205322068 const allowRequired =
2205422069 ParseTreeUtils.isRequiredAllowedForAssignmentTarget(declNode) ||
0 commit comments