@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,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* returnTypeInference.ts
|
|
4
|
+
* Copyright (c) Microsoft Corporation.
|
|
5
|
+
* Licensed under the MIT license.
|
|
6
|
+
*
|
|
7
|
+
* Contextual return inference using evaluator-owned cache bindings and inference frames.
|
|
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.createReturnTypeInference = createReturnTypeInference;
|
|
44
|
+
const debug_1 = require("../../common/debug");
|
|
45
|
+
const ParseTreeUtils = __importStar(require("../parseTreeUtils"));
|
|
46
|
+
const types_1 = require("../types");
|
|
47
|
+
const typeUtils_1 = require("../typeUtils");
|
|
48
|
+
// Infers contextual call-site returns; the evaluator owns the live caches and inference stack.
|
|
49
|
+
function createReturnTypeInference(context) {
|
|
50
|
+
const { codeFlowEngine, convertSpecialFormToRuntimeValue, getTypeOfExpression, getTypeOfFunction, inferFunctionReturnType, maxCallSiteReturnTypeCacheSize, maxReturnCallSiteTypeInferenceCodeFlowComplexity, maxReturnTypeInferenceArgCount, maxReturnTypeInferenceStackSize, nodeInfo, returnTypeInferenceContextStack, speculativeTypeTracker, stripLiteralValue, suppressDiagnostics, writeTypeCache, } = context;
|
|
51
|
+
function isNodeInReturnTypeInferenceContext(node) {
|
|
52
|
+
const stackSize = returnTypeInferenceContextStack.length;
|
|
53
|
+
if (stackSize === 0) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
const contextNode = returnTypeInferenceContextStack[stackSize - 1];
|
|
57
|
+
let curNode = node;
|
|
58
|
+
while (curNode) {
|
|
59
|
+
if (curNode === contextNode.functionNode) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
curNode = curNode.parent;
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
function getCodeFlowAnalyzerForReturnTypeInferenceContext() {
|
|
67
|
+
const stackSize = returnTypeInferenceContextStack.length;
|
|
68
|
+
(0, debug_1.assert)(stackSize > 0);
|
|
69
|
+
const contextNode = returnTypeInferenceContextStack[stackSize - 1];
|
|
70
|
+
return contextNode.codeFlowAnalyzer;
|
|
71
|
+
}
|
|
72
|
+
function inferReturnTypeForCallSite(type, callSiteInfo) {
|
|
73
|
+
const args = callSiteInfo.args;
|
|
74
|
+
let contextualReturnType;
|
|
75
|
+
if (!type.shared.declaration) {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
const functionNode = type.shared.declaration.node;
|
|
79
|
+
const codeFlowComplexity = nodeInfo.getCodeFlowComplexity(functionNode);
|
|
80
|
+
if (codeFlowComplexity >= maxReturnCallSiteTypeInferenceCodeFlowComplexity) {
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
// If an arg hasn't been matched to a specific named parameter,
|
|
84
|
+
// it's an unpacked value that corresponds to multiple parameters.
|
|
85
|
+
// That's an edge case that we don't handle here.
|
|
86
|
+
if (args.some((arg) => !arg.paramName)) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
// Detect recurrence. If a function invokes itself either directly
|
|
90
|
+
// or indirectly, we won't attempt to infer contextual return
|
|
91
|
+
// types any further.
|
|
92
|
+
if (returnTypeInferenceContextStack.some((context) => context.functionNode === functionNode)) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
const functionTypeResult = getTypeOfFunction(functionNode);
|
|
96
|
+
if (!functionTypeResult) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
// Very complex functions with many arguments can take a long time to analyze,
|
|
100
|
+
// so we'll use a heuristic and avoiding this inference technique for any
|
|
101
|
+
// call site that involves too many arguments.
|
|
102
|
+
if (args.length > maxReturnTypeInferenceArgCount) {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
// Don't explore arbitrarily deep in the call graph.
|
|
106
|
+
if (returnTypeInferenceContextStack.length >= maxReturnTypeInferenceStackSize) {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
const paramTypes = [];
|
|
110
|
+
let isResultFromCache = false;
|
|
111
|
+
// If the call is located in a loop, don't use literal argument types
|
|
112
|
+
// for the same reason we don't do literal math in loops.
|
|
113
|
+
const stripLiteralArgTypes = ParseTreeUtils.isWithinLoop(callSiteInfo.errorNode);
|
|
114
|
+
// Suppress diagnostics because we don't want to generate errors.
|
|
115
|
+
suppressDiagnostics(functionNode, () => {
|
|
116
|
+
// Argument expressions belong to the caller's contextual cache.
|
|
117
|
+
const argTypes = functionNode.d.params.map((param) => {
|
|
118
|
+
const arg = args.find((arg) => param.d.name?.d.value === arg.paramName);
|
|
119
|
+
return arg?.argument.valueExpression
|
|
120
|
+
? getTypeOfExpression(arg.argument.valueExpression).type
|
|
121
|
+
: undefined;
|
|
122
|
+
});
|
|
123
|
+
// Allocate a new temporary type cache for the context of just
|
|
124
|
+
// this function so we can analyze it separately without polluting
|
|
125
|
+
// the main type cache.
|
|
126
|
+
const prevTypeCache = context.returnTypeInferenceTypeCache;
|
|
127
|
+
const prevTypeFormTypeCache = context.returnTypeInferenceTypeFormTypeCache;
|
|
128
|
+
returnTypeInferenceContextStack.push({
|
|
129
|
+
functionNode,
|
|
130
|
+
codeFlowAnalyzer: codeFlowEngine.createCodeFlowAnalyzer(),
|
|
131
|
+
});
|
|
132
|
+
try {
|
|
133
|
+
context.returnTypeInferenceTypeCache = new Map();
|
|
134
|
+
context.returnTypeInferenceTypeFormTypeCache = new Map();
|
|
135
|
+
let allArgTypesAreUnknown = true;
|
|
136
|
+
functionNode.d.params.forEach((param, index) => {
|
|
137
|
+
if (param.d.name) {
|
|
138
|
+
let paramType = argTypes[index];
|
|
139
|
+
if (paramType) {
|
|
140
|
+
if (!(0, types_1.isUnknown)(paramType)) {
|
|
141
|
+
allArgTypesAreUnknown = false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else if (param.d.defaultValue) {
|
|
145
|
+
paramType = getTypeOfExpression(param.d.defaultValue).type;
|
|
146
|
+
if (!(0, types_1.isUnknown)(paramType)) {
|
|
147
|
+
allArgTypesAreUnknown = false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else if (index === 0) {
|
|
151
|
+
// If this is an instance or class method, use the implied
|
|
152
|
+
// parameter type for the "self" or "cls" parameter.
|
|
153
|
+
if (types_1.FunctionType.isInstanceMethod(functionTypeResult.functionType) ||
|
|
154
|
+
types_1.FunctionType.isClassMethod(functionTypeResult.functionType)) {
|
|
155
|
+
if (functionTypeResult.functionType.shared.parameters.length > 0) {
|
|
156
|
+
if (functionNode.d.params[0].d.name) {
|
|
157
|
+
paramType = types_1.FunctionType.getParamType(functionTypeResult.functionType, 0);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (!paramType) {
|
|
163
|
+
paramType = types_1.UnknownType.create();
|
|
164
|
+
}
|
|
165
|
+
if (stripLiteralArgTypes) {
|
|
166
|
+
paramType = (0, typeUtils_1.stripTypeForm)(convertSpecialFormToRuntimeValue(stripLiteralValue(paramType), 0 /* EvalFlags.None */,
|
|
167
|
+
/* convertModule */ true));
|
|
168
|
+
}
|
|
169
|
+
paramTypes.push(paramType);
|
|
170
|
+
writeTypeCache(param.d.name, { type: paramType }, 0 /* EvalFlags.None */);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
// Don't bother trying to determine the contextual return
|
|
174
|
+
// type if none of the argument types are known.
|
|
175
|
+
if (!allArgTypesAreUnknown) {
|
|
176
|
+
// See if the return type is already cached. If so, skip the
|
|
177
|
+
// inference step, which is potentially very expensive.
|
|
178
|
+
const cacheEntry = functionTypeResult.functionType.priv.callSiteReturnTypeCache?.find((entry) => {
|
|
179
|
+
return (entry.paramTypes.length === paramTypes.length &&
|
|
180
|
+
entry.paramTypes.every((t, i) => (0, types_1.isTypeSame)(t, paramTypes[i])));
|
|
181
|
+
});
|
|
182
|
+
if (cacheEntry) {
|
|
183
|
+
contextualReturnType = cacheEntry.returnType;
|
|
184
|
+
isResultFromCache = true;
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
// Speculative results also depend on these temporary parameter bindings,
|
|
188
|
+
// not just the expected types used during overload resolution.
|
|
189
|
+
contextualReturnType = speculativeTypeTracker.useSpeculativeTypeCacheIsolation(() => inferFunctionReturnType(functionNode, types_1.FunctionType.isAbstractMethod(type), callSiteInfo?.errorNode))?.type;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
finally {
|
|
194
|
+
returnTypeInferenceContextStack.pop();
|
|
195
|
+
context.returnTypeInferenceTypeCache = prevTypeCache;
|
|
196
|
+
context.returnTypeInferenceTypeFormTypeCache = prevTypeFormTypeCache;
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
if (contextualReturnType) {
|
|
200
|
+
contextualReturnType = (0, types_1.removeUnbound)(contextualReturnType);
|
|
201
|
+
if (!isResultFromCache) {
|
|
202
|
+
// Cache the resulting type.
|
|
203
|
+
if (!functionTypeResult.functionType.priv.callSiteReturnTypeCache) {
|
|
204
|
+
functionTypeResult.functionType.priv.callSiteReturnTypeCache = [];
|
|
205
|
+
}
|
|
206
|
+
if (functionTypeResult.functionType.priv.callSiteReturnTypeCache.length >=
|
|
207
|
+
maxCallSiteReturnTypeCacheSize) {
|
|
208
|
+
functionTypeResult.functionType.priv.callSiteReturnTypeCache =
|
|
209
|
+
functionTypeResult.functionType.priv.callSiteReturnTypeCache.slice(1);
|
|
210
|
+
}
|
|
211
|
+
functionTypeResult.functionType.priv.callSiteReturnTypeCache.push({
|
|
212
|
+
paramTypes,
|
|
213
|
+
returnType: contextualReturnType,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
return contextualReturnType;
|
|
217
|
+
}
|
|
218
|
+
return undefined;
|
|
219
|
+
}
|
|
220
|
+
return {
|
|
221
|
+
isNodeInReturnTypeInferenceContext,
|
|
222
|
+
getCodeFlowAnalyzerForReturnTypeInferenceContext,
|
|
223
|
+
inferReturnTypeForCallSite,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=returnTypeInference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"returnTypeInference.js","sourceRoot":"","sources":["../../../../../../src/analyzer/typeEvaluator/returnTypeInference.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ClassNode, ExpressionNode, IndexNode, ParseNode, TypeParameterNode } from '../../parser/parseNodes';
|
|
2
|
+
import * as AnalyzerNodeInfo from '../analyzerNodeInfo';
|
|
3
|
+
import { ClassTypeResult, EvalFlags, ExpectedTypeOptions, PrefetchedTypes, TypeEvaluator, TypeResult, TypeResultWithNode, ValidateTypeArgsOptions } from '../typeEvaluatorTypes';
|
|
4
|
+
import { ClassType, Type, TypeCondition, TypeVarScopeId, TypeVarType, UnknownType } from '../types';
|
|
5
|
+
interface Context {
|
|
6
|
+
readonly addDiagnostic: TypeEvaluator['addDiagnostic'];
|
|
7
|
+
readonly applyUnpackToTupleLike: (type: Type) => Type | undefined;
|
|
8
|
+
readonly getScopeIdForNode: (node: ParseNode) => string;
|
|
9
|
+
readonly getTypeOfClass: (node: ClassNode) => ClassTypeResult | undefined;
|
|
10
|
+
readonly getTupleClassType: () => ClassType | undefined;
|
|
11
|
+
readonly getTypeVarScopesForNode: (node: ParseNode) => string[];
|
|
12
|
+
readonly getTypingType: (node: ParseNode, symbolName: string) => Type | undefined;
|
|
13
|
+
readonly nodeInfo: AnalyzerNodeInfo.AnalyzerNodeInfoAccessor;
|
|
14
|
+
readonly prefetched: Partial<PrefetchedTypes> | undefined;
|
|
15
|
+
readonly validateTypeMetadata: (errorNode: ExpressionNode, baseType: Type, metaArg: TypeResultWithNode) => boolean;
|
|
16
|
+
readonly assignType: TypeEvaluator['assignType'];
|
|
17
|
+
readonly convertTypeArgToInstance: (type: Type, flags: EvalFlags) => Type;
|
|
18
|
+
readonly getTypeOfAnnotation: (node: ExpressionNode, options?: ExpectedTypeOptions) => Type;
|
|
19
|
+
readonly makeTopLevelTypeVarsConcrete: (type: Type, makeParamSpecsConcrete?: boolean, conditionFilter?: TypeCondition[]) => Type;
|
|
20
|
+
readonly printType: TypeEvaluator['printType'];
|
|
21
|
+
readonly getBuiltInType: TypeEvaluator['getBuiltInType'];
|
|
22
|
+
readonly solveAndApplyConstraints: TypeEvaluator['solveAndApplyConstraints'];
|
|
23
|
+
readonly getTypeOfExpression: TypeEvaluator['getTypeOfExpression'];
|
|
24
|
+
}
|
|
25
|
+
export declare function createSpecialFormCreation(context: Context): {
|
|
26
|
+
reportUseOfTypeCheckOnly: (type: Type, node: ExpressionNode) => void;
|
|
27
|
+
enforceClassTypeVarScope: (node: ExpressionNode, type: TypeVarType) => boolean;
|
|
28
|
+
adjustTypeArgsForTypeVarTuple: (typeArgs: TypeResultWithNode[], typeParams: TypeVarType[], errorNode: ExpressionNode) => TypeResultWithNode[];
|
|
29
|
+
validateTypeArg: (argResult: TypeResultWithNode, options?: ValidateTypeArgsOptions) => boolean;
|
|
30
|
+
createTypeFormType: (classType: ClassType, errorNode: ExpressionNode, typeArgs: TypeResultWithNode[] | undefined) => Type;
|
|
31
|
+
transformTypeForTypeAlias: (type: Type, errorNode: ExpressionNode, typeAliasPlaceholder: TypeVarType, isPep695TypeVarType: boolean, typeParamNodes?: TypeParameterNode[]) => Type;
|
|
32
|
+
validateTypeParamDefault: (errorNode: ExpressionNode, typeParam: TypeVarType, otherLiveTypeParams: TypeVarType[], scopeId: TypeVarScopeId) => void;
|
|
33
|
+
verifyGenericTypeParams: (errorNode: ExpressionNode, typeVars: TypeVarType[], genericTypeVars: TypeVarType[]) => void;
|
|
34
|
+
transformTypeArgsForParamSpec: (typeParams: TypeVarType[], typeArgs: TypeResultWithNode[] | undefined, errorNode: ExpressionNode) => TypeResultWithNode[] | undefined;
|
|
35
|
+
createSpecializedClassType: (classType: ClassType, typeArgs: TypeResultWithNode[] | undefined, flags: EvalFlags, errorNode: ExpressionNode) => TypeResult;
|
|
36
|
+
createSelfType: (classType: ClassType, errorNode: ParseNode, typeArgs: TypeResultWithNode[] | undefined, flags: EvalFlags) => UnknownType | TypeVarType;
|
|
37
|
+
createLiteralType: (classType: ClassType, node: IndexNode, flags: EvalFlags) => Type;
|
|
38
|
+
};
|
|
39
|
+
export {};
|