@zzzen/pyright-internal 1.2.0-dev.20261101 → 1.2.0-dev.20261108
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analyzer/binder.js +9 -3
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/constructorTransform.js +12 -0
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/constructors.d.ts +1 -1
- package/dist/analyzer/constructors.js +1 -1
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/decorators.d.ts +1 -1
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/functionTransform.d.ts +5 -0
- package/dist/analyzer/functionTransform.js +6 -3
- package/dist/analyzer/functionTransform.js.map +1 -1
- package/dist/analyzer/missingBindingMetadata.d.ts +6 -0
- package/dist/analyzer/missingBindingMetadata.js +22 -0
- package/dist/analyzer/missingBindingMetadata.js.map +1 -0
- package/dist/analyzer/namedTuples.d.ts +4 -1
- package/dist/analyzer/namedTuples.js +1 -0
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/patternMatching.d.ts +5 -1
- package/dist/analyzer/patternMatching.js +3 -0
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +3 -0
- package/dist/analyzer/program.js +71 -1
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/tuples.d.ts +1 -1
- package/dist/analyzer/tuples.js.map +1 -1
- package/dist/analyzer/typeCacheUtils.d.ts +1 -0
- package/dist/analyzer/typeCacheUtils.js +10 -0
- package/dist/analyzer/typeCacheUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator/boundMethodSpecialization.d.ts +15 -0
- package/dist/analyzer/typeEvaluator/boundMethodSpecialization.js +98 -0
- package/dist/analyzer/typeEvaluator/boundMethodSpecialization.js.map +1 -0
- package/dist/analyzer/typeEvaluator/classConstruction.d.ts +25 -0
- package/dist/analyzer/typeEvaluator/classConstruction.js +251 -0
- package/dist/analyzer/typeEvaluator/classConstruction.js.map +1 -0
- package/dist/analyzer/typeEvaluator/collectionInference.d.ts +41 -0
- package/dist/analyzer/typeEvaluator/collectionInference.js +695 -0
- package/dist/analyzer/typeEvaluator/collectionInference.js.map +1 -0
- package/dist/analyzer/typeEvaluator/diagnostics.d.ts +33 -0
- package/dist/analyzer/typeEvaluator/diagnostics.js +198 -0
- package/dist/analyzer/typeEvaluator/diagnostics.js.map +1 -0
- package/dist/analyzer/typeEvaluator/evaluatorCore.d.ts +80 -0
- package/dist/analyzer/typeEvaluator/evaluatorCore.js +1126 -0
- package/dist/analyzer/typeEvaluator/evaluatorCore.js.map +1 -0
- package/dist/analyzer/typeEvaluator/evaluatorNarrowing.d.ts +17 -0
- package/dist/analyzer/typeEvaluator/evaluatorNarrowing.js +370 -0
- package/dist/analyzer/typeEvaluator/evaluatorNarrowing.js.map +1 -0
- package/dist/analyzer/typeEvaluator/expressionEvaluation.d.ts +81 -0
- package/dist/analyzer/typeEvaluator/expressionEvaluation.js +1802 -0
- package/dist/analyzer/typeEvaluator/expressionEvaluation.js.map +1 -0
- package/dist/analyzer/typeEvaluator/flowAnalysis.d.ts +33 -0
- package/dist/analyzer/typeEvaluator/flowAnalysis.js +217 -0
- package/dist/analyzer/typeEvaluator/flowAnalysis.js.map +1 -0
- package/dist/analyzer/typeEvaluator/internals.d.ts +137 -0
- package/dist/analyzer/typeEvaluator/internals.js +10 -0
- package/dist/analyzer/typeEvaluator/internals.js.map +1 -0
- package/dist/analyzer/typeEvaluator/literalTypes.d.ts +3 -0
- package/dist/analyzer/typeEvaluator/literalTypes.js +52 -0
- package/dist/analyzer/typeEvaluator/literalTypes.js.map +1 -0
- package/dist/analyzer/typeEvaluator/memberResolution.d.ts +79 -0
- package/dist/analyzer/typeEvaluator/memberResolution.js +1007 -0
- package/dist/analyzer/typeEvaluator/memberResolution.js.map +1 -0
- package/dist/analyzer/typeEvaluator/overrideValidation.d.ts +15 -0
- package/dist/analyzer/typeEvaluator/overrideValidation.js +422 -0
- package/dist/analyzer/typeEvaluator/overrideValidation.js.map +1 -0
- package/dist/analyzer/typeEvaluator/returnTypeInference.d.ts +33 -0
- package/dist/analyzer/typeEvaluator/returnTypeInference.js +226 -0
- package/dist/analyzer/typeEvaluator/returnTypeInference.js.map +1 -0
- package/dist/analyzer/typeEvaluator/specialFormCreation.d.ts +39 -0
- package/dist/analyzer/typeEvaluator/specialFormCreation.js +1728 -0
- package/dist/analyzer/typeEvaluator/specialFormCreation.js.map +1 -0
- package/dist/analyzer/typeEvaluator/tupleUnpacking.d.ts +2 -0
- package/dist/analyzer/typeEvaluator/tupleUnpacking.js +36 -0
- package/dist/analyzer/typeEvaluator/tupleUnpacking.js.map +1 -0
- package/dist/analyzer/typeEvaluator/typeCompatibility.d.ts +36 -0
- package/dist/analyzer/typeEvaluator/typeCompatibility.js +1320 -0
- package/dist/analyzer/typeEvaluator/typeCompatibility.js.map +1 -0
- package/dist/analyzer/typeEvaluator/typeGuardNarrowing.d.ts +186 -0
- package/dist/analyzer/typeEvaluator/typeGuardNarrowing.js +1683 -0
- package/dist/analyzer/typeEvaluator/typeGuardNarrowing.js.map +1 -0
- package/dist/analyzer/typeEvaluator/typeVarHandling.d.ts +48 -0
- package/dist/analyzer/typeEvaluator/typeVarHandling.js +756 -0
- package/dist/analyzer/typeEvaluator/typeVarHandling.js.map +1 -0
- package/dist/analyzer/typeEvaluator.d.ts +3 -31
- package/dist/analyzer/typeEvaluator.js +5033 -13761
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeGuards.d.ts +2 -2
- package/dist/analyzer/typeGuards.js +212 -1567
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typeUtils.js +6 -2
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typedDicts.js +111 -0
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/browser/browserConnection.d.ts +12 -0
- package/dist/browser/browserConnection.js +23 -0
- package/dist/browser/browserConnection.js.map +1 -0
- package/dist/browser/browserFileSystem.d.ts +73 -0
- package/dist/browser/browserFileSystem.js +578 -0
- package/dist/browser/browserFileSystem.js.map +1 -0
- package/dist/browser/browserHost.d.ts +4 -0
- package/dist/browser/browserHost.js +10 -0
- package/dist/browser/browserHost.js.map +1 -0
- package/dist/browser/browserProcess.d.ts +1 -0
- package/dist/browser/browserProcess.js +17 -0
- package/dist/browser/browserProcess.js.map +1 -0
- package/dist/browser/browserServer.d.ts +8 -0
- package/dist/browser/browserServer.js +32 -0
- package/dist/browser/browserServer.js.map +1 -0
- package/dist/browser/cancellation/common.d.ts +10 -0
- package/dist/browser/cancellation/common.js +114 -0
- package/dist/browser/cancellation/common.js.map +1 -0
- package/dist/browser/cancellation/objectURLReceiverStrategy.d.ts +5 -0
- package/dist/browser/cancellation/objectURLReceiverStrategy.js +37 -0
- package/dist/browser/cancellation/objectURLReceiverStrategy.js.map +1 -0
- package/dist/browser/cancellation/objectURLSenderStrategy.d.ts +7 -0
- package/dist/browser/cancellation/objectURLSenderStrategy.js +32 -0
- package/dist/browser/cancellation/objectURLSenderStrategy.js.map +1 -0
- package/dist/browser/worker.d.ts +1 -0
- package/dist/browser/worker.js +33 -0
- package/dist/browser/worker.js.map +1 -0
- package/dist/pyrightServer.d.ts +34 -0
- package/dist/pyrightServer.js +239 -0
- package/dist/pyrightServer.js.map +1 -0
- package/dist/server.d.ts +3 -23
- package/dist/server.js +12 -232
- package/dist/server.js.map +1 -1
- package/dist/tests/benchmarks/typeInferenceComparison.d.ts +1 -0
- package/dist/tests/benchmarks/typeInferenceComparison.js +1235 -0
- package/dist/tests/benchmarks/typeInferenceComparison.js.map +1 -0
- package/dist/tests/benchmarks/typeInferencePyrightEntry.d.ts +1 -0
- package/dist/tests/benchmarks/typeInferencePyrightEntry.js +53 -0
- package/dist/tests/benchmarks/typeInferencePyrightEntry.js.map +1 -0
- package/dist/tests/browserCancellation.test.d.ts +1 -0
- package/dist/tests/browserCancellation.test.js +63 -0
- package/dist/tests/browserCancellation.test.js.map +1 -0
- package/dist/tests/browserServer.test.d.ts +1 -0
- package/dist/tests/browserServer.test.js +177 -0
- package/dist/tests/browserServer.test.js.map +1 -0
- package/dist/tests/constraintSolver.test.js +45 -0
- package/dist/tests/constraintSolver.test.js.map +1 -1
- package/dist/tests/mypyPrimerAnalysis.test.js +15 -1
- package/dist/tests/mypyPrimerAnalysis.test.js.map +1 -1
- package/dist/tests/typeCacheUtils.test.js +46 -0
- package/dist/tests/typeCacheUtils.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +75 -0
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +4 -0
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +32 -0
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator7.test.js +394 -0
- package/dist/tests/typeEvaluator7.test.js.map +1 -1
- package/dist/tests/typeUtils.test.js +28 -0
- package/dist/tests/typeUtils.test.js.map +1 -1
- package/dist/typeServer/stubGenerator.js +136 -3
- package/dist/typeServer/stubGenerator.js.map +1 -1
- package/dist/typeServer/typeServerConversionUtils.js +13 -0
- package/dist/typeServer/typeServerConversionUtils.js.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ExpressionNode, ParseNode } from '../../parser/parseNodes';
|
|
2
|
+
import * as AnalyzerNodeInfo from '../analyzerNodeInfo';
|
|
3
|
+
import { Arg, ExpectedTypeOptions, PrefetchedTypes, TypeEvaluator, TypeResult } from '../typeEvaluatorTypes';
|
|
4
|
+
import { ClassType, Type, TypeVarType, UnknownType } from '../types';
|
|
5
|
+
import { InferenceContext } from '../typeUtils';
|
|
6
|
+
interface Context {
|
|
7
|
+
readonly addDiagnostic: TypeEvaluator['addDiagnostic'];
|
|
8
|
+
readonly assignType: TypeEvaluator['assignType'];
|
|
9
|
+
readonly getBaseClassesFromTypeCall: (baseTupleType: ClassType) => Type[] | undefined;
|
|
10
|
+
readonly getBuiltInType: (node: ParseNode, name: string) => Type;
|
|
11
|
+
readonly getNoneType: () => Type;
|
|
12
|
+
readonly getTypeOfArg: (arg: Arg, inferenceContext: InferenceContext | undefined) => TypeResult;
|
|
13
|
+
readonly getTypeOfArgExpectingType: (arg: Arg, options?: ExpectedTypeOptions) => TypeResult;
|
|
14
|
+
readonly nodeInfo: AnalyzerNodeInfo.AnalyzerNodeInfoAccessor;
|
|
15
|
+
readonly prefetched: Partial<PrefetchedTypes> | undefined;
|
|
16
|
+
readonly printType: TypeEvaluator['printType'];
|
|
17
|
+
}
|
|
18
|
+
export declare function createClassConstruction(context: Context): {
|
|
19
|
+
createNewType: (errorNode: ExpressionNode, argList: Arg[]) => ClassType | undefined;
|
|
20
|
+
createClassFromMetaclass: (errorNode: ExpressionNode, argList: Arg[], metaclass: ClassType) => ClassType | undefined;
|
|
21
|
+
createSubclass: (errorNode: ExpressionNode, type1: ClassType, type2: ClassType) => ClassType;
|
|
22
|
+
buildTypeParamsFromTypeArgs: (classType: ClassType) => TypeVarType[];
|
|
23
|
+
computeEffectiveMetaclass: (classType: ClassType, errorNode: ParseNode) => UnknownType | ClassType;
|
|
24
|
+
};
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* classConstruction.ts
|
|
4
|
+
* Copyright (c) Microsoft Corporation.
|
|
5
|
+
* Licensed under the MIT license.
|
|
6
|
+
*
|
|
7
|
+
* Class synthesis and effective metaclass selection.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.createClassConstruction = createClassConstruction;
|
|
44
|
+
const debug_1 = require("../../common/debug");
|
|
45
|
+
const diagnostic_1 = require("../../common/diagnostic");
|
|
46
|
+
const diagnosticRules_1 = require("../../common/diagnosticRules");
|
|
47
|
+
const localize_1 = require("../../localization/localize");
|
|
48
|
+
const ParseTreeUtils = __importStar(require("../parseTreeUtils"));
|
|
49
|
+
const symbol_1 = require("../symbol");
|
|
50
|
+
const types_1 = require("../types");
|
|
51
|
+
const typeUtils_1 = require("../typeUtils");
|
|
52
|
+
// Synthesizes classes and resolves effective metaclasses, delegating evaluation and diagnostics.
|
|
53
|
+
function createClassConstruction(context) {
|
|
54
|
+
const { addDiagnostic, assignType, getBaseClassesFromTypeCall, getBuiltInType, getNoneType, getTypeOfArg, getTypeOfArgExpectingType, nodeInfo, printType, } = context;
|
|
55
|
+
function createNewType(errorNode, argList) {
|
|
56
|
+
const fileInfo = nodeInfo.getFileInfo(errorNode);
|
|
57
|
+
let className = '';
|
|
58
|
+
if (argList.length !== 2) {
|
|
59
|
+
addDiagnostic(diagnosticRules_1.DiagnosticRule.reportCallIssue, localize_1.LocMessage.newTypeParamCount(), errorNode);
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
const nameArg = argList[0];
|
|
63
|
+
if (nameArg.argCategory === 0 /* ArgCategory.Simple */ &&
|
|
64
|
+
nameArg.valueExpression &&
|
|
65
|
+
nameArg.valueExpression.nodeType === 48 /* ParseNodeType.StringList */) {
|
|
66
|
+
className = nameArg.valueExpression.d.strings.map((s) => s.d.value).join('');
|
|
67
|
+
}
|
|
68
|
+
if (!className) {
|
|
69
|
+
addDiagnostic(diagnosticRules_1.DiagnosticRule.reportArgumentType, localize_1.LocMessage.newTypeBadName(), argList[0].node ?? errorNode);
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
if (errorNode.parent?.nodeType === 3 /* ParseNodeType.Assignment */ &&
|
|
73
|
+
errorNode.parent.d.leftExpr.nodeType === 38 /* ParseNodeType.Name */ &&
|
|
74
|
+
errorNode.parent.d.leftExpr.d.value !== className) {
|
|
75
|
+
addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.newTypeNameMismatch(), errorNode.parent.d.leftExpr);
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
let baseClass = getTypeOfArgExpectingType(argList[1]).type;
|
|
79
|
+
let isBaseClassAny = false;
|
|
80
|
+
if ((0, types_1.isAnyOrUnknown)(baseClass)) {
|
|
81
|
+
baseClass = context.prefetched?.objectClass ?? types_1.UnknownType.create();
|
|
82
|
+
addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.newTypeAnyOrUnknown(), argList[1].node ?? errorNode);
|
|
83
|
+
isBaseClassAny = true;
|
|
84
|
+
}
|
|
85
|
+
// Specifically disallow Annotated.
|
|
86
|
+
if (baseClass.props?.specialForm &&
|
|
87
|
+
(0, types_1.isClassInstance)(baseClass.props.specialForm) &&
|
|
88
|
+
types_1.ClassType.isBuiltIn(baseClass.props.specialForm, 'Annotated')) {
|
|
89
|
+
addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.newTypeNotAClass(), argList[1].node || errorNode);
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
if (!(0, types_1.isInstantiableClass)(baseClass)) {
|
|
93
|
+
addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.newTypeNotAClass(), argList[1].node || errorNode);
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
if (types_1.ClassType.isProtocolClass(baseClass) || types_1.ClassType.isTypedDictClass(baseClass)) {
|
|
97
|
+
addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.newTypeProtocolClass(), argList[1].node || errorNode);
|
|
98
|
+
}
|
|
99
|
+
else if (baseClass.priv.literalValue !== undefined) {
|
|
100
|
+
addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.newTypeLiteral(), argList[1].node || errorNode);
|
|
101
|
+
}
|
|
102
|
+
const classType = types_1.ClassType.createInstantiable(className, ParseTreeUtils.getClassFullName(errorNode, fileInfo.moduleName, className), fileInfo.moduleName, fileInfo.fileUri, 256 /* ClassTypeFlags.Final */ | 2097152 /* ClassTypeFlags.NewTypeClass */ | 4194304 /* ClassTypeFlags.ValidTypeAliasClass */, ParseTreeUtils.getTypeSourceId(errorNode),
|
|
103
|
+
/* declaredMetaclass */ undefined, baseClass.shared.effectiveMetaclass);
|
|
104
|
+
classType.shared.baseClasses.push(isBaseClassAny ? types_1.AnyType.create() : baseClass);
|
|
105
|
+
(0, typeUtils_1.computeMroLinearization)(classType);
|
|
106
|
+
if (!isBaseClassAny) {
|
|
107
|
+
// Synthesize an __init__ method that accepts only the specified type.
|
|
108
|
+
const initType = types_1.FunctionType.createSynthesizedInstance('__init__');
|
|
109
|
+
types_1.FunctionType.addParam(initType, types_1.FunctionParam.create(0 /* ParamCategory.Simple */, types_1.AnyType.create(), types_1.FunctionParamFlags.TypeDeclared, 'self'));
|
|
110
|
+
types_1.FunctionType.addParam(initType, types_1.FunctionParam.create(0 /* ParamCategory.Simple */, types_1.ClassType.cloneAsInstance(baseClass), types_1.FunctionParamFlags.TypeDeclared, '_x'));
|
|
111
|
+
initType.shared.declaredReturnType = getNoneType();
|
|
112
|
+
types_1.ClassType.getSymbolTable(classType).set('__init__', symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */, initType));
|
|
113
|
+
// Synthesize a trivial __new__ method.
|
|
114
|
+
const newType = types_1.FunctionType.createSynthesizedInstance('__new__', 1 /* FunctionTypeFlags.ConstructorMethod */);
|
|
115
|
+
types_1.FunctionType.addParam(newType, types_1.FunctionParam.create(0 /* ParamCategory.Simple */, types_1.AnyType.create(), types_1.FunctionParamFlags.TypeDeclared, 'cls'));
|
|
116
|
+
types_1.FunctionType.addDefaultParams(newType);
|
|
117
|
+
newType.shared.declaredReturnType = types_1.ClassType.cloneAsInstance(classType);
|
|
118
|
+
newType.priv.constructorTypeVarScopeId = (0, typeUtils_1.getTypeVarScopeId)(classType);
|
|
119
|
+
types_1.ClassType.getSymbolTable(classType).set('__new__', symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */, newType));
|
|
120
|
+
}
|
|
121
|
+
return classType;
|
|
122
|
+
}
|
|
123
|
+
function createClassFromMetaclass(errorNode, argList, metaclass) {
|
|
124
|
+
const fileInfo = nodeInfo.getFileInfo(errorNode);
|
|
125
|
+
const arg0Type = getTypeOfArg(argList[0], /* inferenceContext */ undefined).type;
|
|
126
|
+
if (!(0, types_1.isClassInstance)(arg0Type) || !types_1.ClassType.isBuiltIn(arg0Type, 'str')) {
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
const className = arg0Type.priv.literalValue || '_';
|
|
130
|
+
const baseTupleType = getTypeOfArg(argList[1], /* inferenceContext */ undefined).type;
|
|
131
|
+
if (!(0, types_1.isClassInstance)(baseTupleType)) {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
const baseClasses = getBaseClassesFromTypeCall(baseTupleType);
|
|
135
|
+
if (!baseClasses) {
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
const classType = types_1.ClassType.createInstantiable(className, ParseTreeUtils.getClassFullName(errorNode, fileInfo.moduleName, className), fileInfo.moduleName, fileInfo.fileUri, 4194304 /* ClassTypeFlags.ValidTypeAliasClass */, ParseTreeUtils.getTypeSourceId(errorNode), metaclass, baseTupleType.shared.effectiveMetaclass);
|
|
139
|
+
classType.shared.baseClasses.push(...baseClasses);
|
|
140
|
+
if (!(0, typeUtils_1.computeMroLinearization)(classType)) {
|
|
141
|
+
addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.methodOrdering(), errorNode);
|
|
142
|
+
}
|
|
143
|
+
return classType;
|
|
144
|
+
}
|
|
145
|
+
function createSubclass(errorNode, type1, type2) {
|
|
146
|
+
(0, debug_1.assert)((0, types_1.isInstantiableClass)(type1) && (0, types_1.isInstantiableClass)(type2));
|
|
147
|
+
// If both classes are class objects (type[A] and type[B]), create a new
|
|
148
|
+
// class object (type[A & B]) rather than "type[A] & type[B]".
|
|
149
|
+
let createClassObject = false;
|
|
150
|
+
if (types_1.TypeBase.getInstantiableDepth(type1) > 0 && types_1.TypeBase.getInstantiableDepth(type2) > 0) {
|
|
151
|
+
type1 = types_1.ClassType.cloneAsInstance(type1);
|
|
152
|
+
type2 = types_1.ClassType.cloneAsInstance(type2);
|
|
153
|
+
createClassObject = true;
|
|
154
|
+
}
|
|
155
|
+
const className = `<subclass of ${printType((0, typeUtils_1.convertToInstance)(type1), {
|
|
156
|
+
omitTypeArgsIfUnknown: true,
|
|
157
|
+
})} and ${printType((0, typeUtils_1.convertToInstance)(type2), { omitTypeArgsIfUnknown: true })}>`;
|
|
158
|
+
const fileInfo = nodeInfo.getFileInfo(errorNode);
|
|
159
|
+
// The effective metaclass of the intersection is the narrower of the two metaclasses.
|
|
160
|
+
let effectiveMetaclass = type1.shared.effectiveMetaclass;
|
|
161
|
+
if (type2.shared.effectiveMetaclass) {
|
|
162
|
+
if (!effectiveMetaclass || assignType(effectiveMetaclass, type2.shared.effectiveMetaclass)) {
|
|
163
|
+
effectiveMetaclass = type2.shared.effectiveMetaclass;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
let newClassType = types_1.ClassType.createInstantiable(className, ParseTreeUtils.getClassFullName(errorNode, fileInfo.moduleName, className), fileInfo.moduleName, fileInfo.fileUri, 0 /* ClassTypeFlags.None */, ParseTreeUtils.getTypeSourceId(errorNode),
|
|
167
|
+
/* declaredMetaclass */ undefined, effectiveMetaclass, type1.shared.docString);
|
|
168
|
+
newClassType.shared.baseClasses = [type1, type2];
|
|
169
|
+
(0, typeUtils_1.computeMroLinearization)(newClassType);
|
|
170
|
+
newClassType = (0, typeUtils_1.addConditionToType)(newClassType, type1.props?.condition);
|
|
171
|
+
newClassType = (0, typeUtils_1.addConditionToType)(newClassType, type2.props?.condition);
|
|
172
|
+
if (createClassObject) {
|
|
173
|
+
newClassType = types_1.ClassType.cloneAsInstantiable(newClassType);
|
|
174
|
+
}
|
|
175
|
+
return newClassType;
|
|
176
|
+
}
|
|
177
|
+
function buildTypeParamsFromTypeArgs(classType) {
|
|
178
|
+
const typeParams = [];
|
|
179
|
+
const typeArgs = classType.priv.typeArgs ?? [];
|
|
180
|
+
typeArgs.forEach((typeArg, index) => {
|
|
181
|
+
if ((0, types_1.isTypeVar)(typeArg)) {
|
|
182
|
+
typeParams.push(typeArg);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
// Synthesize a dummy type parameter.
|
|
186
|
+
const typeVar = types_1.TypeVarType.createInstance(`__P${index}`);
|
|
187
|
+
typeVar.shared.isSynthesized = true;
|
|
188
|
+
typeParams.push(typeVar);
|
|
189
|
+
});
|
|
190
|
+
return typeParams;
|
|
191
|
+
}
|
|
192
|
+
function computeEffectiveMetaclass(classType, errorNode) {
|
|
193
|
+
let effectiveMetaclass = classType.shared.declaredMetaclass;
|
|
194
|
+
let reportedMetaclassConflict = false;
|
|
195
|
+
if (!effectiveMetaclass || (0, types_1.isInstantiableClass)(effectiveMetaclass)) {
|
|
196
|
+
for (const baseClass of classType.shared.baseClasses) {
|
|
197
|
+
if ((0, types_1.isInstantiableClass)(baseClass)) {
|
|
198
|
+
const baseClassMeta = baseClass.shared.effectiveMetaclass ?? context.prefetched?.typeClass;
|
|
199
|
+
if (baseClassMeta && (0, types_1.isInstantiableClass)(baseClassMeta)) {
|
|
200
|
+
// Make sure there is no metaclass conflict.
|
|
201
|
+
if (!effectiveMetaclass) {
|
|
202
|
+
effectiveMetaclass = baseClassMeta;
|
|
203
|
+
}
|
|
204
|
+
else if ((0, typeUtils_1.derivesFromClassRecursive)(baseClassMeta, effectiveMetaclass, /* ignoreUnknown */ false)) {
|
|
205
|
+
effectiveMetaclass = baseClassMeta;
|
|
206
|
+
}
|
|
207
|
+
else if (!(0, typeUtils_1.derivesFromClassRecursive)(effectiveMetaclass, baseClassMeta, /* ignoreUnknown */ false)) {
|
|
208
|
+
if (!reportedMetaclassConflict) {
|
|
209
|
+
const diag = new diagnostic_1.DiagnosticAddendum();
|
|
210
|
+
diag.addMessage(localize_1.LocAddendum.metaclassConflict().format({
|
|
211
|
+
metaclass1: printType((0, typeUtils_1.convertToInstance)(effectiveMetaclass)),
|
|
212
|
+
metaclass2: printType((0, typeUtils_1.convertToInstance)(baseClassMeta)),
|
|
213
|
+
}));
|
|
214
|
+
addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.metaclassConflict() + diag.getString(), errorNode);
|
|
215
|
+
// Don't report more than once.
|
|
216
|
+
reportedMetaclassConflict = true;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
effectiveMetaclass = baseClassMeta ? types_1.UnknownType.create() : undefined;
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
// If one of the base classes is unknown, then the effective
|
|
227
|
+
// metaclass is also unknowable.
|
|
228
|
+
effectiveMetaclass = types_1.UnknownType.create();
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// If we haven't found an effective metaclass, assume "type", which
|
|
234
|
+
// is the metaclass for "object".
|
|
235
|
+
if (!effectiveMetaclass) {
|
|
236
|
+
const typeMetaclass = getBuiltInType(errorNode, 'type');
|
|
237
|
+
effectiveMetaclass =
|
|
238
|
+
typeMetaclass && (0, types_1.isInstantiableClass)(typeMetaclass) ? typeMetaclass : types_1.UnknownType.create();
|
|
239
|
+
}
|
|
240
|
+
classType.shared.effectiveMetaclass = effectiveMetaclass;
|
|
241
|
+
return effectiveMetaclass;
|
|
242
|
+
}
|
|
243
|
+
return {
|
|
244
|
+
createNewType,
|
|
245
|
+
createClassFromMetaclass,
|
|
246
|
+
createSubclass,
|
|
247
|
+
buildTypeParamsFromTypeArgs,
|
|
248
|
+
computeEffectiveMetaclass,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=classConstruction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classConstruction.js","sourceRoot":"","sources":["../../../../../../src/analyzer/typeEvaluator/classConstruction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { DiagnosticAddendum } from '../../common/diagnostic';
|
|
2
|
+
import { ComprehensionForIfNode, ComprehensionNode, DictionaryNode, ExpressionNode, ListNode, ParseNode, SetNode } from '../../parser/parseNodes';
|
|
3
|
+
import * as AnalyzerNodeInfo from '../analyzerNodeInfo';
|
|
4
|
+
import { ConstraintTracker } from '../constraintTracker';
|
|
5
|
+
import { EvalFlags, PrefetchedTypes, SolveConstraintsOptions, TypeEvaluator, TypeResult } from '../typeEvaluatorTypes';
|
|
6
|
+
import { AnyType, ClassType, FunctionType, ModuleType, NeverType, OverloadedType, OverloadResultType, Type, TypeCondition, TypeVarType, UnboundType, UnionType, UnknownType } from '../types';
|
|
7
|
+
import { ApplyTypeVarOptions, InferenceContext } from '../typeUtils';
|
|
8
|
+
interface Context {
|
|
9
|
+
readonly addDiagnostic: TypeEvaluator['addDiagnostic'];
|
|
10
|
+
readonly assignType: TypeEvaluator['assignType'];
|
|
11
|
+
readonly assignTypeToExpression: (target: ExpressionNode, typeResult: TypeResult, srcExpr: ExpressionNode, ignoreEmptyContainers?: boolean, allowAssignmentToFinalVar?: boolean, expectedTypeDiagAddendum?: DiagnosticAddendum) => void;
|
|
12
|
+
readonly convertSpecialFormToRuntimeValue: (type: Type, flags: EvalFlags, convertModule?: boolean) => Type;
|
|
13
|
+
readonly evaluatorInterface: TypeEvaluator;
|
|
14
|
+
readonly getBuiltInObject: (node: ParseNode, name: string, typeArgs?: Type[]) => UnboundType | UnknownType | AnyType | FunctionType | OverloadedType | ClassType | ModuleType | TypeVarType | OverloadResultType | NeverType | UnionType;
|
|
15
|
+
readonly getBuiltInType: (node: ParseNode, name: string) => Type;
|
|
16
|
+
readonly getNoneType: () => Type;
|
|
17
|
+
readonly getObjectType: () => Type;
|
|
18
|
+
readonly getTupleClassType: () => ClassType | undefined;
|
|
19
|
+
readonly getTypeOfExpression: TypeEvaluator['getTypeOfExpression'];
|
|
20
|
+
readonly getTypeOfIterator: (typeResult: TypeResult, isAsync: boolean, errorNode: ExpressionNode, emitNotIterableError?: boolean) => TypeResult | undefined;
|
|
21
|
+
readonly getTypeVarScopesForNode: (node: ParseNode) => string[];
|
|
22
|
+
readonly getTypingType: (node: ParseNode, symbolName: string) => Type | undefined;
|
|
23
|
+
readonly inferVarianceForClass: (classType: ClassType) => void;
|
|
24
|
+
readonly isTypeHashable: (type: Type) => boolean;
|
|
25
|
+
readonly makeTopLevelTypeVarsConcrete: (type: Type, makeParamSpecsConcrete?: boolean, conditionFilter?: TypeCondition[]) => Type;
|
|
26
|
+
readonly maxEntriesToUseForInference: 64;
|
|
27
|
+
readonly nodeInfo: AnalyzerNodeInfo.AnalyzerNodeInfoAccessor;
|
|
28
|
+
readonly prefetched: Partial<PrefetchedTypes> | undefined;
|
|
29
|
+
readonly printType: TypeEvaluator['printType'];
|
|
30
|
+
readonly solveAndApplyConstraints: (type: Type, constraints: ConstraintTracker, applyOptions?: ApplyTypeVarOptions, solveOptions?: SolveConstraintsOptions) => Type;
|
|
31
|
+
readonly stripLiteralValue: (type: Type) => Type;
|
|
32
|
+
}
|
|
33
|
+
export declare function createCollectionInference(context: Context): {
|
|
34
|
+
getTypeOfDictionaryWithContext: (node: DictionaryNode, flags: EvalFlags, inferenceContext: InferenceContext, expectedDiagAddendum?: DiagnosticAddendum) => TypeResult | undefined;
|
|
35
|
+
getTypeOfDictionaryInferred: (node: DictionaryNode, flags: EvalFlags, hasExpectedType: boolean) => TypeResult;
|
|
36
|
+
getTypeOfListOrSetWithContext: (node: ListNode | SetNode, flags: EvalFlags, inferenceContext: InferenceContext) => TypeResult | undefined;
|
|
37
|
+
getTypeOfListOrSetInferred: (node: ListNode | SetNode, flags: EvalFlags, hasExpectedType: boolean) => TypeResult;
|
|
38
|
+
getTypeOfComprehension: (node: ComprehensionNode, flags: EvalFlags, inferenceContext?: InferenceContext) => TypeResult;
|
|
39
|
+
evaluateComprehensionForIf: (node: ComprehensionForIfNode) => boolean;
|
|
40
|
+
};
|
|
41
|
+
export {};
|