@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.
Files changed (159) hide show
  1. package/dist/analyzer/binder.js +9 -3
  2. package/dist/analyzer/binder.js.map +1 -1
  3. package/dist/analyzer/constructorTransform.js +12 -0
  4. package/dist/analyzer/constructorTransform.js.map +1 -1
  5. package/dist/analyzer/constructors.d.ts +1 -1
  6. package/dist/analyzer/constructors.js +1 -1
  7. package/dist/analyzer/constructors.js.map +1 -1
  8. package/dist/analyzer/decorators.d.ts +1 -1
  9. package/dist/analyzer/decorators.js.map +1 -1
  10. package/dist/analyzer/functionTransform.d.ts +5 -0
  11. package/dist/analyzer/functionTransform.js +6 -3
  12. package/dist/analyzer/functionTransform.js.map +1 -1
  13. package/dist/analyzer/missingBindingMetadata.d.ts +6 -0
  14. package/dist/analyzer/missingBindingMetadata.js +22 -0
  15. package/dist/analyzer/missingBindingMetadata.js.map +1 -0
  16. package/dist/analyzer/namedTuples.d.ts +4 -1
  17. package/dist/analyzer/namedTuples.js +1 -0
  18. package/dist/analyzer/namedTuples.js.map +1 -1
  19. package/dist/analyzer/patternMatching.d.ts +5 -1
  20. package/dist/analyzer/patternMatching.js +3 -0
  21. package/dist/analyzer/patternMatching.js.map +1 -1
  22. package/dist/analyzer/program.d.ts +3 -0
  23. package/dist/analyzer/program.js +71 -1
  24. package/dist/analyzer/program.js.map +1 -1
  25. package/dist/analyzer/tuples.d.ts +1 -1
  26. package/dist/analyzer/tuples.js.map +1 -1
  27. package/dist/analyzer/typeCacheUtils.d.ts +1 -0
  28. package/dist/analyzer/typeCacheUtils.js +10 -0
  29. package/dist/analyzer/typeCacheUtils.js.map +1 -1
  30. package/dist/analyzer/typeEvaluator/boundMethodSpecialization.d.ts +15 -0
  31. package/dist/analyzer/typeEvaluator/boundMethodSpecialization.js +98 -0
  32. package/dist/analyzer/typeEvaluator/boundMethodSpecialization.js.map +1 -0
  33. package/dist/analyzer/typeEvaluator/classConstruction.d.ts +25 -0
  34. package/dist/analyzer/typeEvaluator/classConstruction.js +251 -0
  35. package/dist/analyzer/typeEvaluator/classConstruction.js.map +1 -0
  36. package/dist/analyzer/typeEvaluator/collectionInference.d.ts +41 -0
  37. package/dist/analyzer/typeEvaluator/collectionInference.js +695 -0
  38. package/dist/analyzer/typeEvaluator/collectionInference.js.map +1 -0
  39. package/dist/analyzer/typeEvaluator/diagnostics.d.ts +33 -0
  40. package/dist/analyzer/typeEvaluator/diagnostics.js +198 -0
  41. package/dist/analyzer/typeEvaluator/diagnostics.js.map +1 -0
  42. package/dist/analyzer/typeEvaluator/evaluatorCore.d.ts +80 -0
  43. package/dist/analyzer/typeEvaluator/evaluatorCore.js +1126 -0
  44. package/dist/analyzer/typeEvaluator/evaluatorCore.js.map +1 -0
  45. package/dist/analyzer/typeEvaluator/evaluatorNarrowing.d.ts +17 -0
  46. package/dist/analyzer/typeEvaluator/evaluatorNarrowing.js +370 -0
  47. package/dist/analyzer/typeEvaluator/evaluatorNarrowing.js.map +1 -0
  48. package/dist/analyzer/typeEvaluator/expressionEvaluation.d.ts +81 -0
  49. package/dist/analyzer/typeEvaluator/expressionEvaluation.js +1802 -0
  50. package/dist/analyzer/typeEvaluator/expressionEvaluation.js.map +1 -0
  51. package/dist/analyzer/typeEvaluator/flowAnalysis.d.ts +33 -0
  52. package/dist/analyzer/typeEvaluator/flowAnalysis.js +217 -0
  53. package/dist/analyzer/typeEvaluator/flowAnalysis.js.map +1 -0
  54. package/dist/analyzer/typeEvaluator/internals.d.ts +137 -0
  55. package/dist/analyzer/typeEvaluator/internals.js +10 -0
  56. package/dist/analyzer/typeEvaluator/internals.js.map +1 -0
  57. package/dist/analyzer/typeEvaluator/literalTypes.d.ts +3 -0
  58. package/dist/analyzer/typeEvaluator/literalTypes.js +52 -0
  59. package/dist/analyzer/typeEvaluator/literalTypes.js.map +1 -0
  60. package/dist/analyzer/typeEvaluator/memberResolution.d.ts +79 -0
  61. package/dist/analyzer/typeEvaluator/memberResolution.js +1007 -0
  62. package/dist/analyzer/typeEvaluator/memberResolution.js.map +1 -0
  63. package/dist/analyzer/typeEvaluator/overrideValidation.d.ts +15 -0
  64. package/dist/analyzer/typeEvaluator/overrideValidation.js +422 -0
  65. package/dist/analyzer/typeEvaluator/overrideValidation.js.map +1 -0
  66. package/dist/analyzer/typeEvaluator/returnTypeInference.d.ts +33 -0
  67. package/dist/analyzer/typeEvaluator/returnTypeInference.js +226 -0
  68. package/dist/analyzer/typeEvaluator/returnTypeInference.js.map +1 -0
  69. package/dist/analyzer/typeEvaluator/specialFormCreation.d.ts +39 -0
  70. package/dist/analyzer/typeEvaluator/specialFormCreation.js +1728 -0
  71. package/dist/analyzer/typeEvaluator/specialFormCreation.js.map +1 -0
  72. package/dist/analyzer/typeEvaluator/tupleUnpacking.d.ts +2 -0
  73. package/dist/analyzer/typeEvaluator/tupleUnpacking.js +36 -0
  74. package/dist/analyzer/typeEvaluator/tupleUnpacking.js.map +1 -0
  75. package/dist/analyzer/typeEvaluator/typeCompatibility.d.ts +36 -0
  76. package/dist/analyzer/typeEvaluator/typeCompatibility.js +1320 -0
  77. package/dist/analyzer/typeEvaluator/typeCompatibility.js.map +1 -0
  78. package/dist/analyzer/typeEvaluator/typeGuardNarrowing.d.ts +186 -0
  79. package/dist/analyzer/typeEvaluator/typeGuardNarrowing.js +1683 -0
  80. package/dist/analyzer/typeEvaluator/typeGuardNarrowing.js.map +1 -0
  81. package/dist/analyzer/typeEvaluator/typeVarHandling.d.ts +48 -0
  82. package/dist/analyzer/typeEvaluator/typeVarHandling.js +756 -0
  83. package/dist/analyzer/typeEvaluator/typeVarHandling.js.map +1 -0
  84. package/dist/analyzer/typeEvaluator.d.ts +3 -31
  85. package/dist/analyzer/typeEvaluator.js +5033 -13761
  86. package/dist/analyzer/typeEvaluator.js.map +1 -1
  87. package/dist/analyzer/typeGuards.d.ts +2 -2
  88. package/dist/analyzer/typeGuards.js +212 -1567
  89. package/dist/analyzer/typeGuards.js.map +1 -1
  90. package/dist/analyzer/typeUtils.js +6 -2
  91. package/dist/analyzer/typeUtils.js.map +1 -1
  92. package/dist/analyzer/typedDicts.js +111 -0
  93. package/dist/analyzer/typedDicts.js.map +1 -1
  94. package/dist/browser/browserConnection.d.ts +12 -0
  95. package/dist/browser/browserConnection.js +23 -0
  96. package/dist/browser/browserConnection.js.map +1 -0
  97. package/dist/browser/browserFileSystem.d.ts +73 -0
  98. package/dist/browser/browserFileSystem.js +578 -0
  99. package/dist/browser/browserFileSystem.js.map +1 -0
  100. package/dist/browser/browserHost.d.ts +4 -0
  101. package/dist/browser/browserHost.js +10 -0
  102. package/dist/browser/browserHost.js.map +1 -0
  103. package/dist/browser/browserProcess.d.ts +1 -0
  104. package/dist/browser/browserProcess.js +17 -0
  105. package/dist/browser/browserProcess.js.map +1 -0
  106. package/dist/browser/browserServer.d.ts +8 -0
  107. package/dist/browser/browserServer.js +32 -0
  108. package/dist/browser/browserServer.js.map +1 -0
  109. package/dist/browser/cancellation/common.d.ts +10 -0
  110. package/dist/browser/cancellation/common.js +114 -0
  111. package/dist/browser/cancellation/common.js.map +1 -0
  112. package/dist/browser/cancellation/objectURLReceiverStrategy.d.ts +5 -0
  113. package/dist/browser/cancellation/objectURLReceiverStrategy.js +37 -0
  114. package/dist/browser/cancellation/objectURLReceiverStrategy.js.map +1 -0
  115. package/dist/browser/cancellation/objectURLSenderStrategy.d.ts +7 -0
  116. package/dist/browser/cancellation/objectURLSenderStrategy.js +32 -0
  117. package/dist/browser/cancellation/objectURLSenderStrategy.js.map +1 -0
  118. package/dist/browser/worker.d.ts +1 -0
  119. package/dist/browser/worker.js +33 -0
  120. package/dist/browser/worker.js.map +1 -0
  121. package/dist/pyrightServer.d.ts +34 -0
  122. package/dist/pyrightServer.js +239 -0
  123. package/dist/pyrightServer.js.map +1 -0
  124. package/dist/server.d.ts +3 -23
  125. package/dist/server.js +12 -232
  126. package/dist/server.js.map +1 -1
  127. package/dist/tests/benchmarks/typeInferenceComparison.d.ts +1 -0
  128. package/dist/tests/benchmarks/typeInferenceComparison.js +1235 -0
  129. package/dist/tests/benchmarks/typeInferenceComparison.js.map +1 -0
  130. package/dist/tests/benchmarks/typeInferencePyrightEntry.d.ts +1 -0
  131. package/dist/tests/benchmarks/typeInferencePyrightEntry.js +53 -0
  132. package/dist/tests/benchmarks/typeInferencePyrightEntry.js.map +1 -0
  133. package/dist/tests/browserCancellation.test.d.ts +1 -0
  134. package/dist/tests/browserCancellation.test.js +63 -0
  135. package/dist/tests/browserCancellation.test.js.map +1 -0
  136. package/dist/tests/browserServer.test.d.ts +1 -0
  137. package/dist/tests/browserServer.test.js +177 -0
  138. package/dist/tests/browserServer.test.js.map +1 -0
  139. package/dist/tests/constraintSolver.test.js +45 -0
  140. package/dist/tests/constraintSolver.test.js.map +1 -1
  141. package/dist/tests/mypyPrimerAnalysis.test.js +15 -1
  142. package/dist/tests/mypyPrimerAnalysis.test.js.map +1 -1
  143. package/dist/tests/typeCacheUtils.test.js +46 -0
  144. package/dist/tests/typeCacheUtils.test.js.map +1 -1
  145. package/dist/tests/typeEvaluator1.test.js +75 -0
  146. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  147. package/dist/tests/typeEvaluator3.test.js +4 -0
  148. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  149. package/dist/tests/typeEvaluator4.test.js +32 -0
  150. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  151. package/dist/tests/typeEvaluator7.test.js +394 -0
  152. package/dist/tests/typeEvaluator7.test.js.map +1 -1
  153. package/dist/tests/typeUtils.test.js +28 -0
  154. package/dist/tests/typeUtils.test.js.map +1 -1
  155. package/dist/typeServer/stubGenerator.js +136 -3
  156. package/dist/typeServer/stubGenerator.js.map +1 -1
  157. package/dist/typeServer/typeServerConversionUtils.js +13 -0
  158. package/dist/typeServer/typeServerConversionUtils.js.map +1 -1
  159. 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":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDH,0DA4UC;AA7XD,8CAA4C;AAC5C,wDAA6D;AAC7D,kEAA8D;AAC9D,0DAAsE;AAGtE,kEAAoD;AACpD,sCAAgD;AAEhD,oCAgBkB;AAClB,4CAOsB;AAetB,iGAAiG;AACjG,SAAgB,uBAAuB,CAAC,OAAgB;IACpD,MAAM,EACF,aAAa,EACb,UAAU,EACV,0BAA0B,EAC1B,cAAc,EACd,WAAW,EACX,YAAY,EACZ,yBAAyB,EACzB,QAAQ,EACR,SAAS,GACZ,GAAG,OAAO,CAAC;IAEZ,SAAS,aAAa,CAAC,SAAyB,EAAE,OAAc;QAC5D,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,SAAS,GAAG,EAAE,CAAC;QAEnB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,aAAa,CAAC,gCAAc,CAAC,eAAe,EAAE,qBAAU,CAAC,iBAAiB,EAAE,EAAE,SAAS,CAAC,CAAC;YACzF,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,IACI,OAAO,CAAC,WAAW,+BAAuB;YAC1C,OAAO,CAAC,eAAe;YACvB,OAAO,CAAC,eAAe,CAAC,QAAQ,sCAA6B,EAC/D,CAAC;YACC,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,aAAa,CAAC,gCAAc,CAAC,kBAAkB,EAAE,qBAAU,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;YAC5G,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,IACI,SAAS,CAAC,MAAM,EAAE,QAAQ,qCAA6B;YACvD,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,gCAAuB;YAC3D,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,EACnD,CAAC;YACC,aAAa,CACT,gCAAc,CAAC,uBAAuB,EACtC,qBAAU,CAAC,mBAAmB,EAAE,EAChC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAC9B,CAAC;YACF,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,IAAI,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3D,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,IAAI,IAAA,sBAAc,EAAC,SAAS,CAAC,EAAE,CAAC;YAC5B,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,WAAW,IAAI,mBAAW,CAAC,MAAM,EAAE,CAAC;YAEpE,aAAa,CACT,gCAAc,CAAC,uBAAuB,EACtC,qBAAU,CAAC,mBAAmB,EAAE,EAChC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAC/B,CAAC;YAEF,cAAc,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,mCAAmC;QACnC,IACI,SAAS,CAAC,KAAK,EAAE,WAAW;YAC5B,IAAA,uBAAe,EAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC;YAC5C,iBAAS,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAC/D,CAAC;YACC,aAAa,CACT,gCAAc,CAAC,uBAAuB,EACtC,qBAAU,CAAC,gBAAgB,EAAE,EAC7B,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAC/B,CAAC;YACF,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,IAAA,2BAAmB,EAAC,SAAS,CAAC,EAAE,CAAC;YAClC,aAAa,CACT,gCAAc,CAAC,uBAAuB,EACtC,qBAAU,CAAC,gBAAgB,EAAE,EAC7B,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAC/B,CAAC;YACF,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,IAAI,iBAAS,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,iBAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;YAChF,aAAa,CACT,gCAAc,CAAC,uBAAuB,EACtC,qBAAU,CAAC,oBAAoB,EAAE,EACjC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAC/B,CAAC;QACN,CAAC;aAAM,IAAI,SAAS,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACnD,aAAa,CACT,gCAAc,CAAC,uBAAuB,EACtC,qBAAU,CAAC,cAAc,EAAE,EAC3B,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAC/B,CAAC;QACN,CAAC;QAED,MAAM,SAAS,GAAG,iBAAS,CAAC,kBAAkB,CAC1C,SAAS,EACT,cAAc,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,EAC1E,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,OAAO,EAChB,0EAAkD,mDAAqC,EACvF,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC;QACzC,uBAAuB,CAAC,SAAS,EACjC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CACtC,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,eAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjF,IAAA,mCAAuB,EAAC,SAAS,CAAC,CAAC;QAEnC,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,sEAAsE;YACtE,MAAM,QAAQ,GAAG,oBAAY,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;YACpE,oBAAY,CAAC,QAAQ,CACjB,QAAQ,EACR,qBAAa,CAAC,MAAM,+BAAuB,eAAO,CAAC,MAAM,EAAE,EAAE,0BAAkB,CAAC,YAAY,EAAE,MAAM,CAAC,CACxG,CAAC;YACF,oBAAY,CAAC,QAAQ,CACjB,QAAQ,EACR,qBAAa,CAAC,MAAM,+BAEhB,iBAAS,CAAC,eAAe,CAAC,SAAS,CAAC,EACpC,0BAAkB,CAAC,YAAY,EAC/B,IAAI,CACP,CACJ,CAAC;YACF,QAAQ,CAAC,MAAM,CAAC,kBAAkB,GAAG,WAAW,EAAE,CAAC;YACnD,iBAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,CACnC,UAAU,EACV,eAAM,CAAC,cAAc,kCAA0B,QAAQ,CAAC,CAC3D,CAAC;YAEF,uCAAuC;YACvC,MAAM,OAAO,GAAG,oBAAY,CAAC,yBAAyB,CAAC,SAAS,8CAAsC,CAAC;YACvG,oBAAY,CAAC,QAAQ,CACjB,OAAO,EACP,qBAAa,CAAC,MAAM,+BAAuB,eAAO,CAAC,MAAM,EAAE,EAAE,0BAAkB,CAAC,YAAY,EAAE,KAAK,CAAC,CACvG,CAAC;YACF,oBAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACvC,OAAO,CAAC,MAAM,CAAC,kBAAkB,GAAG,iBAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,yBAAyB,GAAG,IAAA,6BAAiB,EAAC,SAAS,CAAC,CAAC;YACtE,iBAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,eAAM,CAAC,cAAc,kCAA0B,OAAO,CAAC,CAAC,CAAC;QAChH,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,SAAS,wBAAwB,CAC7B,SAAyB,EACzB,OAAc,EACd,SAAoB;QAEpB,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC;QACjF,IAAI,CAAC,IAAA,uBAAe,EAAC,QAAQ,CAAC,IAAI,CAAC,iBAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;YACtE,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,SAAS,GAAI,QAAQ,CAAC,IAAI,CAAC,YAAuB,IAAI,GAAG,CAAC;QAEhE,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC;QACtF,IAAI,CAAC,IAAA,uBAAe,EAAC,aAAa,CAAC,EAAE,CAAC;YAClC,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,WAAW,GAAG,0BAA0B,CAAC,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,SAAS,GAAG,iBAAS,CAAC,kBAAkB,CAC1C,SAAS,EACT,cAAc,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,EAC1E,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,OAAO,oDAEhB,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC,EACzC,SAAS,EACT,aAAa,CAAC,MAAM,CAAC,kBAAkB,CAC1C,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QAElD,IAAI,CAAC,IAAA,mCAAuB,EAAC,SAAS,CAAC,EAAE,CAAC;YACtC,aAAa,CAAC,gCAAc,CAAC,uBAAuB,EAAE,qBAAU,CAAC,cAAc,EAAE,EAAE,SAAS,CAAC,CAAC;QAClG,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,SAAS,cAAc,CAAC,SAAyB,EAAE,KAAgB,EAAE,KAAgB;QACjF,IAAA,cAAM,EAAC,IAAA,2BAAmB,EAAC,KAAK,CAAC,IAAI,IAAA,2BAAmB,EAAC,KAAK,CAAC,CAAC,CAAC;QAEjE,wEAAwE;QACxE,8DAA8D;QAC9D,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAC9B,IAAI,gBAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,gBAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACvF,KAAK,GAAG,iBAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YACzC,KAAK,GAAG,iBAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YACzC,iBAAiB,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,MAAM,SAAS,GAAG,gBAAgB,SAAS,CAAC,IAAA,6BAAiB,EAAC,KAAK,CAAC,EAAE;YAClE,qBAAqB,EAAE,IAAI;SAC9B,CAAC,QAAQ,SAAS,CAAC,IAAA,6BAAiB,EAAC,KAAK,CAAC,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;QAClF,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAEjD,sFAAsF;QACtF,IAAI,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC;QACzD,IAAI,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAClC,IAAI,CAAC,kBAAkB,IAAI,UAAU,CAAC,kBAAkB,EAAE,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACzF,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC;YACzD,CAAC;QACL,CAAC;QAED,IAAI,YAAY,GAAG,iBAAS,CAAC,kBAAkB,CAC3C,SAAS,EACT,cAAc,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,EAC1E,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,OAAO,+BAEhB,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC;QACzC,uBAAuB,CAAC,SAAS,EACjC,kBAAkB,EAClB,KAAK,CAAC,MAAM,CAAC,SAAS,CACzB,CAAC;QAEF,YAAY,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACjD,IAAA,mCAAuB,EAAC,YAAY,CAAC,CAAC;QAEtC,YAAY,GAAG,IAAA,8BAAkB,EAAC,YAAY,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACxE,YAAY,GAAG,IAAA,8BAAkB,EAAC,YAAY,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAExE,IAAI,iBAAiB,EAAE,CAAC;YACpB,YAAY,GAAG,iBAAS,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,SAAS,2BAA2B,CAAC,SAAoB;QACrD,MAAM,UAAU,GAAkB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QAE/C,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,IAAI,IAAA,iBAAS,EAAC,OAAO,CAAC,EAAE,CAAC;gBACrB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzB,OAAO;YACX,CAAC;YAED,qCAAqC;YACrC,MAAM,OAAO,GAAG,mBAAW,CAAC,cAAc,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;YAC1D,OAAO,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,SAAS,yBAAyB,CAAC,SAAoB,EAAE,SAAoB;QACzE,IAAI,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC5D,IAAI,yBAAyB,GAAG,KAAK,CAAC;QAEtC,IAAI,CAAC,kBAAkB,IAAI,IAAA,2BAAmB,EAAC,kBAAkB,CAAC,EAAE,CAAC;YACjE,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACnD,IAAI,IAAA,2BAAmB,EAAC,SAAS,CAAC,EAAE,CAAC;oBACjC,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,kBAAkB,IAAI,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;oBAC3F,IAAI,aAAa,IAAI,IAAA,2BAAmB,EAAC,aAAa,CAAC,EAAE,CAAC;wBACtD,4CAA4C;wBAC5C,IAAI,CAAC,kBAAkB,EAAE,CAAC;4BACtB,kBAAkB,GAAG,aAAa,CAAC;wBACvC,CAAC;6BAAM,IACH,IAAA,qCAAyB,EAAC,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,KAAK,CAAC,EACzF,CAAC;4BACC,kBAAkB,GAAG,aAAa,CAAC;wBACvC,CAAC;6BAAM,IACH,CAAC,IAAA,qCAAyB,EAAC,kBAAkB,EAAE,aAAa,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAC1F,CAAC;4BACC,IAAI,CAAC,yBAAyB,EAAE,CAAC;gCAC7B,MAAM,IAAI,GAAG,IAAI,+BAAkB,EAAE,CAAC;gCAEtC,IAAI,CAAC,UAAU,CACX,sBAAW,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC;oCACnC,UAAU,EAAE,SAAS,CAAC,IAAA,6BAAiB,EAAC,kBAAkB,CAAC,CAAC;oCAC5D,UAAU,EAAE,SAAS,CAAC,IAAA,6BAAiB,EAAC,aAAa,CAAC,CAAC;iCAC1D,CAAC,CACL,CAAC;gCACF,aAAa,CACT,gCAAc,CAAC,uBAAuB,EACtC,qBAAU,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,EACjD,SAAS,CACZ,CAAC;gCAEF,+BAA+B;gCAC/B,yBAAyB,GAAG,IAAI,CAAC;4BACrC,CAAC;wBACL,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,kBAAkB,GAAG,aAAa,CAAC,CAAC,CAAC,mBAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;wBACtE,MAAM;oBACV,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,4DAA4D;oBAC5D,gCAAgC;oBAChC,kBAAkB,GAAG,mBAAW,CAAC,MAAM,EAAE,CAAC;oBAC1C,MAAM;gBACV,CAAC;YACL,CAAC;QACL,CAAC;QAED,mEAAmE;QACnE,iCAAiC;QACjC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACtB,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACxD,kBAAkB;gBACd,aAAa,IAAI,IAAA,2BAAmB,EAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAW,CAAC,MAAM,EAAE,CAAC;QACnG,CAAC;QAED,SAAS,CAAC,MAAM,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAEzD,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IAED,OAAO;QACH,aAAa;QACb,wBAAwB;QACxB,cAAc;QACd,2BAA2B;QAC3B,yBAAyB;KAC5B,CAAC;AACN,CAAC"}
@@ -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 {};