@zzzen/pyright-internal 1.2.0-dev.20230430 → 1.2.0-dev.20230514
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/backgroundAnalysisProgram.d.ts +4 -1
- package/dist/analyzer/backgroundAnalysisProgram.js +12 -0
- package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
- package/dist/analyzer/checker.d.ts +1 -0
- package/dist/analyzer/checker.js +89 -6
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +14 -15
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructors.d.ts +6 -0
- package/dist/analyzer/constructors.js +513 -0
- package/dist/analyzer/constructors.js.map +1 -0
- package/dist/analyzer/dataClasses.js +86 -2
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/docStringConversion.js +1 -1
- package/dist/analyzer/docStringConversion.js.map +1 -1
- package/dist/analyzer/enums.js +62 -8
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/importResolver.js +47 -29
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importStatementUtils.d.ts +2 -2
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.js +3 -6
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/operations.d.ts +16 -0
- package/dist/analyzer/operations.js +749 -0
- package/dist/analyzer/operations.js.map +1 -0
- package/dist/analyzer/parseTreeUtils.d.ts +4 -2
- package/dist/analyzer/parseTreeUtils.js +32 -1
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/patternMatching.js +16 -0
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +11 -33
- package/dist/analyzer/program.js +73 -735
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/protocols.js +1 -1
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/service.d.ts +5 -21
- package/dist/analyzer/service.js +26 -33
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +9 -41
- package/dist/analyzer/sourceFile.js +219 -238
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.d.ts +3 -9
- package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
- package/dist/analyzer/symbol.d.ts +3 -1
- package/dist/analyzer/symbol.js +5 -0
- package/dist/analyzer/symbol.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +460 -1425
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +42 -7
- package/dist/analyzer/typeEvaluatorTypes.js +33 -1
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +2 -8
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.d.ts +3 -3
- package/dist/analyzer/typePrinter.js +247 -100
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +14 -7
- package/dist/analyzer/typeUtils.js +204 -49
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.d.ts +6 -7
- package/dist/analyzer/typeVarContext.js +21 -32
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/typedDicts.js +2 -2
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +7 -4
- package/dist/analyzer/types.js +20 -10
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +1 -1
- package/dist/backgroundAnalysisBase.js +16 -0
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +0 -1
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/common/extensibility.d.ts +28 -4
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/logTracker.d.ts +2 -0
- package/dist/common/logTracker.js +8 -1
- package/dist/common/logTracker.js.map +1 -1
- package/dist/common/lspUtils.d.ts +4 -1
- package/dist/common/lspUtils.js +38 -1
- package/dist/common/lspUtils.js.map +1 -1
- package/dist/common/pathUtils.d.ts +11 -11
- package/dist/common/pathUtils.js.map +1 -1
- package/dist/common/pythonVersion.d.ts +2 -1
- package/dist/common/pythonVersion.js +1 -0
- package/dist/common/pythonVersion.js.map +1 -1
- package/dist/common/workspaceEditUtils.d.ts +8 -8
- package/dist/common/workspaceEditUtils.js +10 -10
- package/dist/common/workspaceEditUtils.js.map +1 -1
- package/dist/languageServerBase.d.ts +3 -7
- package/dist/languageServerBase.js +41 -73
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +50 -51
- package/dist/languageService/autoImporter.js +125 -210
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.d.ts +1 -1
- package/dist/languageService/callHierarchyProvider.js +11 -37
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +39 -81
- package/dist/languageService/completionProvider.js +572 -801
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/documentHighlightProvider.js +1 -1
- package/dist/languageService/documentHighlightProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +6 -7
- package/dist/languageService/documentSymbolCollector.js +47 -28
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/documentSymbolProvider.d.ts +13 -35
- package/dist/languageService/documentSymbolProvider.js +52 -264
- package/dist/languageService/documentSymbolProvider.js.map +1 -1
- package/dist/languageService/hoverProvider.d.ts +5 -6
- package/dist/languageService/hoverProvider.js +40 -132
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/referencesProvider.d.ts +6 -11
- package/dist/languageService/referencesProvider.js +23 -17
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/renameProvider.d.ts +16 -0
- package/dist/languageService/renameProvider.js +139 -0
- package/dist/languageService/renameProvider.js.map +1 -0
- package/dist/languageService/symbolIndexer.d.ts +31 -0
- package/dist/languageService/symbolIndexer.js +105 -0
- package/dist/languageService/symbolIndexer.js.map +1 -0
- package/dist/languageService/tooltipUtils.d.ts +8 -1
- package/dist/languageService/tooltipUtils.js +102 -1
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/languageService/workspaceSymbolProvider.d.ts +17 -0
- package/dist/languageService/workspaceSymbolProvider.js +133 -0
- package/dist/languageService/workspaceSymbolProvider.js.map +1 -0
- package/dist/localization/localize.d.ts +33 -15
- package/dist/localization/localize.js +13 -7
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.en-us.json +14 -7
- package/dist/parser/parser.js +3 -0
- package/dist/parser/parser.js.map +1 -1
- package/dist/pyright.js +26 -4
- package/dist/pyright.js.map +1 -1
- package/dist/tests/chainedSourceFiles.test.js +15 -20
- package/dist/tests/chainedSourceFiles.test.js.map +1 -1
- package/dist/tests/checker.test.js +14 -0
- package/dist/tests/checker.test.js.map +1 -1
- package/dist/tests/completions.test.js +11 -236
- package/dist/tests/completions.test.js.map +1 -1
- package/dist/tests/docStringConversion.test.js +36 -2
- package/dist/tests/docStringConversion.test.js.map +1 -1
- package/dist/tests/documentSymbolCollector.test.js +3 -3
- package/dist/tests/documentSymbolCollector.test.js.map +1 -1
- package/dist/tests/fourslash/completions.override2.fourslash.js +1 -16
- package/dist/tests/fourslash/completions.override2.fourslash.js.map +1 -1
- package/dist/tests/fourslash/fourslash.d.ts +4 -4
- package/dist/tests/fourslash/missingTypeStub.codeAction.fourslash.js +1 -1
- package/dist/tests/fourslash/missingTypeStub.codeAction.fourslash.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +17 -11
- package/dist/tests/harness/fourslash/testState.js +39 -50
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/importResolver.test.js +81 -1
- package/dist/tests/importResolver.test.js.map +1 -1
- package/dist/tests/sourceFile.test.js +1 -1
- package/dist/tests/sourceFile.test.js.map +1 -1
- package/dist/tests/testStateUtils.d.ts +2 -2
- package/dist/tests/testStateUtils.js +38 -8
- package/dist/tests/testStateUtils.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +13 -1
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +5 -1
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +9 -1
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +25 -9
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/workspaceEditUtils.test.js +95 -6
- package/dist/tests/workspaceEditUtils.test.js.map +1 -1
- package/package.json +4 -4
- package/dist/languageService/importAdder.d.ts +0 -40
- package/dist/languageService/importAdder.js +0 -388
- package/dist/languageService/importAdder.js.map +0 -1
- package/dist/languageService/indentationUtils.d.ts +0 -16
- package/dist/languageService/indentationUtils.js +0 -727
- package/dist/languageService/indentationUtils.js.map +0 -1
- package/dist/languageService/insertionPointUtils.d.ts +0 -9
- package/dist/languageService/insertionPointUtils.js +0 -132
- package/dist/languageService/insertionPointUtils.js.map +0 -1
- package/dist/languageService/renameModuleProvider.d.ts +0 -65
- package/dist/languageService/renameModuleProvider.js +0 -939
- package/dist/languageService/renameModuleProvider.js.map +0 -1
- package/dist/tests/fourslash/completions.commitChars.fourslash.d.ts +0 -1
- package/dist/tests/fourslash/completions.commitChars.fourslash.js +0 -81
- package/dist/tests/fourslash/completions.commitChars.fourslash.js.map +0 -1
- package/dist/tests/importAdder.test.d.ts +0 -1
- package/dist/tests/importAdder.test.js +0 -1325
- package/dist/tests/importAdder.test.js.map +0 -1
- package/dist/tests/indentationUtils.ptvs.test.d.ts +0 -1
- package/dist/tests/indentationUtils.ptvs.test.js +0 -324
- package/dist/tests/indentationUtils.ptvs.test.js.map +0 -1
- package/dist/tests/indentationUtils.reindent.test.d.ts +0 -1
- package/dist/tests/indentationUtils.reindent.test.js +0 -372
- package/dist/tests/indentationUtils.reindent.test.js.map +0 -1
- package/dist/tests/indentationUtils.test.d.ts +0 -1
- package/dist/tests/indentationUtils.test.js +0 -502
- package/dist/tests/indentationUtils.test.js.map +0 -1
- package/dist/tests/insertionPointUtils.test.d.ts +0 -1
- package/dist/tests/insertionPointUtils.test.js +0 -154
- package/dist/tests/insertionPointUtils.test.js.map +0 -1
- package/dist/tests/moveSymbol.importAdder.test.d.ts +0 -1
- package/dist/tests/moveSymbol.importAdder.test.js +0 -298
- package/dist/tests/moveSymbol.importAdder.test.js.map +0 -1
- package/dist/tests/moveSymbol.insertion.test.d.ts +0 -1
- package/dist/tests/moveSymbol.insertion.test.js +0 -537
- package/dist/tests/moveSymbol.insertion.test.js.map +0 -1
- package/dist/tests/moveSymbol.misc.test.d.ts +0 -1
- package/dist/tests/moveSymbol.misc.test.js +0 -169
- package/dist/tests/moveSymbol.misc.test.js.map +0 -1
- package/dist/tests/moveSymbol.updateReference.test.d.ts +0 -1
- package/dist/tests/moveSymbol.updateReference.test.js +0 -1071
- package/dist/tests/moveSymbol.updateReference.test.js.map +0 -1
- package/dist/tests/renameModule.folder.test.d.ts +0 -1
- package/dist/tests/renameModule.folder.test.js +0 -229
- package/dist/tests/renameModule.folder.test.js.map +0 -1
- package/dist/tests/renameModule.fromImports.test.d.ts +0 -1
- package/dist/tests/renameModule.fromImports.test.js +0 -790
- package/dist/tests/renameModule.fromImports.test.js.map +0 -1
- package/dist/tests/renameModule.imports.test.d.ts +0 -1
- package/dist/tests/renameModule.imports.test.js +0 -380
- package/dist/tests/renameModule.imports.test.js.map +0 -1
- package/dist/tests/renameModule.misc.test.d.ts +0 -1
- package/dist/tests/renameModule.misc.test.js +0 -615
- package/dist/tests/renameModule.misc.test.js.map +0 -1
- package/dist/tests/renameModule.relativePath.test.d.ts +0 -1
- package/dist/tests/renameModule.relativePath.test.js +0 -231
- package/dist/tests/renameModule.relativePath.test.js.map +0 -1
- package/dist/tests/renameModuleTestUtils.d.ts +0 -4
- package/dist/tests/renameModuleTestUtils.js +0 -76
- package/dist/tests/renameModuleTestUtils.js.map +0 -1
@@ -0,0 +1,513 @@
|
|
1
|
+
"use strict";
|
2
|
+
/*
|
3
|
+
* constructors.ts
|
4
|
+
* Copyright (c) Microsoft Corporation.
|
5
|
+
* Licensed under the MIT license.
|
6
|
+
* Author: Eric Traut
|
7
|
+
*
|
8
|
+
* Provides type evaluation logic for constructors. A constructor
|
9
|
+
* in Python is implemented by a `__call__` method on the metaclass,
|
10
|
+
* which is typically the `type` class. The default implementation
|
11
|
+
* calls the `__new__` method on the class to allocate the object.
|
12
|
+
* If the resulting object is an instance of the class, it then calls
|
13
|
+
* the `__init__` method on the resulting object with the same arguments.
|
14
|
+
*/
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
16
|
+
exports.createFunctionFromConstructor = exports.validateConstructorArguments = void 0;
|
17
|
+
const diagnosticRules_1 = require("../common/diagnosticRules");
|
18
|
+
const localize_1 = require("../localization/localize");
|
19
|
+
const analyzerNodeInfo_1 = require("./analyzerNodeInfo");
|
20
|
+
const constraintSolver_1 = require("./constraintSolver");
|
21
|
+
const constructorTransform_1 = require("./constructorTransform");
|
22
|
+
const parseTreeUtils_1 = require("./parseTreeUtils");
|
23
|
+
const typeUtils_1 = require("./typeUtils");
|
24
|
+
const typeVarContext_1 = require("./typeVarContext");
|
25
|
+
const types_1 = require("./types");
|
26
|
+
// Matches the arguments of a call to the constructor for a class.
|
27
|
+
// If successful, it returns the resulting (specialized) object type that
|
28
|
+
// is allocated by the constructor. If unsuccessful, it reports diagnostics.
|
29
|
+
function validateConstructorArguments(evaluator, errorNode, argList, type, skipUnknownArgCheck, inferenceContext) {
|
30
|
+
// If there a custom `__call__` method on the metaclass, assume that it
|
31
|
+
// overrides the normal `type.__call__` logic and don't perform the usual
|
32
|
+
// __new__ and __init__ validation.
|
33
|
+
const metaclassResult = validateMetaclassCall(evaluator, errorNode, argList, type, skipUnknownArgCheck, inferenceContext);
|
34
|
+
if (metaclassResult) {
|
35
|
+
return metaclassResult;
|
36
|
+
}
|
37
|
+
// Determine whether the class overrides the object.__new__ method.
|
38
|
+
const newMethodTypeResult = evaluator.getTypeOfClassMemberName(errorNode, type,
|
39
|
+
/* isAccessedThroughObject */ false, '__new__', { method: 'get' },
|
40
|
+
/* diag */ undefined, 1 /* AccessClassMembersOnly */ |
|
41
|
+
4 /* SkipObjectBaseClass */ |
|
42
|
+
16 /* TreatConstructorAsClassMethod */, type);
|
43
|
+
let returnType;
|
44
|
+
let validatedArgExpressions = false;
|
45
|
+
let argumentErrors = false;
|
46
|
+
let isTypeIncomplete = false;
|
47
|
+
const overloadsUsedForCall = [];
|
48
|
+
let newMethodReturnType;
|
49
|
+
const useConstructorTransform = (0, constructorTransform_1.hasConstructorTransform)(type);
|
50
|
+
// If there is a constructor transform, evaluate all arguments speculatively
|
51
|
+
// so we can later re-evaluate them in the context of the transform.
|
52
|
+
evaluator.useSpeculativeMode(useConstructorTransform ? errorNode : undefined, () => {
|
53
|
+
var _a;
|
54
|
+
// Validate __new__ if it is present.
|
55
|
+
if (newMethodTypeResult) {
|
56
|
+
// Use speculative mode for arg expressions because we don't know whether
|
57
|
+
// we'll need to re-evaluate these expressions later for __init__.
|
58
|
+
const newCallResult = validateNewMethod(evaluator, errorNode, argList, type, skipUnknownArgCheck, inferenceContext, newMethodTypeResult,
|
59
|
+
/* useSpeculativeModeForArgs */ true);
|
60
|
+
if (newCallResult.argumentErrors) {
|
61
|
+
argumentErrors = true;
|
62
|
+
}
|
63
|
+
else {
|
64
|
+
overloadsUsedForCall.push(...newCallResult.overloadsUsedForCall);
|
65
|
+
}
|
66
|
+
if (newCallResult.isTypeIncomplete) {
|
67
|
+
isTypeIncomplete = true;
|
68
|
+
}
|
69
|
+
newMethodReturnType = newCallResult.returnType;
|
70
|
+
}
|
71
|
+
if (!newMethodReturnType) {
|
72
|
+
newMethodReturnType = types_1.ClassType.cloneAsInstance(type);
|
73
|
+
}
|
74
|
+
else if (!(0, types_1.isNever)(newMethodReturnType)) {
|
75
|
+
if (!(0, types_1.isClassInstance)(newMethodReturnType)) {
|
76
|
+
// If the __new__ method returns something other than an object or
|
77
|
+
// NoReturn, we'll ignore its return type.
|
78
|
+
newMethodReturnType = types_1.ClassType.cloneAsInstance(type);
|
79
|
+
}
|
80
|
+
else if (types_1.ClassType.isSameGenericClass(newMethodReturnType, type) &&
|
81
|
+
(0, typeUtils_1.isPartlyUnknown)(newMethodReturnType)) {
|
82
|
+
// If the __new__ method returns the same type as the class it's constructing
|
83
|
+
// but doesn't supply solved type arguments, we'll ignore its return type
|
84
|
+
// and rely on the __init__ method to supply them instead.
|
85
|
+
newMethodReturnType = types_1.ClassType.cloneAsInstance(type);
|
86
|
+
}
|
87
|
+
}
|
88
|
+
let initMethodTypeResult;
|
89
|
+
// Validate __init__ if it's present. Skip if the __new__ method produced errors.
|
90
|
+
if (!argumentErrors &&
|
91
|
+
!(0, types_1.isNever)(newMethodReturnType) &&
|
92
|
+
!shouldSkipInitEvaluation(evaluator, type, newMethodReturnType)) {
|
93
|
+
// Determine whether the class overrides the object.__init__ method.
|
94
|
+
initMethodTypeResult = evaluator.getTypeOfObjectMember(errorNode, types_1.ClassType.cloneAsInstance(newMethodReturnType), '__init__', { method: 'get' },
|
95
|
+
/* diag */ undefined, 4 /* SkipObjectBaseClass */ | 64 /* SkipAttributeAccessOverride */);
|
96
|
+
// Validate __init__ if it's present.
|
97
|
+
if (initMethodTypeResult) {
|
98
|
+
const initCallResult = validateInitMethod(evaluator, errorNode, argList, newMethodReturnType, skipUnknownArgCheck, inferenceContext, initMethodTypeResult.type);
|
99
|
+
if (initCallResult.argumentErrors) {
|
100
|
+
argumentErrors = true;
|
101
|
+
}
|
102
|
+
else {
|
103
|
+
overloadsUsedForCall.push(...initCallResult.overloadsUsedForCall);
|
104
|
+
}
|
105
|
+
if (initCallResult.isTypeIncomplete) {
|
106
|
+
isTypeIncomplete = true;
|
107
|
+
}
|
108
|
+
returnType = initCallResult.returnType;
|
109
|
+
validatedArgExpressions = true;
|
110
|
+
skipUnknownArgCheck = true;
|
111
|
+
}
|
112
|
+
}
|
113
|
+
if (!validatedArgExpressions && newMethodTypeResult) {
|
114
|
+
// If we skipped the __init__ method and the __new__ method was evaluated only
|
115
|
+
// speculatively, evaluate it non-speculatively now so we can report errors.
|
116
|
+
if (!evaluator.isSpeculativeModeInUse(errorNode)) {
|
117
|
+
validateNewMethod(evaluator, errorNode, argList, type, skipUnknownArgCheck, inferenceContext, newMethodTypeResult,
|
118
|
+
/* useSpeculativeModeForArgs */ false);
|
119
|
+
}
|
120
|
+
validatedArgExpressions = true;
|
121
|
+
returnType = newMethodReturnType;
|
122
|
+
}
|
123
|
+
// If the class doesn't override object.__new__ or object.__init__, use the
|
124
|
+
// fallback constructor type evaluation for the `object` class.
|
125
|
+
if (!newMethodTypeResult && !initMethodTypeResult) {
|
126
|
+
const callResult = validateFallbackConstructorCall(evaluator, errorNode, argList, type, inferenceContext);
|
127
|
+
if (callResult.argumentErrors) {
|
128
|
+
argumentErrors = true;
|
129
|
+
}
|
130
|
+
else {
|
131
|
+
overloadsUsedForCall.push(...callResult.overloadsUsedForCall);
|
132
|
+
}
|
133
|
+
if (callResult.isTypeIncomplete) {
|
134
|
+
isTypeIncomplete = true;
|
135
|
+
}
|
136
|
+
returnType = (_a = callResult.returnType) !== null && _a !== void 0 ? _a : types_1.UnknownType.create();
|
137
|
+
}
|
138
|
+
});
|
139
|
+
// Apply a constructor transform if applicable.
|
140
|
+
if (!argumentErrors && returnType && useConstructorTransform) {
|
141
|
+
const transformed = (0, constructorTransform_1.applyConstructorTransform)(evaluator, errorNode, argList, type, {
|
142
|
+
argumentErrors,
|
143
|
+
returnType,
|
144
|
+
isTypeIncomplete,
|
145
|
+
});
|
146
|
+
returnType = transformed.returnType;
|
147
|
+
if (transformed.isTypeIncomplete) {
|
148
|
+
isTypeIncomplete = true;
|
149
|
+
}
|
150
|
+
if (transformed.argumentErrors) {
|
151
|
+
argumentErrors = true;
|
152
|
+
}
|
153
|
+
validatedArgExpressions = true;
|
154
|
+
}
|
155
|
+
// If we weren't able to validate the args, analyze the expressions here
|
156
|
+
// to mark symbols referenced and report expression evaluation errors.
|
157
|
+
if (!validatedArgExpressions) {
|
158
|
+
argList.forEach((arg) => {
|
159
|
+
if (arg.valueExpression && !evaluator.isSpeculativeModeInUse(arg.valueExpression)) {
|
160
|
+
evaluator.getTypeOfExpression(arg.valueExpression);
|
161
|
+
}
|
162
|
+
});
|
163
|
+
}
|
164
|
+
return { argumentErrors, returnType, isTypeIncomplete, overloadsUsedForCall };
|
165
|
+
}
|
166
|
+
exports.validateConstructorArguments = validateConstructorArguments;
|
167
|
+
// Evaluates the __new__ method for type correctness. If useSpeculativeModeForArgs
|
168
|
+
// is true, use speculative mode to evaluate the arguments (unless an argument
|
169
|
+
// error is produced, in which case it's OK to use speculative mode).
|
170
|
+
function validateNewMethod(evaluator, errorNode, argList, type, skipUnknownArgCheck, inferenceContext, newMethodTypeResult, useSpeculativeModeForArgs) {
|
171
|
+
let newReturnType;
|
172
|
+
let isTypeIncomplete = false;
|
173
|
+
let argumentErrors = false;
|
174
|
+
const overloadsUsedForCall = [];
|
175
|
+
const typeVarContext = new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(type));
|
176
|
+
typeVarContext.addSolveForScope((0, typeUtils_1.getTypeVarScopeId)(newMethodTypeResult.type));
|
177
|
+
if (type.typeAliasInfo) {
|
178
|
+
typeVarContext.addSolveForScope(type.typeAliasInfo.typeVarScopeId);
|
179
|
+
}
|
180
|
+
const callResult = evaluator.useSpeculativeMode(useSpeculativeModeForArgs ? errorNode : undefined, () => {
|
181
|
+
return evaluator.validateCallArguments(errorNode, argList, newMethodTypeResult, typeVarContext, skipUnknownArgCheck, inferenceContext);
|
182
|
+
});
|
183
|
+
if (callResult.isTypeIncomplete) {
|
184
|
+
isTypeIncomplete = true;
|
185
|
+
}
|
186
|
+
if (callResult.argumentErrors) {
|
187
|
+
argumentErrors = true;
|
188
|
+
// Evaluate the arguments in a non-speculative manner to generate any diagnostics.
|
189
|
+
evaluator.validateCallArguments(errorNode, argList, newMethodTypeResult, typeVarContext, skipUnknownArgCheck);
|
190
|
+
}
|
191
|
+
else {
|
192
|
+
newReturnType = callResult.returnType;
|
193
|
+
if (overloadsUsedForCall.length === 0) {
|
194
|
+
overloadsUsedForCall.push(...callResult.overloadsUsedForCall);
|
195
|
+
}
|
196
|
+
// If the constructor returned an object whose type matches the class of
|
197
|
+
// the original type being constructed, use the return type in case it was
|
198
|
+
// specialized. If it doesn't match, we'll fall back on the assumption that
|
199
|
+
// the constructed type is an instance of the class type. We need to do this
|
200
|
+
// in cases where we're inferring the return type based on a call to
|
201
|
+
// super().__new__().
|
202
|
+
if (newReturnType) {
|
203
|
+
if ((0, types_1.isClassInstance)(newReturnType) && types_1.ClassType.isSameGenericClass(newReturnType, type)) {
|
204
|
+
// If the specialized return type derived from the __init__
|
205
|
+
// method is "better" than the return type provided by the
|
206
|
+
// __new__ method (where "better" means that the type arguments
|
207
|
+
// are all known), stick with the __init__ result.
|
208
|
+
if (!(0, typeUtils_1.isPartlyUnknown)(newReturnType) && !(0, typeUtils_1.requiresSpecialization)(newReturnType)) {
|
209
|
+
// Special-case the 'tuple' type specialization to use
|
210
|
+
// the homogenous arbitrary-length form.
|
211
|
+
if ((0, types_1.isClassInstance)(newReturnType) &&
|
212
|
+
types_1.ClassType.isTupleClass(newReturnType) &&
|
213
|
+
!newReturnType.tupleTypeArguments &&
|
214
|
+
newReturnType.typeArguments &&
|
215
|
+
newReturnType.typeArguments.length === 1) {
|
216
|
+
newReturnType = (0, typeUtils_1.specializeTupleClass)(newReturnType, [
|
217
|
+
{ type: newReturnType.typeArguments[0], isUnbounded: true },
|
218
|
+
]);
|
219
|
+
}
|
220
|
+
}
|
221
|
+
}
|
222
|
+
}
|
223
|
+
}
|
224
|
+
if (!newReturnType) {
|
225
|
+
newReturnType = applyExpectedTypeForConstructor(evaluator, type, inferenceContext, typeVarContext);
|
226
|
+
}
|
227
|
+
else if ((0, types_1.isClassInstance)(newReturnType) && (0, typeUtils_1.isTupleClass)(newReturnType) && !newReturnType.tupleTypeArguments) {
|
228
|
+
newReturnType = applyExpectedTypeForTupleConstructor(newReturnType, inferenceContext);
|
229
|
+
}
|
230
|
+
return { argumentErrors, returnType: newReturnType, isTypeIncomplete, overloadsUsedForCall };
|
231
|
+
}
|
232
|
+
function validateInitMethod(evaluator, errorNode, argList, type, skipUnknownArgCheck, inferenceContext, initMethodType) {
|
233
|
+
let returnType;
|
234
|
+
let isTypeIncomplete = false;
|
235
|
+
let argumentErrors = false;
|
236
|
+
const overloadsUsedForCall = [];
|
237
|
+
// If there is an expected type, analyze the __init__ call for each of the
|
238
|
+
// subtypes that comprise the expected type. If one or more analyzes with no
|
239
|
+
// errors, use those results. This requires special-case processing because
|
240
|
+
// the __init__ method doesn't return the expected type. It always
|
241
|
+
// returns None.
|
242
|
+
if (inferenceContext) {
|
243
|
+
returnType = (0, typeUtils_1.mapSubtypes)(inferenceContext.expectedType, (expectedSubType) => {
|
244
|
+
expectedSubType = (0, typeUtils_1.transformPossibleRecursiveTypeAlias)(expectedSubType);
|
245
|
+
const typeVarContext = new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(type));
|
246
|
+
typeVarContext.addSolveForScope((0, typeUtils_1.getTypeVarScopeId)(initMethodType));
|
247
|
+
if ((0, constraintSolver_1.populateTypeVarContextBasedOnExpectedType)(evaluator, types_1.ClassType.cloneAsInstance(type), expectedSubType, typeVarContext, (0, parseTreeUtils_1.getTypeVarScopesForNode)(errorNode))) {
|
248
|
+
const specializedConstructor = (0, typeUtils_1.applySolvedTypeVars)(initMethodType, typeVarContext);
|
249
|
+
let callResult;
|
250
|
+
callResult = evaluator.useSpeculativeMode(errorNode, () => {
|
251
|
+
return evaluator.validateCallArguments(errorNode, argList, { type: specializedConstructor }, typeVarContext.clone(), skipUnknownArgCheck);
|
252
|
+
});
|
253
|
+
if (!callResult.argumentErrors) {
|
254
|
+
// Call validateCallArguments again, this time without speculative
|
255
|
+
// mode, so any errors are reported.
|
256
|
+
callResult = evaluator.validateCallArguments(errorNode, argList, { type: specializedConstructor }, typeVarContext, skipUnknownArgCheck);
|
257
|
+
if (callResult.isTypeIncomplete) {
|
258
|
+
isTypeIncomplete = true;
|
259
|
+
}
|
260
|
+
if (callResult.argumentErrors) {
|
261
|
+
argumentErrors = true;
|
262
|
+
}
|
263
|
+
overloadsUsedForCall.push(...callResult.overloadsUsedForCall);
|
264
|
+
return applyExpectedSubtypeForConstructor(evaluator, type, expectedSubType, typeVarContext);
|
265
|
+
}
|
266
|
+
}
|
267
|
+
return undefined;
|
268
|
+
});
|
269
|
+
if ((0, types_1.isNever)(returnType) || argumentErrors) {
|
270
|
+
returnType = undefined;
|
271
|
+
}
|
272
|
+
}
|
273
|
+
if (!returnType) {
|
274
|
+
const typeVarContext = type.typeArguments
|
275
|
+
? (0, typeUtils_1.buildTypeVarContextFromSpecializedClass)(type, /* makeConcrete */ false)
|
276
|
+
: new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(type));
|
277
|
+
typeVarContext.addSolveForScope((0, typeUtils_1.getTypeVarScopeId)(initMethodType));
|
278
|
+
const callResult = evaluator.validateCallArguments(errorNode, argList, { type: initMethodType }, typeVarContext, skipUnknownArgCheck);
|
279
|
+
let adjustedClassType = type;
|
280
|
+
if (callResult.specializedInitSelfType &&
|
281
|
+
(0, types_1.isClassInstance)(callResult.specializedInitSelfType) &&
|
282
|
+
types_1.ClassType.isSameGenericClass(callResult.specializedInitSelfType, adjustedClassType)) {
|
283
|
+
adjustedClassType = types_1.ClassType.cloneAsInstantiable(callResult.specializedInitSelfType);
|
284
|
+
}
|
285
|
+
returnType = applyExpectedTypeForConstructor(evaluator, adjustedClassType,
|
286
|
+
/* inferenceContext */ undefined, typeVarContext);
|
287
|
+
if (callResult.isTypeIncomplete) {
|
288
|
+
isTypeIncomplete = true;
|
289
|
+
}
|
290
|
+
if (callResult.argumentErrors) {
|
291
|
+
argumentErrors = true;
|
292
|
+
}
|
293
|
+
else {
|
294
|
+
overloadsUsedForCall.push(...callResult.overloadsUsedForCall);
|
295
|
+
}
|
296
|
+
}
|
297
|
+
return { argumentErrors, returnType, isTypeIncomplete, overloadsUsedForCall };
|
298
|
+
}
|
299
|
+
function validateFallbackConstructorCall(evaluator, errorNode, argList, type, inferenceContext) {
|
300
|
+
let reportedErrors = false;
|
301
|
+
if (argList.length > 0) {
|
302
|
+
const fileInfo = (0, analyzerNodeInfo_1.getFileInfo)(errorNode);
|
303
|
+
evaluator.addDiagnostic(fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.constructorNoArgs().format({ type: type.aliasName || type.details.name }), errorNode);
|
304
|
+
reportedErrors = true;
|
305
|
+
}
|
306
|
+
if (!inferenceContext && type.typeArguments) {
|
307
|
+
// If there was no expected type but the type was already specialized,
|
308
|
+
// assume that we're constructing an instance of the specialized type.
|
309
|
+
return {
|
310
|
+
argumentErrors: reportedErrors,
|
311
|
+
overloadsUsedForCall: [],
|
312
|
+
returnType: (0, typeUtils_1.convertToInstance)(type),
|
313
|
+
};
|
314
|
+
}
|
315
|
+
// Do our best to specialize the instantiated class based on the expected
|
316
|
+
// type if provided.
|
317
|
+
const typeVarContext = new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(type));
|
318
|
+
if (inferenceContext) {
|
319
|
+
(0, constraintSolver_1.populateTypeVarContextBasedOnExpectedType)(evaluator, types_1.ClassType.cloneAsInstance(type), inferenceContext.expectedType, typeVarContext, (0, parseTreeUtils_1.getTypeVarScopesForNode)(errorNode));
|
320
|
+
}
|
321
|
+
return {
|
322
|
+
argumentErrors: reportedErrors,
|
323
|
+
overloadsUsedForCall: [],
|
324
|
+
returnType: applyExpectedTypeForConstructor(evaluator, type, inferenceContext, typeVarContext),
|
325
|
+
};
|
326
|
+
}
|
327
|
+
function validateMetaclassCall(evaluator, errorNode, argList, type, skipUnknownArgCheck, inferenceContext) {
|
328
|
+
const metaclass = type.details.effectiveMetaclass;
|
329
|
+
if (metaclass && (0, types_1.isInstantiableClass)(metaclass) && !types_1.ClassType.isSameGenericClass(metaclass, type)) {
|
330
|
+
const metaclassCallMethodInfo = evaluator.getTypeOfClassMemberName(errorNode, metaclass,
|
331
|
+
/* isAccessedThroughObject */ true, '__call__', { method: 'get' },
|
332
|
+
/* diag */ undefined, 32 /* ConsiderMetaclassOnly */ |
|
333
|
+
256 /* SkipTypeBaseClass */ |
|
334
|
+
64 /* SkipAttributeAccessOverride */, type);
|
335
|
+
if (metaclassCallMethodInfo) {
|
336
|
+
const callResult = evaluator.validateCallArguments(errorNode, argList, metaclassCallMethodInfo,
|
337
|
+
/* typeVarContext */ undefined, skipUnknownArgCheck, inferenceContext);
|
338
|
+
if (!callResult.returnType || (0, types_1.isUnknown)(callResult.returnType)) {
|
339
|
+
// The return result isn't known. We'll assume in this case that
|
340
|
+
// the metaclass __call__ method allocated a new instance of the
|
341
|
+
// requested class.
|
342
|
+
const typeVarContext = new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(type));
|
343
|
+
callResult.returnType = applyExpectedTypeForConstructor(evaluator, type, inferenceContext, typeVarContext);
|
344
|
+
}
|
345
|
+
return callResult;
|
346
|
+
}
|
347
|
+
}
|
348
|
+
return undefined;
|
349
|
+
}
|
350
|
+
function applyExpectedSubtypeForConstructor(evaluator, type, expectedSubtype, typeVarContext) {
|
351
|
+
const specializedType = (0, typeUtils_1.applySolvedTypeVars)(types_1.ClassType.cloneAsInstance(type), typeVarContext, {
|
352
|
+
applyInScopePlaceholders: true,
|
353
|
+
});
|
354
|
+
if (!evaluator.assignType(expectedSubtype, specializedType)) {
|
355
|
+
return undefined;
|
356
|
+
}
|
357
|
+
// If the expected type is "Any", transform it to an Any.
|
358
|
+
if ((0, types_1.isAny)(expectedSubtype)) {
|
359
|
+
return expectedSubtype;
|
360
|
+
}
|
361
|
+
return specializedType;
|
362
|
+
}
|
363
|
+
// Handles the case where a constructor is a generic type and the type
|
364
|
+
// arguments are not specified but can be provided by the expected type.
|
365
|
+
function applyExpectedTypeForConstructor(evaluator, type, inferenceContext, typeVarContext) {
|
366
|
+
let unsolvedTypeVarsAreUnknown = true;
|
367
|
+
if (inferenceContext) {
|
368
|
+
const specializedExpectedType = (0, typeUtils_1.mapSubtypes)(inferenceContext.expectedType, (expectedSubtype) => {
|
369
|
+
return applyExpectedSubtypeForConstructor(evaluator, type, expectedSubtype, typeVarContext);
|
370
|
+
});
|
371
|
+
if (!(0, types_1.isNever)(specializedExpectedType)) {
|
372
|
+
return specializedExpectedType;
|
373
|
+
}
|
374
|
+
// If the expected type didn't provide TypeVar values, remaining
|
375
|
+
// unsolved TypeVars should be considered Unknown unless they were
|
376
|
+
// provided explicitly in the constructor call.
|
377
|
+
if (type.typeArguments) {
|
378
|
+
unsolvedTypeVarsAreUnknown = false;
|
379
|
+
}
|
380
|
+
}
|
381
|
+
const specializedType = (0, typeUtils_1.applySolvedTypeVars)(type, typeVarContext, {
|
382
|
+
unknownIfNotFound: unsolvedTypeVarsAreUnknown,
|
383
|
+
});
|
384
|
+
return types_1.ClassType.cloneAsInstance(specializedType);
|
385
|
+
}
|
386
|
+
// Similar to applyExpectedTypeForConstructor, this function handles the
|
387
|
+
// special case of the tuple class.
|
388
|
+
function applyExpectedTypeForTupleConstructor(type, inferenceContext) {
|
389
|
+
let specializedType = type;
|
390
|
+
if (inferenceContext &&
|
391
|
+
(0, types_1.isClassInstance)(inferenceContext.expectedType) &&
|
392
|
+
(0, typeUtils_1.isTupleClass)(inferenceContext.expectedType) &&
|
393
|
+
inferenceContext.expectedType.tupleTypeArguments) {
|
394
|
+
specializedType = (0, typeUtils_1.specializeTupleClass)(type, inferenceContext.expectedType.tupleTypeArguments);
|
395
|
+
}
|
396
|
+
return specializedType;
|
397
|
+
}
|
398
|
+
// Synthesize a function that represents the constructor for this class
|
399
|
+
// taking into consideration the __init__ and __new__ methods.
|
400
|
+
function createFunctionFromConstructor(evaluator, classType, recursionCount = 0) {
|
401
|
+
// Use the __init__ method if available. It's usually more detailed.
|
402
|
+
const initInfo = (0, typeUtils_1.lookUpClassMember)(classType, '__init__', 8 /* SkipInstanceVariables */ | 4 /* SkipObjectBaseClass */);
|
403
|
+
if (initInfo) {
|
404
|
+
const initType = evaluator.getTypeOfMember(initInfo);
|
405
|
+
const objectType = types_1.ClassType.cloneAsInstance(classType);
|
406
|
+
const convertInitToConstructor = (initSubtype) => {
|
407
|
+
let constructorFunction = evaluator.bindFunctionToClassOrObject(objectType, initSubtype,
|
408
|
+
/* memberClass */ undefined,
|
409
|
+
/* errorNode */ undefined, recursionCount);
|
410
|
+
if (constructorFunction) {
|
411
|
+
constructorFunction = types_1.FunctionType.clone(constructorFunction);
|
412
|
+
constructorFunction.details.declaredReturnType = objectType;
|
413
|
+
if (constructorFunction.specializedTypes) {
|
414
|
+
constructorFunction.specializedTypes.returnType = objectType;
|
415
|
+
}
|
416
|
+
if (!constructorFunction.details.docString && classType.details.docString) {
|
417
|
+
constructorFunction.details.docString = classType.details.docString;
|
418
|
+
}
|
419
|
+
constructorFunction.details.flags &= ~4 /* StaticMethod */;
|
420
|
+
}
|
421
|
+
return constructorFunction;
|
422
|
+
};
|
423
|
+
if ((0, types_1.isFunction)(initType)) {
|
424
|
+
return convertInitToConstructor(initType);
|
425
|
+
}
|
426
|
+
else if ((0, types_1.isOverloadedFunction)(initType)) {
|
427
|
+
const initOverloads = [];
|
428
|
+
initType.overloads.forEach((overload) => {
|
429
|
+
const converted = convertInitToConstructor(overload);
|
430
|
+
if (converted) {
|
431
|
+
initOverloads.push(converted);
|
432
|
+
}
|
433
|
+
});
|
434
|
+
if (initOverloads.length === 0) {
|
435
|
+
return undefined;
|
436
|
+
}
|
437
|
+
else if (initOverloads.length === 1) {
|
438
|
+
return initOverloads[0];
|
439
|
+
}
|
440
|
+
return types_1.OverloadedFunctionType.create(initOverloads);
|
441
|
+
}
|
442
|
+
}
|
443
|
+
// Fall back on the __new__ method if __init__ isn't available.
|
444
|
+
const newInfo = (0, typeUtils_1.lookUpClassMember)(classType, '__new__', 8 /* SkipInstanceVariables */ | 4 /* SkipObjectBaseClass */);
|
445
|
+
if (newInfo) {
|
446
|
+
const newType = evaluator.getTypeOfMember(newInfo);
|
447
|
+
const convertNewToConstructor = (newSubtype) => {
|
448
|
+
let constructorFunction = evaluator.bindFunctionToClassOrObject(classType, newSubtype,
|
449
|
+
/* memberClass */ undefined,
|
450
|
+
/* errorNode */ undefined, recursionCount,
|
451
|
+
/* treatConstructorAsClassMember */ true);
|
452
|
+
if (constructorFunction) {
|
453
|
+
constructorFunction = types_1.FunctionType.clone(constructorFunction);
|
454
|
+
if (!constructorFunction.details.docString && classType.details.docString) {
|
455
|
+
constructorFunction.details.docString = classType.details.docString;
|
456
|
+
}
|
457
|
+
constructorFunction.details.flags &= ~(4 /* StaticMethod */ | 1 /* ConstructorMethod */);
|
458
|
+
}
|
459
|
+
return constructorFunction;
|
460
|
+
};
|
461
|
+
if ((0, types_1.isFunction)(newType)) {
|
462
|
+
return convertNewToConstructor(newType);
|
463
|
+
}
|
464
|
+
else if ((0, types_1.isOverloadedFunction)(newType)) {
|
465
|
+
const newOverloads = [];
|
466
|
+
newType.overloads.forEach((overload) => {
|
467
|
+
const converted = convertNewToConstructor(overload);
|
468
|
+
if (converted) {
|
469
|
+
newOverloads.push(converted);
|
470
|
+
}
|
471
|
+
});
|
472
|
+
if (newOverloads.length === 0) {
|
473
|
+
return undefined;
|
474
|
+
}
|
475
|
+
else if (newOverloads.length === 1) {
|
476
|
+
return newOverloads[0];
|
477
|
+
}
|
478
|
+
return types_1.OverloadedFunctionType.create(newOverloads);
|
479
|
+
}
|
480
|
+
}
|
481
|
+
// Return a generic constructor.
|
482
|
+
const constructorFunction = types_1.FunctionType.createSynthesizedInstance('__new__', 0 /* None */);
|
483
|
+
constructorFunction.details.declaredReturnType = types_1.ClassType.cloneAsInstance(classType);
|
484
|
+
types_1.FunctionType.addDefaultParameters(constructorFunction);
|
485
|
+
if (!constructorFunction.details.docString && classType.details.docString) {
|
486
|
+
constructorFunction.details.docString = classType.details.docString;
|
487
|
+
}
|
488
|
+
return constructorFunction;
|
489
|
+
}
|
490
|
+
exports.createFunctionFromConstructor = createFunctionFromConstructor;
|
491
|
+
// If __new__ returns a type that is not an instance of the class, skip the
|
492
|
+
// __init__ method evaluation. This is consistent with the behavior of the
|
493
|
+
// type.__call__ runtime behavior.
|
494
|
+
function shouldSkipInitEvaluation(evaluator, classType, newMethodReturnType) {
|
495
|
+
const returnType = evaluator.makeTopLevelTypeVarsConcrete(newMethodReturnType);
|
496
|
+
let skipInitCheck = false;
|
497
|
+
(0, typeUtils_1.doForEachSubtype)(returnType, (subtype) => {
|
498
|
+
if ((0, types_1.isAnyOrUnknown)(subtype)) {
|
499
|
+
return;
|
500
|
+
}
|
501
|
+
if ((0, types_1.isClassInstance)(subtype)) {
|
502
|
+
const inheritanceChain = [];
|
503
|
+
const isDerivedFrom = types_1.ClassType.isDerivedFrom(subtype, classType, inheritanceChain);
|
504
|
+
if (!isDerivedFrom) {
|
505
|
+
skipInitCheck = true;
|
506
|
+
}
|
507
|
+
return;
|
508
|
+
}
|
509
|
+
skipInitCheck = true;
|
510
|
+
});
|
511
|
+
return skipInitCheck;
|
512
|
+
}
|
513
|
+
//# sourceMappingURL=constructors.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"constructors.js","sourceRoot":"","sources":["../../../src/analyzer/constructors.ts"],"names":[],"mappings":"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"}
|