@zzzen/pyright-internal 1.2.0-dev.20240707 → 1.2.0-dev.20240721
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/analyzerNodeInfo.js +74 -46
- package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
- package/dist/analyzer/binder.js +506 -512
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.js +672 -655
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.d.ts +5 -3
- package/dist/analyzer/codeFlowEngine.js +112 -103
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/codeFlowTypes.js +30 -28
- package/dist/analyzer/codeFlowTypes.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +70 -66
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructorTransform.d.ts +1 -2
- package/dist/analyzer/constructorTransform.js +26 -27
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/constructors.d.ts +2 -2
- package/dist/analyzer/constructors.js +95 -190
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.js +110 -179
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/declarationUtils.js +14 -15
- package/dist/analyzer/declarationUtils.js.map +1 -1
- package/dist/analyzer/decorators.js +78 -79
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/enums.js +70 -56
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/functionTransform.js +8 -18
- package/dist/analyzer/functionTransform.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +2 -1
- package/dist/analyzer/importResolver.js +40 -29
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importStatementUtils.js +27 -27
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.js +33 -59
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/operations.js +194 -145
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +66 -62
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/parameterUtils.d.ts +4 -4
- package/dist/analyzer/parameterUtils.js +30 -47
- package/dist/analyzer/parameterUtils.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +1 -0
- package/dist/analyzer/parseTreeUtils.js +294 -272
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/parseTreeWalker.js +76 -76
- package/dist/analyzer/parseTreeWalker.js.map +1 -1
- package/dist/analyzer/patternMatching.js +178 -145
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.js +1 -1
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.js +82 -147
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.js +29 -25
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/sourceFile.js +3 -3
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceMapper.js +20 -19
- package/dist/analyzer/sourceMapper.js.map +1 -1
- package/dist/analyzer/staticExpressions.js +83 -84
- package/dist/analyzer/staticExpressions.js.map +1 -1
- package/dist/analyzer/testWalker.js +15 -3
- package/dist/analyzer/testWalker.js.map +1 -1
- package/dist/analyzer/tracePrinter.js +20 -20
- package/dist/analyzer/tracePrinter.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.js +25 -25
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +2443 -2350
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +13 -9
- package/dist/analyzer/typeEvaluatorTypes.js +7 -1
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +212 -215
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +118 -115
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeStubWriter.js +104 -103
- package/dist/analyzer/typeStubWriter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +30 -15
- package/dist/analyzer/typeUtils.js +534 -436
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.js +8 -8
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/typeWalker.js +13 -10
- package/dist/analyzer/typeWalker.js.map +1 -1
- package/dist/analyzer/typedDicts.js +97 -199
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +152 -106
- package/dist/analyzer/types.js +695 -496
- package/dist/analyzer/types.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +34 -34
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/common/fileSystem.d.ts +1 -0
- package/dist/common/fileSystem.js.map +1 -1
- package/dist/common/fullAccessHost.js +6 -4
- package/dist/common/fullAccessHost.js.map +1 -1
- package/dist/common/realFileSystem.d.ts +1 -0
- package/dist/common/realFileSystem.js +4 -0
- package/dist/common/realFileSystem.js.map +1 -1
- package/dist/common/textEditTracker.js +14 -14
- package/dist/common/textEditTracker.js.map +1 -1
- package/dist/languageService/autoImporter.js +10 -10
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.js +23 -23
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.js +153 -151
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/definitionProvider.d.ts +1 -1
- package/dist/languageService/definitionProvider.js +3 -1
- package/dist/languageService/definitionProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.js +19 -19
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/hoverProvider.js +36 -27
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/importSorter.js +8 -8
- package/dist/languageService/importSorter.js.map +1 -1
- package/dist/languageService/referencesProvider.d.ts +10 -4
- package/dist/languageService/referencesProvider.js +30 -18
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/renameProvider.js +21 -4
- package/dist/languageService/renameProvider.js.map +1 -1
- package/dist/languageService/signatureHelpProvider.d.ts +1 -1
- package/dist/languageService/signatureHelpProvider.js +6 -6
- package/dist/languageService/signatureHelpProvider.js.map +1 -1
- package/dist/languageService/symbolIndexer.js +3 -3
- package/dist/languageService/symbolIndexer.js.map +1 -1
- package/dist/languageService/tooltipUtils.js +13 -13
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/localization/localize.d.ts +4 -3
- package/dist/localization/localize.js +2 -1
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +0 -1
- package/dist/localization/package.nls.de.json +0 -1
- package/dist/localization/package.nls.en-us.json +2 -1
- package/dist/localization/package.nls.es.json +0 -1
- package/dist/localization/package.nls.fr.json +0 -1
- package/dist/localization/package.nls.it.json +0 -1
- package/dist/localization/package.nls.ja.json +0 -1
- package/dist/localization/package.nls.ko.json +0 -1
- package/dist/localization/package.nls.pl.json +0 -1
- package/dist/localization/package.nls.pt-br.json +0 -1
- package/dist/localization/package.nls.qps-ploc.json +0 -1
- package/dist/localization/package.nls.ru.json +0 -1
- package/dist/localization/package.nls.tr.json +0 -1
- package/dist/localization/package.nls.zh-cn.json +0 -1
- package/dist/localization/package.nls.zh-tw.json +0 -1
- package/dist/parser/parseNodes.d.ts +471 -402
- package/dist/parser/parseNodes.js +629 -356
- package/dist/parser/parseNodes.js.map +1 -1
- package/dist/parser/parser.d.ts +1 -0
- package/dist/parser/parser.js +345 -300
- package/dist/parser/parser.js.map +1 -1
- package/dist/tests/classDeclaration.test.js +14 -14
- package/dist/tests/classDeclaration.test.js.map +1 -1
- package/dist/tests/fourslash/rename.args.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/rename.args.fourslash.js +71 -0
- package/dist/tests/fourslash/rename.args.fourslash.js.map +1 -0
- package/dist/tests/harness/vfs/filesystem.d.ts +3 -2
- package/dist/tests/harness/vfs/filesystem.js +6 -2
- package/dist/tests/harness/vfs/filesystem.js.map +1 -1
- package/dist/tests/importResolver.test.js +4 -3
- package/dist/tests/importResolver.test.js.map +1 -1
- package/dist/tests/parseTreeUtils.test.js +5 -5
- package/dist/tests/parseTreeUtils.test.js.map +1 -1
- package/dist/tests/parser.test.js +8 -8
- package/dist/tests/parser.test.js.map +1 -1
- package/dist/tests/sourceMapperUtils.test.js +7 -7
- package/dist/tests/sourceMapperUtils.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +17 -0
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +4 -0
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +8 -3
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +10 -6
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator6.test.js +6 -2
- package/dist/tests/typeEvaluator6.test.js.map +1 -1
- package/dist/tests/typeEvaluator7.test.js +7 -3
- package/dist/tests/typeEvaluator7.test.js.map +1 -1
- package/dist/tests/typePrinter.test.js +14 -39
- package/dist/tests/typePrinter.test.js.map +1 -1
- package/package.json +1 -1
@@ -66,13 +66,13 @@ function createTypedDictType(evaluator, errorNode, typedDictClass, argList) {
|
|
66
66
|
evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportArgumentType, localize_1.LocMessage.typedDictFirstArg(), argList[0].valueExpression || errorNode);
|
67
67
|
}
|
68
68
|
else {
|
69
|
-
className = nameArg.valueExpression.strings.map((s) => s.value).join('');
|
69
|
+
className = nameArg.valueExpression.d.strings.map((s) => s.d.value).join('');
|
70
70
|
}
|
71
71
|
}
|
72
72
|
const effectiveClassName = className || 'TypedDict';
|
73
73
|
const classType = types_1.ClassType.createInstantiable(effectiveClassName, ParseTreeUtils.getClassFullName(errorNode, fileInfo.moduleName, effectiveClassName), fileInfo.moduleName, fileInfo.fileUri, 4 /* ClassTypeFlags.TypedDictClass */ | 4194304 /* ClassTypeFlags.ValidTypeAliasClass */, ParseTreeUtils.getTypeSourceId(errorNode),
|
74
|
-
/* declaredMetaclass */ undefined, typedDictClass.
|
75
|
-
classType.
|
74
|
+
/* declaredMetaclass */ undefined, typedDictClass.shared.effectiveMetaclass);
|
75
|
+
classType.shared.baseClasses.push(typedDictClass);
|
76
76
|
(0, typeUtils_1.computeMroLinearization)(classType);
|
77
77
|
const classFields = types_1.ClassType.getSymbolTable(classType);
|
78
78
|
classFields.set('__class__', symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */ | 64 /* SymbolFlags.IgnoredForProtocolMatch */, classType));
|
@@ -95,12 +95,12 @@ function createTypedDictType(evaluator, errorNode, typedDictClass, argList) {
|
|
95
95
|
if (!entry.name || !entry.valueExpression) {
|
96
96
|
continue;
|
97
97
|
}
|
98
|
-
if (entrySet.has(entry.name.value)) {
|
98
|
+
if (entrySet.has(entry.name.d.value)) {
|
99
99
|
evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictEntryUnique(), entry.valueExpression);
|
100
100
|
continue;
|
101
101
|
}
|
102
102
|
// Record names in a map to detect duplicates.
|
103
|
-
entrySet.add(entry.name.value);
|
103
|
+
entrySet.add(entry.name.d.value);
|
104
104
|
const newSymbol = new symbol_1.Symbol(8 /* SymbolFlags.InstanceMember */);
|
105
105
|
const declaration = {
|
106
106
|
type: 1 /* DeclarationType.Variable */,
|
@@ -113,7 +113,7 @@ function createTypedDictType(evaluator, errorNode, typedDictClass, argList) {
|
|
113
113
|
isInExceptSuite: false,
|
114
114
|
};
|
115
115
|
newSymbol.addDeclaration(declaration);
|
116
|
-
classFields.set(entry.name.value, newSymbol);
|
116
|
+
classFields.set(entry.name.d.value, newSymbol);
|
117
117
|
}
|
118
118
|
}
|
119
119
|
else {
|
@@ -122,20 +122,20 @@ function createTypedDictType(evaluator, errorNode, typedDictClass, argList) {
|
|
122
122
|
}
|
123
123
|
if (usingDictSyntax) {
|
124
124
|
for (const arg of argList.slice(2)) {
|
125
|
-
if (((_a = arg.name) === null || _a === void 0 ? void 0 : _a.value) === 'total' || ((_b = arg.name) === null || _b === void 0 ? void 0 : _b.value) === 'closed') {
|
125
|
+
if (((_a = arg.name) === null || _a === void 0 ? void 0 : _a.d.value) === 'total' || ((_b = arg.name) === null || _b === void 0 ? void 0 : _b.d.value) === 'closed') {
|
126
126
|
if (!arg.valueExpression ||
|
127
127
|
arg.valueExpression.nodeType !== 14 /* ParseNodeType.Constant */ ||
|
128
|
-
!(arg.valueExpression.constType === 15 /* KeywordType.False */ ||
|
129
|
-
arg.valueExpression.constType === 33 /* KeywordType.True */)) {
|
130
|
-
evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictBoolParam().format({ name: arg.name.value }), arg.valueExpression || errorNode);
|
128
|
+
!(arg.valueExpression.d.constType === 15 /* KeywordType.False */ ||
|
129
|
+
arg.valueExpression.d.constType === 33 /* KeywordType.True */)) {
|
130
|
+
evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictBoolParam().format({ name: arg.name.d.value }), arg.valueExpression || errorNode);
|
131
131
|
}
|
132
|
-
else if (arg.name.value === 'total' && arg.valueExpression.constType === 15 /* KeywordType.False */) {
|
133
|
-
classType.
|
132
|
+
else if (arg.name.d.value === 'total' && arg.valueExpression.d.constType === 15 /* KeywordType.False */) {
|
133
|
+
classType.shared.flags |= 32 /* ClassTypeFlags.CanOmitDictValues */;
|
134
134
|
}
|
135
|
-
else if (arg.name.value === 'closed' && arg.valueExpression.constType === 33 /* KeywordType.True */) {
|
135
|
+
else if (arg.name.d.value === 'closed' && arg.valueExpression.d.constType === 33 /* KeywordType.True */) {
|
136
136
|
// This is an experimental feature because PEP 728 hasn't been accepted yet.
|
137
137
|
if (AnalyzerNodeInfo.getFileInfo(errorNode).diagnosticRuleSet.enableExperimentalFeatures) {
|
138
|
-
classType.
|
138
|
+
classType.shared.flags |=
|
139
139
|
8 /* ClassTypeFlags.TypedDictMarkedClosed */ | 16 /* ClassTypeFlags.TypedDictEffectivelyClosed */;
|
140
140
|
}
|
141
141
|
}
|
@@ -148,10 +148,10 @@ function createTypedDictType(evaluator, errorNode, typedDictClass, argList) {
|
|
148
148
|
synthesizeTypedDictClassMethods(evaluator, errorNode, classType);
|
149
149
|
// Validate that the assigned variable name is consistent with the provided name.
|
150
150
|
if (((_c = errorNode.parent) === null || _c === void 0 ? void 0 : _c.nodeType) === 3 /* ParseNodeType.Assignment */ && className) {
|
151
|
-
const target = errorNode.parent.
|
152
|
-
const typedDictTarget = target.nodeType === 54 /* ParseNodeType.TypeAnnotation */ ? target.
|
151
|
+
const target = errorNode.parent.d.leftExpr;
|
152
|
+
const typedDictTarget = target.nodeType === 54 /* ParseNodeType.TypeAnnotation */ ? target.d.valueExpr : target;
|
153
153
|
if (typedDictTarget.nodeType === 38 /* ParseNodeType.Name */) {
|
154
|
-
if (typedDictTarget.value !== className) {
|
154
|
+
if (typedDictTarget.d.value !== className) {
|
155
155
|
evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictAssignedName().format({
|
156
156
|
name: className,
|
157
157
|
}), typedDictTarget);
|
@@ -166,83 +166,39 @@ function synthesizeTypedDictClassMethods(evaluator, node, classType) {
|
|
166
166
|
(0, debug_1.assert)(types_1.ClassType.isTypedDictClass(classType));
|
167
167
|
// Synthesize a __new__ method.
|
168
168
|
const newType = types_1.FunctionType.createSynthesizedInstance('__new__', 1 /* FunctionTypeFlags.ConstructorMethod */);
|
169
|
-
types_1.FunctionType.addParameter(newType,
|
170
|
-
category: 0 /* ParameterCategory.Simple */,
|
171
|
-
name: 'cls',
|
172
|
-
type: classType,
|
173
|
-
hasDeclaredType: true,
|
174
|
-
});
|
169
|
+
types_1.FunctionType.addParameter(newType, types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, classType, types_1.FunctionParamFlags.TypeDeclared, 'cls'));
|
175
170
|
types_1.FunctionType.addDefaultParameters(newType);
|
176
|
-
newType.
|
177
|
-
newType.
|
171
|
+
newType.shared.declaredReturnType = types_1.ClassType.cloneAsInstance(classType);
|
172
|
+
newType.priv.constructorTypeVarScopeId = (0, typeUtils_1.getTypeVarScopeId)(classType);
|
178
173
|
// Synthesize an __init__ method with two overrides.
|
179
174
|
const initOverride1 = types_1.FunctionType.createSynthesizedInstance('__init__', 256 /* FunctionTypeFlags.Overloaded */);
|
180
|
-
types_1.FunctionType.addParameter(initOverride1,
|
181
|
-
|
182
|
-
|
183
|
-
type: types_1.ClassType.cloneAsInstance(classType),
|
184
|
-
hasDeclaredType: true,
|
185
|
-
});
|
186
|
-
initOverride1.details.declaredReturnType = evaluator.getNoneType();
|
187
|
-
initOverride1.details.constructorTypeVarScopeId = (0, typeUtils_1.getTypeVarScopeId)(classType);
|
175
|
+
types_1.FunctionType.addParameter(initOverride1, types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, types_1.ClassType.cloneAsInstance(classType), types_1.FunctionParamFlags.TypeDeclared, 'self'));
|
176
|
+
initOverride1.shared.declaredReturnType = evaluator.getNoneType();
|
177
|
+
initOverride1.priv.constructorTypeVarScopeId = (0, typeUtils_1.getTypeVarScopeId)(classType);
|
188
178
|
// The first parameter must be positional-only.
|
189
|
-
types_1.FunctionType.addParameter(initOverride1,
|
190
|
-
category: 0 /* ParameterCategory.Simple */,
|
191
|
-
name: '__map',
|
192
|
-
type: types_1.ClassType.cloneAsInstance(classType),
|
193
|
-
hasDeclaredType: true,
|
194
|
-
});
|
179
|
+
types_1.FunctionType.addParameter(initOverride1, types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, types_1.ClassType.cloneAsInstance(classType), types_1.FunctionParamFlags.TypeDeclared, '__map'));
|
195
180
|
types_1.FunctionType.addPositionOnlyParameterSeparator(initOverride1);
|
196
181
|
// All subsequent parameters must be named, so insert an empty "*".
|
197
182
|
types_1.FunctionType.addKeywordOnlyParameterSeparator(initOverride1);
|
198
183
|
const initOverride2 = types_1.FunctionType.createSynthesizedInstance('__init__', 256 /* FunctionTypeFlags.Overloaded */);
|
199
|
-
types_1.FunctionType.addParameter(initOverride2,
|
200
|
-
|
201
|
-
|
202
|
-
type: types_1.ClassType.cloneAsInstance(classType),
|
203
|
-
hasDeclaredType: true,
|
204
|
-
});
|
205
|
-
initOverride2.details.declaredReturnType = evaluator.getNoneType();
|
206
|
-
initOverride2.details.constructorTypeVarScopeId = (0, typeUtils_1.getTypeVarScopeId)(classType);
|
184
|
+
types_1.FunctionType.addParameter(initOverride2, types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, types_1.ClassType.cloneAsInstance(classType), types_1.FunctionParamFlags.TypeDeclared, 'self'));
|
185
|
+
initOverride2.shared.declaredReturnType = evaluator.getNoneType();
|
186
|
+
initOverride2.priv.constructorTypeVarScopeId = (0, typeUtils_1.getTypeVarScopeId)(classType);
|
207
187
|
// All parameters must be named, so insert an empty "*".
|
208
188
|
types_1.FunctionType.addKeywordOnlyParameterSeparator(initOverride2);
|
209
189
|
const entries = getTypedDictMembersForClass(evaluator, classType);
|
210
190
|
const extraEntriesInfo = (_a = entries.extraItems) !== null && _a !== void 0 ? _a : getEffectiveExtraItemsEntryType(evaluator, classType);
|
211
191
|
let allEntriesAreReadOnly = entries.knownItems.size > 0;
|
212
192
|
entries.knownItems.forEach((entry, name) => {
|
213
|
-
types_1.FunctionType.addParameter(initOverride1,
|
214
|
-
|
215
|
-
name,
|
216
|
-
hasDefault: true,
|
217
|
-
type: entry.valueType,
|
218
|
-
hasDeclaredType: true,
|
219
|
-
});
|
220
|
-
types_1.FunctionType.addParameter(initOverride2, {
|
221
|
-
category: 0 /* ParameterCategory.Simple */,
|
222
|
-
name,
|
223
|
-
hasDefault: !entry.isRequired,
|
224
|
-
type: entry.valueType,
|
225
|
-
hasDeclaredType: true,
|
226
|
-
});
|
193
|
+
types_1.FunctionType.addParameter(initOverride1, types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, entry.valueType, types_1.FunctionParamFlags.TypeDeclared, name, entry.valueType));
|
194
|
+
types_1.FunctionType.addParameter(initOverride2, types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, entry.valueType, types_1.FunctionParamFlags.TypeDeclared, name, entry.isRequired ? undefined : entry.valueType));
|
227
195
|
if (!entry.isReadOnly) {
|
228
196
|
allEntriesAreReadOnly = false;
|
229
197
|
}
|
230
198
|
});
|
231
199
|
if (entries.extraItems && !(0, types_1.isNever)(entries.extraItems.valueType)) {
|
232
|
-
types_1.FunctionType.addParameter(initOverride1,
|
233
|
-
|
234
|
-
name: 'kwargs',
|
235
|
-
hasDefault: false,
|
236
|
-
type: entries.extraItems.valueType,
|
237
|
-
hasDeclaredType: true,
|
238
|
-
});
|
239
|
-
types_1.FunctionType.addParameter(initOverride2, {
|
240
|
-
category: 2 /* ParameterCategory.KwargsDict */,
|
241
|
-
name: 'kwargs',
|
242
|
-
hasDefault: false,
|
243
|
-
type: entries.extraItems.valueType,
|
244
|
-
hasDeclaredType: true,
|
245
|
-
});
|
200
|
+
types_1.FunctionType.addParameter(initOverride1, types_1.FunctionParam.create(2 /* ParameterCategory.KwargsDict */, entries.extraItems.valueType, types_1.FunctionParamFlags.TypeDeclared, 'kwargs'));
|
201
|
+
types_1.FunctionType.addParameter(initOverride2, types_1.FunctionParam.create(2 /* ParameterCategory.KwargsDict */, entries.extraItems.valueType, types_1.FunctionParamFlags.TypeDeclared, 'kwargs'));
|
246
202
|
}
|
247
203
|
const symbolTable = types_1.ClassType.getSymbolTable(classType);
|
248
204
|
const initType = types_1.OverloadedFunctionType.create([initOverride1, initOverride2]);
|
@@ -251,27 +207,17 @@ function synthesizeTypedDictClassMethods(evaluator, node, classType) {
|
|
251
207
|
const strClass = evaluator.getBuiltInType(node, 'str');
|
252
208
|
// Synthesize a "get", pop, and setdefault method for each named entry.
|
253
209
|
if ((0, types_1.isInstantiableClass)(strClass)) {
|
254
|
-
const selfParam =
|
255
|
-
category: 0 /* ParameterCategory.Simple */,
|
256
|
-
name: 'self',
|
257
|
-
type: types_1.ClassType.cloneAsInstance(classType),
|
258
|
-
hasDeclaredType: true,
|
259
|
-
};
|
210
|
+
const selfParam = types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, types_1.ClassType.cloneAsInstance(classType), types_1.FunctionParamFlags.TypeDeclared, 'self');
|
260
211
|
function createDefaultTypeVar(func) {
|
261
212
|
let defaultTypeVar = types_1.TypeVarType.createInstance(`__TDefault`);
|
262
|
-
defaultTypeVar = types_1.TypeVarType.cloneForScopeId(defaultTypeVar, func.
|
213
|
+
defaultTypeVar = types_1.TypeVarType.cloneForScopeId(defaultTypeVar, func.shared.typeVarScopeId, classType.shared.name, 1 /* TypeVarScopeType.Function */);
|
263
214
|
return defaultTypeVar;
|
264
215
|
}
|
265
216
|
function createGetMethod(keyType, valueType, includeDefault, isEntryRequired = false, defaultTypeMatchesField = false) {
|
266
217
|
const getOverload = types_1.FunctionType.createSynthesizedInstance('get', 256 /* FunctionTypeFlags.Overloaded */);
|
267
218
|
types_1.FunctionType.addParameter(getOverload, selfParam);
|
268
|
-
getOverload.
|
269
|
-
types_1.FunctionType.addParameter(getOverload,
|
270
|
-
category: 0 /* ParameterCategory.Simple */,
|
271
|
-
name: 'k',
|
272
|
-
type: keyType,
|
273
|
-
hasDeclaredType: true,
|
274
|
-
});
|
219
|
+
getOverload.shared.typeVarScopeId = ParseTreeUtils.getScopeIdForNode(node);
|
220
|
+
types_1.FunctionType.addParameter(getOverload, types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, keyType, types_1.FunctionParamFlags.TypeDeclared, 'k'));
|
275
221
|
if (includeDefault) {
|
276
222
|
const defaultTypeVar = createDefaultTypeVar(getOverload);
|
277
223
|
let defaultParamType;
|
@@ -291,36 +237,26 @@ function synthesizeTypedDictClassMethods(evaluator, node, classType) {
|
|
291
237
|
}
|
292
238
|
returnType = defaultParamType;
|
293
239
|
}
|
294
|
-
types_1.FunctionType.addParameter(getOverload,
|
295
|
-
|
296
|
-
name: 'default',
|
297
|
-
type: defaultParamType,
|
298
|
-
hasDeclaredType: true,
|
299
|
-
});
|
300
|
-
getOverload.details.declaredReturnType = returnType;
|
240
|
+
types_1.FunctionType.addParameter(getOverload, types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, defaultParamType, types_1.FunctionParamFlags.TypeDeclared, 'default'));
|
241
|
+
getOverload.shared.declaredReturnType = returnType;
|
301
242
|
}
|
302
243
|
else {
|
303
|
-
getOverload.
|
244
|
+
getOverload.shared.declaredReturnType = isEntryRequired
|
304
245
|
? valueType
|
305
246
|
: (0, types_1.combineTypes)([valueType, evaluator.getNoneType()]);
|
306
247
|
}
|
307
248
|
return getOverload;
|
308
249
|
}
|
309
250
|
function createPopMethods(keyType, valueType, isEntryRequired) {
|
310
|
-
const keyParam =
|
311
|
-
category: 0 /* ParameterCategory.Simple */,
|
312
|
-
name: 'k',
|
313
|
-
type: keyType,
|
314
|
-
hasDeclaredType: true,
|
315
|
-
};
|
251
|
+
const keyParam = types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, keyType, types_1.FunctionParamFlags.TypeDeclared, 'k');
|
316
252
|
const popOverload1 = types_1.FunctionType.createSynthesizedInstance('pop', 256 /* FunctionTypeFlags.Overloaded */);
|
317
253
|
types_1.FunctionType.addParameter(popOverload1, selfParam);
|
318
254
|
types_1.FunctionType.addParameter(popOverload1, keyParam);
|
319
|
-
popOverload1.
|
255
|
+
popOverload1.shared.declaredReturnType = valueType;
|
320
256
|
const popOverload2 = types_1.FunctionType.createSynthesizedInstance('pop', 256 /* FunctionTypeFlags.Overloaded */);
|
321
257
|
types_1.FunctionType.addParameter(popOverload2, selfParam);
|
322
258
|
types_1.FunctionType.addParameter(popOverload2, keyParam);
|
323
|
-
popOverload2.
|
259
|
+
popOverload2.shared.typeVarScopeId = ParseTreeUtils.getScopeIdForNode(node);
|
324
260
|
const defaultTypeVar = createDefaultTypeVar(popOverload2);
|
325
261
|
let defaultParamType;
|
326
262
|
let returnType;
|
@@ -334,44 +270,23 @@ function synthesizeTypedDictClassMethods(evaluator, node, classType) {
|
|
334
270
|
defaultParamType = (0, types_1.combineTypes)([valueType, defaultTypeVar]);
|
335
271
|
returnType = defaultParamType;
|
336
272
|
}
|
337
|
-
types_1.FunctionType.addParameter(popOverload2,
|
338
|
-
|
339
|
-
name: 'default',
|
340
|
-
hasDeclaredType: true,
|
341
|
-
type: defaultParamType,
|
342
|
-
hasDefault: true,
|
343
|
-
});
|
344
|
-
popOverload2.details.declaredReturnType = returnType;
|
273
|
+
types_1.FunctionType.addParameter(popOverload2, types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, defaultParamType, types_1.FunctionParamFlags.TypeDeclared, 'default', defaultParamType));
|
274
|
+
popOverload2.shared.declaredReturnType = returnType;
|
345
275
|
return [popOverload1, popOverload2];
|
346
276
|
}
|
347
277
|
function createSetDefaultMethod(keyType, valueType) {
|
348
278
|
const setDefaultOverload = types_1.FunctionType.createSynthesizedInstance('setdefault', 256 /* FunctionTypeFlags.Overloaded */);
|
349
279
|
types_1.FunctionType.addParameter(setDefaultOverload, selfParam);
|
350
|
-
types_1.FunctionType.addParameter(setDefaultOverload,
|
351
|
-
|
352
|
-
|
353
|
-
hasDeclaredType: true,
|
354
|
-
type: keyType,
|
355
|
-
});
|
356
|
-
types_1.FunctionType.addParameter(setDefaultOverload, {
|
357
|
-
category: 0 /* ParameterCategory.Simple */,
|
358
|
-
name: 'default',
|
359
|
-
hasDeclaredType: true,
|
360
|
-
type: valueType,
|
361
|
-
});
|
362
|
-
setDefaultOverload.details.declaredReturnType = valueType;
|
280
|
+
types_1.FunctionType.addParameter(setDefaultOverload, types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, keyType, types_1.FunctionParamFlags.TypeDeclared, 'k'));
|
281
|
+
types_1.FunctionType.addParameter(setDefaultOverload, types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, valueType, types_1.FunctionParamFlags.TypeDeclared, 'default'));
|
282
|
+
setDefaultOverload.shared.declaredReturnType = valueType;
|
363
283
|
return setDefaultOverload;
|
364
284
|
}
|
365
285
|
function createDelItemMethod(keyType) {
|
366
286
|
const delItemOverload = types_1.FunctionType.createSynthesizedInstance('delitem', 256 /* FunctionTypeFlags.Overloaded */);
|
367
287
|
types_1.FunctionType.addParameter(delItemOverload, selfParam);
|
368
|
-
types_1.FunctionType.addParameter(delItemOverload,
|
369
|
-
|
370
|
-
name: 'k',
|
371
|
-
hasDeclaredType: true,
|
372
|
-
type: keyType,
|
373
|
-
});
|
374
|
-
delItemOverload.details.declaredReturnType = evaluator.getNoneType();
|
288
|
+
types_1.FunctionType.addParameter(delItemOverload, types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, keyType, types_1.FunctionParamFlags.TypeDeclared, 'k'));
|
289
|
+
delItemOverload.shared.declaredReturnType = evaluator.getNoneType();
|
375
290
|
return delItemOverload;
|
376
291
|
}
|
377
292
|
function createUpdateMethod() {
|
@@ -385,19 +300,14 @@ function synthesizeTypedDictClassMethods(evaluator, node, classType) {
|
|
385
300
|
const updateMethod3 = types_1.FunctionType.createSynthesizedInstance('update', 256 /* FunctionTypeFlags.Overloaded */);
|
386
301
|
types_1.FunctionType.addParameter(updateMethod3, selfParam);
|
387
302
|
// If all entries are read-only, don't allow updates.
|
388
|
-
types_1.FunctionType.addParameter(updateMethod1,
|
389
|
-
|
390
|
-
|
391
|
-
hasDeclaredType: true,
|
392
|
-
type: allEntriesAreReadOnly
|
393
|
-
? types_1.NeverType.createNever()
|
394
|
-
: types_1.ClassType.cloneAsInstance(types_1.ClassType.cloneForPartialTypedDict(classType)),
|
395
|
-
});
|
303
|
+
types_1.FunctionType.addParameter(updateMethod1, types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, allEntriesAreReadOnly
|
304
|
+
? types_1.NeverType.createNever()
|
305
|
+
: types_1.ClassType.cloneAsInstance(types_1.ClassType.cloneForPartialTypedDict(classType)), types_1.FunctionParamFlags.TypeDeclared, '__m'));
|
396
306
|
types_1.FunctionType.addPositionOnlyParameterSeparator(updateMethod1);
|
397
307
|
types_1.FunctionType.addKeywordOnlyParameterSeparator(updateMethod3);
|
398
|
-
updateMethod1.
|
399
|
-
updateMethod2.
|
400
|
-
updateMethod3.
|
308
|
+
updateMethod1.shared.declaredReturnType = evaluator.getNoneType();
|
309
|
+
updateMethod2.shared.declaredReturnType = evaluator.getNoneType();
|
310
|
+
updateMethod3.shared.declaredReturnType = evaluator.getNoneType();
|
401
311
|
const tuplesToCombine = [];
|
402
312
|
const tupleClass = evaluator.getBuiltInType(node, 'tuple');
|
403
313
|
entries.knownItems.forEach((entry, name) => {
|
@@ -414,26 +324,14 @@ function synthesizeTypedDictClassMethods(evaluator, node, classType) {
|
|
414
324
|
tuplesToCombine.push(tupleType);
|
415
325
|
}
|
416
326
|
// For writable entries, add a keyword argument.
|
417
|
-
types_1.FunctionType.addParameter(updateMethod3,
|
418
|
-
category: 0 /* ParameterCategory.Simple */,
|
419
|
-
name,
|
420
|
-
hasDeclaredType: true,
|
421
|
-
hasDefault: true,
|
422
|
-
defaultType: types_1.AnyType.create(/* isEllipsis */ true),
|
423
|
-
type: entry.valueType,
|
424
|
-
});
|
327
|
+
types_1.FunctionType.addParameter(updateMethod3, types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, entry.valueType, types_1.FunctionParamFlags.TypeDeclared, name, types_1.AnyType.create(/* isEllipsis */ true)));
|
425
328
|
}
|
426
329
|
});
|
427
330
|
const iterableClass = evaluator.getTypingType(node, 'Iterable');
|
428
331
|
if (iterableClass && (0, types_1.isInstantiableClass)(iterableClass)) {
|
429
332
|
const iterableType = types_1.ClassType.cloneAsInstance(iterableClass);
|
430
|
-
types_1.FunctionType.addParameter(updateMethod2,
|
431
|
-
|
432
|
-
name: '__m',
|
433
|
-
hasDeclaredType: true,
|
434
|
-
type: types_1.ClassType.cloneForSpecialization(iterableType, [(0, types_1.combineTypes)(tuplesToCombine)],
|
435
|
-
/* isTypeArgumentExplicit */ true),
|
436
|
-
});
|
333
|
+
types_1.FunctionType.addParameter(updateMethod2, types_1.FunctionParam.create(0 /* ParameterCategory.Simple */, types_1.ClassType.cloneForSpecialization(iterableType, [(0, types_1.combineTypes)(tuplesToCombine)],
|
334
|
+
/* isTypeArgumentExplicit */ true), types_1.FunctionParamFlags.TypeDeclared, '__m'));
|
437
335
|
}
|
438
336
|
types_1.FunctionType.addPositionOnlyParameterSeparator(updateMethod2);
|
439
337
|
// Note that the order of method1 and method2 is swapped. This is done so
|
@@ -492,7 +390,7 @@ function synthesizeTypedDictClassMethods(evaluator, node, classType) {
|
|
492
390
|
if (dictValueType) {
|
493
391
|
const clearMethod = types_1.FunctionType.createSynthesizedInstance('clear');
|
494
392
|
types_1.FunctionType.addParameter(clearMethod, selfParam);
|
495
|
-
clearMethod.
|
393
|
+
clearMethod.shared.declaredReturnType = evaluator.getNoneType();
|
496
394
|
symbolTable.set('clear', symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */, clearMethod));
|
497
395
|
const popItemMethod = types_1.FunctionType.createSynthesizedInstance('popitem');
|
498
396
|
types_1.FunctionType.addParameter(popItemMethod, selfParam);
|
@@ -507,7 +405,7 @@ function synthesizeTypedDictClassMethods(evaluator, node, classType) {
|
|
507
405
|
else {
|
508
406
|
tupleType = types_1.UnknownType.create();
|
509
407
|
}
|
510
|
-
popItemMethod.
|
408
|
+
popItemMethod.shared.declaredReturnType = tupleType;
|
511
409
|
symbolTable.set('popitem', symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */, popItemMethod));
|
512
410
|
}
|
513
411
|
// If the TypedDict is closed, we can provide a more accurate value type
|
@@ -520,8 +418,8 @@ function synthesizeTypedDictClassMethods(evaluator, node, classType) {
|
|
520
418
|
const returnTypeClass = evaluator.getTypingType(node, `dict_${methodName}`);
|
521
419
|
if (returnTypeClass &&
|
522
420
|
(0, types_1.isInstantiableClass)(returnTypeClass) &&
|
523
|
-
returnTypeClass.
|
524
|
-
method.
|
421
|
+
returnTypeClass.shared.typeParameters.length === 2) {
|
422
|
+
method.shared.declaredReturnType = types_1.ClassType.cloneForSpecialization(types_1.ClassType.cloneAsInstance(returnTypeClass), [strType, mappingValueType],
|
525
423
|
/* isTypeArgumentExplicit */ true);
|
526
424
|
symbolTable.set(methodName, symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */, method));
|
527
425
|
}
|
@@ -533,7 +431,7 @@ exports.synthesizeTypedDictClassMethods = synthesizeTypedDictClassMethods;
|
|
533
431
|
function getTypedDictMembersForClass(evaluator, classType, allowNarrowed = false) {
|
534
432
|
var _a;
|
535
433
|
// Were the entries already calculated and cached?
|
536
|
-
if (!classType.
|
434
|
+
if (!classType.shared.typedDictEntries) {
|
537
435
|
const entries = {
|
538
436
|
knownItems: new Map(),
|
539
437
|
extraItems: undefined,
|
@@ -548,17 +446,17 @@ function getTypedDictMembersForClass(evaluator, classType, allowNarrowed = false
|
|
548
446
|
};
|
549
447
|
}
|
550
448
|
// Cache the entries for next time.
|
551
|
-
classType.
|
449
|
+
classType.shared.typedDictEntries = entries;
|
552
450
|
}
|
553
451
|
const typeVarContext = (0, typeUtils_1.buildTypeVarContextFromSpecializedClass)(classType);
|
554
452
|
// Create a specialized copy of the entries so the caller can mutate them.
|
555
453
|
const entries = new Map();
|
556
|
-
classType.
|
454
|
+
classType.shared.typedDictEntries.knownItems.forEach((value, key) => {
|
557
455
|
const tdEntry = { ...value };
|
558
456
|
tdEntry.valueType = (0, typeUtils_1.applySolvedTypeVars)(tdEntry.valueType, typeVarContext);
|
559
457
|
// If the class is "Partial", make all entries optional and convert all
|
560
458
|
// read-only entries to Never.
|
561
|
-
if (classType.isTypedDictPartial) {
|
459
|
+
if (classType.priv.isTypedDictPartial) {
|
562
460
|
tdEntry.isRequired = false;
|
563
461
|
if (tdEntry.isReadOnly) {
|
564
462
|
tdEntry.valueType = types_1.NeverType.createNever();
|
@@ -570,8 +468,8 @@ function getTypedDictMembersForClass(evaluator, classType, allowNarrowed = false
|
|
570
468
|
entries.set(key, tdEntry);
|
571
469
|
});
|
572
470
|
// Apply narrowed types on top of existing entries if present.
|
573
|
-
if (allowNarrowed && classType.typedDictNarrowedEntries) {
|
574
|
-
classType.typedDictNarrowedEntries.forEach((value, key) => {
|
471
|
+
if (allowNarrowed && classType.priv.typedDictNarrowedEntries) {
|
472
|
+
classType.priv.typedDictNarrowedEntries.forEach((value, key) => {
|
575
473
|
const tdEntry = { ...value };
|
576
474
|
tdEntry.valueType = (0, typeUtils_1.applySolvedTypeVars)(tdEntry.valueType, typeVarContext);
|
577
475
|
entries.set(key, tdEntry);
|
@@ -579,7 +477,7 @@ function getTypedDictMembersForClass(evaluator, classType, allowNarrowed = false
|
|
579
477
|
}
|
580
478
|
return {
|
581
479
|
knownItems: entries,
|
582
|
-
extraItems: (_a = classType.
|
480
|
+
extraItems: (_a = classType.shared.typedDictEntries) === null || _a === void 0 ? void 0 : _a.extraItems,
|
583
481
|
};
|
584
482
|
}
|
585
483
|
exports.getTypedDictMembersForClass = getTypedDictMembersForClass;
|
@@ -646,22 +544,22 @@ exports.getTypedDictDictEquivalent = getTypedDictDictEquivalent;
|
|
646
544
|
function getTypedDictFieldsFromDictSyntax(evaluator, entryDict, classFields, isInline) {
|
647
545
|
const entrySet = new Set();
|
648
546
|
const fileInfo = AnalyzerNodeInfo.getFileInfo(entryDict);
|
649
|
-
entryDict.
|
547
|
+
entryDict.d.items.forEach((entry) => {
|
650
548
|
if (entry.nodeType !== 20 /* ParseNodeType.DictionaryKeyEntry */) {
|
651
549
|
evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictSecondArgDictEntry(), entry);
|
652
550
|
return;
|
653
551
|
}
|
654
|
-
if (entry.
|
655
|
-
evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictEntryName(), entry.
|
552
|
+
if (entry.d.keyExpr.nodeType !== 48 /* ParseNodeType.StringList */) {
|
553
|
+
evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictEntryName(), entry.d.keyExpr);
|
656
554
|
return;
|
657
555
|
}
|
658
|
-
const entryName = entry.
|
556
|
+
const entryName = entry.d.keyExpr.d.strings.map((s) => s.d.value).join('');
|
659
557
|
if (!entryName) {
|
660
|
-
evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictEmptyName(), entry.
|
558
|
+
evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictEmptyName(), entry.d.keyExpr);
|
661
559
|
return;
|
662
560
|
}
|
663
561
|
if (entrySet.has(entryName)) {
|
664
|
-
evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictEntryUnique(), entry.
|
562
|
+
evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictEntryUnique(), entry.d.keyExpr);
|
665
563
|
return;
|
666
564
|
}
|
667
565
|
// Record names in a set to detect duplicates.
|
@@ -669,11 +567,11 @@ function getTypedDictFieldsFromDictSyntax(evaluator, entryDict, classFields, isI
|
|
669
567
|
const newSymbol = new symbol_1.Symbol(8 /* SymbolFlags.InstanceMember */);
|
670
568
|
const declaration = {
|
671
569
|
type: 1 /* DeclarationType.Variable */,
|
672
|
-
node: entry.
|
570
|
+
node: entry.d.keyExpr,
|
673
571
|
uri: fileInfo.fileUri,
|
674
|
-
typeAnnotationNode: entry.
|
572
|
+
typeAnnotationNode: entry.d.valueExpr,
|
675
573
|
isRuntimeTypeExpression: !isInline,
|
676
|
-
range: (0, positionUtils_1.convertOffsetsToRange)(entry.
|
574
|
+
range: (0, positionUtils_1.convertOffsetsToRange)(entry.d.keyExpr.start, textRange_1.TextRange.getEnd(entry.d.keyExpr), fileInfo.lines),
|
677
575
|
moduleName: fileInfo.moduleName,
|
678
576
|
isInExceptSuite: false,
|
679
577
|
};
|
@@ -690,9 +588,9 @@ function getTypedDictMembersForClassRecursive(evaluator, classType, entries, rec
|
|
690
588
|
return;
|
691
589
|
}
|
692
590
|
recursionCount++;
|
693
|
-
classType.
|
591
|
+
classType.shared.baseClasses.forEach((baseClassType) => {
|
694
592
|
if ((0, types_1.isInstantiableClass)(baseClassType) && types_1.ClassType.isTypedDictClass(baseClassType)) {
|
695
|
-
const specializedBaseClassType = (0, typeUtils_1.partiallySpecializeType)(baseClassType, classType);
|
593
|
+
const specializedBaseClassType = (0, typeUtils_1.partiallySpecializeType)(baseClassType, classType, evaluator.getTypeClassType());
|
696
594
|
(0, debug_1.assert)((0, types_1.isClass)(specializedBaseClassType));
|
697
595
|
// Recursively gather keys from parent classes. Don't report any errors
|
698
596
|
// in these cases because they will be reported within that class.
|
@@ -750,8 +648,8 @@ function getEffectiveExtraItemsEntryType(evaluator, classType) {
|
|
750
648
|
isProvided: false,
|
751
649
|
};
|
752
650
|
}
|
753
|
-
if ((_a = classType.
|
754
|
-
return classType.
|
651
|
+
if ((_a = classType.shared.typedDictEntries) === null || _a === void 0 ? void 0 : _a.extraItems) {
|
652
|
+
return classType.shared.typedDictEntries.extraItems;
|
755
653
|
}
|
756
654
|
return {
|
757
655
|
valueType: types_1.NeverType.createNever(),
|
@@ -901,10 +799,10 @@ function assignToTypedDict(evaluator, classType, keyTypes, valueTypes, diagAdden
|
|
901
799
|
const narrowedEntries = new Map();
|
902
800
|
let typeVarContext;
|
903
801
|
let genericClassType = classType;
|
904
|
-
if (classType.
|
802
|
+
if (classType.shared.typeParameters.length > 0) {
|
905
803
|
typeVarContext = new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(classType));
|
906
804
|
// Create a generic (nonspecialized version) of the class.
|
907
|
-
if (classType.typeArguments) {
|
805
|
+
if (classType.priv.typeArguments) {
|
908
806
|
genericClassType = types_1.ClassType.cloneForSpecialization(classType,
|
909
807
|
/* typeArguments */ undefined,
|
910
808
|
/* isTypeArgumentExplicit */ false);
|
@@ -917,7 +815,7 @@ function assignToTypedDict(evaluator, classType, keyTypes, valueTypes, diagAdden
|
|
917
815
|
isMatch = false;
|
918
816
|
}
|
919
817
|
else {
|
920
|
-
const keyValue = keyType.literalValue;
|
818
|
+
const keyValue = keyType.priv.literalValue;
|
921
819
|
const symbolEntry = tdEntries.knownItems.get(keyValue);
|
922
820
|
if (!symbolEntry) {
|
923
821
|
if (tdEntries.extraItems) {
|
@@ -940,7 +838,7 @@ function assignToTypedDict(evaluator, classType, keyTypes, valueTypes, diagAdden
|
|
940
838
|
if (diagAddendum) {
|
941
839
|
const subDiag = diagAddendum === null || diagAddendum === void 0 ? void 0 : diagAddendum.createAddendum();
|
942
840
|
subDiag.addMessage(localize_1.LocAddendum.typedDictFieldUndefined().format({
|
943
|
-
name: keyType.literalValue,
|
841
|
+
name: keyType.priv.literalValue,
|
944
842
|
type: evaluator.printType(types_1.ClassType.cloneAsInstance(classType)),
|
945
843
|
}));
|
946
844
|
subDiag.addTextRange(keyTypeResult.node);
|
@@ -954,7 +852,7 @@ function assignToTypedDict(evaluator, classType, keyTypes, valueTypes, diagAdden
|
|
954
852
|
/* srcTypeVarContext */ undefined, 256 /* AssignTypeFlags.RetainLiteralsForTypeVar */)) {
|
955
853
|
if (subDiag) {
|
956
854
|
subDiag.addMessage(localize_1.LocAddendum.typedDictFieldTypeMismatch().format({
|
957
|
-
name: keyType.literalValue,
|
855
|
+
name: keyType.priv.literalValue,
|
958
856
|
type: evaluator.printType(valueTypes[index].type),
|
959
857
|
}));
|
960
858
|
subDiag.addTextRange(keyTypeResult.node);
|
@@ -1000,16 +898,16 @@ function assignToTypedDict(evaluator, classType, keyTypes, valueTypes, diagAdden
|
|
1000
898
|
}
|
1001
899
|
exports.assignToTypedDict = assignToTypedDict;
|
1002
900
|
function getTypeOfIndexedTypedDict(evaluator, node, baseType, usage) {
|
1003
|
-
if (node.items.length !== 1) {
|
1004
|
-
evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typeArgsMismatchOne().format({ received: node.items.length }), node);
|
901
|
+
if (node.d.items.length !== 1) {
|
902
|
+
evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typeArgsMismatchOne().format({ received: node.d.items.length }), node);
|
1005
903
|
return { type: types_1.UnknownType.create() };
|
1006
904
|
}
|
1007
905
|
// Look for subscript types that are not supported by TypedDict.
|
1008
|
-
if (node.trailingComma || node.items[0].name || node.items[0].
|
906
|
+
if (node.d.trailingComma || node.d.items[0].d.name || node.d.items[0].d.argCategory !== 0 /* ArgumentCategory.Simple */) {
|
1009
907
|
return undefined;
|
1010
908
|
}
|
1011
909
|
const entries = getTypedDictMembersForClass(evaluator, baseType, /* allowNarrowed */ usage.method === 'get');
|
1012
|
-
const indexTypeResult = evaluator.getTypeOfExpression(node.items[0].
|
910
|
+
const indexTypeResult = evaluator.getTypeOfExpression(node.d.items[0].d.valueExpr);
|
1013
911
|
const indexType = indexTypeResult.type;
|
1014
912
|
let diag = new diagnostic_1.DiagnosticAddendum();
|
1015
913
|
let allDiagsInvolveNotRequiredKeys = true;
|
@@ -1019,13 +917,13 @@ function getTypeOfIndexedTypedDict(evaluator, node, baseType, usage) {
|
|
1019
917
|
return subtype;
|
1020
918
|
}
|
1021
919
|
if ((0, types_1.isClassInstance)(subtype) && types_1.ClassType.isBuiltIn(subtype, 'str')) {
|
1022
|
-
if (subtype.literalValue === undefined) {
|
920
|
+
if (subtype.priv.literalValue === undefined) {
|
1023
921
|
// If it's a plain str with no literal value, we can't
|
1024
922
|
// make any determination about the resulting type.
|
1025
923
|
return types_1.UnknownType.create();
|
1026
924
|
}
|
1027
925
|
// Look up the entry in the typed dict to get its type.
|
1028
|
-
const entryName = subtype.literalValue;
|
926
|
+
const entryName = subtype.priv.literalValue;
|
1029
927
|
const entry = (_a = entries.knownItems.get(entryName)) !== null && _a !== void 0 ? _a : entries.extraItems;
|
1030
928
|
if (!entry) {
|
1031
929
|
diag.addMessage(localize_1.LocAddendum.keyUndefined().format({
|
@@ -1095,19 +993,19 @@ function narrowForKeyAssignment(classType, key) {
|
|
1095
993
|
// We should never be called if the classType is not a TypedDict or if typedDictEntries
|
1096
994
|
// is empty, but this can theoretically happen in the presence of certain circular
|
1097
995
|
// dependencies.
|
1098
|
-
if (!types_1.ClassType.isTypedDictClass(classType) || !classType.
|
996
|
+
if (!types_1.ClassType.isTypedDictClass(classType) || !classType.shared.typedDictEntries) {
|
1099
997
|
return classType;
|
1100
998
|
}
|
1101
|
-
const tdEntry = classType.
|
999
|
+
const tdEntry = classType.shared.typedDictEntries.knownItems.get(key);
|
1102
1000
|
if (!tdEntry || tdEntry.isRequired) {
|
1103
1001
|
return classType;
|
1104
1002
|
}
|
1105
|
-
const narrowedTdEntry = (_a = classType.typedDictNarrowedEntries) === null || _a === void 0 ? void 0 : _a.get(key);
|
1003
|
+
const narrowedTdEntry = (_a = classType.priv.typedDictNarrowedEntries) === null || _a === void 0 ? void 0 : _a.get(key);
|
1106
1004
|
if (narrowedTdEntry === null || narrowedTdEntry === void 0 ? void 0 : narrowedTdEntry.isProvided) {
|
1107
1005
|
return classType;
|
1108
1006
|
}
|
1109
|
-
const narrowedEntries = classType.typedDictNarrowedEntries
|
1110
|
-
? new Map(classType.typedDictNarrowedEntries)
|
1007
|
+
const narrowedEntries = classType.priv.typedDictNarrowedEntries
|
1008
|
+
? new Map(classType.priv.typedDictNarrowedEntries)
|
1111
1009
|
: new Map();
|
1112
1010
|
narrowedEntries.set(key, {
|
1113
1011
|
isProvided: true,
|