@zzzen/pyright-internal 1.2.0-dev.20240218 → 1.2.0-dev.20240225
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 +1 -0
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.d.ts +1 -2
- package/dist/analyzer/checker.js +138 -49
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/dataClasses.js +6 -6
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/decorators.js +6 -6
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/enums.js +1 -1
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/importResolver.js +11 -3
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importStatementUtils.js +2 -0
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.js +1 -1
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/parameterUtils.js +11 -1
- package/dist/analyzer/parameterUtils.js.map +1 -1
- package/dist/analyzer/patternMatching.js +3 -3
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/properties.js +2 -2
- package/dist/analyzer/sourceFile.js +4 -4
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +160 -98
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +1 -0
- package/dist/analyzer/typeGuards.js +5 -5
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +1 -1
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeUtils.js +4 -3
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typedDicts.d.ts +6 -3
- package/dist/analyzer/typedDicts.js +292 -65
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +31 -23
- package/dist/analyzer/types.js +59 -44
- package/dist/analyzer/types.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +18 -18
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/common/cancellationUtils.d.ts +4 -0
- package/dist/common/cancellationUtils.js +2 -1
- package/dist/common/cancellationUtils.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +1 -0
- package/dist/languageService/autoImporter.js +3 -1
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/completionProvider.js +4 -4
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/hoverProvider.js +1 -1
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +30 -2
- package/dist/localization/localize.js +9 -2
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +6 -8
- package/dist/localization/package.nls.de.json +6 -8
- package/dist/localization/package.nls.en-us.json +18 -11
- package/dist/localization/package.nls.es.json +6 -8
- package/dist/localization/package.nls.fr.json +3 -5
- package/dist/localization/package.nls.it.json +6 -8
- package/dist/localization/package.nls.ja.json +7 -9
- package/dist/localization/package.nls.ko.json +6 -8
- package/dist/localization/package.nls.pl.json +6 -8
- package/dist/localization/package.nls.pt-br.json +3 -5
- package/dist/localization/package.nls.qps-ploc.json +0 -2
- package/dist/localization/package.nls.ru.json +3 -5
- package/dist/localization/package.nls.tr.json +6 -8
- package/dist/localization/package.nls.zh-cn.json +3 -5
- package/dist/localization/package.nls.zh-tw.json +6 -8
- package/dist/tests/checker.test.js +0 -4
- package/dist/tests/checker.test.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.js +11 -0
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/importStatementUtils.test.js +8 -0
- package/dist/tests/importStatementUtils.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +12 -0
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +1 -1
- package/dist/tests/typeEvaluator3.test.js +4 -8
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +42 -0
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/package.json +4 -4
- package/dist/analyzer/regions.d.ts +0 -11
- package/dist/analyzer/regions.js +0 -62
- package/dist/analyzer/regions.js.map +0 -1
package/dist/analyzer/checker.js
CHANGED
@@ -62,7 +62,6 @@ const ParseTreeUtils = __importStar(require("./parseTreeUtils"));
|
|
62
62
|
const parseTreeWalker_1 = require("./parseTreeWalker");
|
63
63
|
const patternMatching_1 = require("./patternMatching");
|
64
64
|
const protocols_1 = require("./protocols");
|
65
|
-
const regions_1 = require("./regions");
|
66
65
|
const scopeUtils_1 = require("./scopeUtils");
|
67
66
|
const sourceFile_1 = require("./sourceFile");
|
68
67
|
const sourceMapper_1 = require("./sourceMapper");
|
@@ -73,6 +72,7 @@ const typeEvaluator_1 = require("./typeEvaluator");
|
|
73
72
|
const typeGuards_1 = require("./typeGuards");
|
74
73
|
const typeUtils_1 = require("./typeUtils");
|
75
74
|
const typeVarContext_1 = require("./typeVarContext");
|
75
|
+
const typedDicts_1 = require("./typedDicts");
|
76
76
|
const types_1 = require("./types");
|
77
77
|
// When enabled, this debug flag causes the code complexity of
|
78
78
|
// functions to be emitted.
|
@@ -116,7 +116,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
116
116
|
// defined in this module for things like unaccessed variables.
|
117
117
|
this._validateSymbolTables();
|
118
118
|
this._reportDuplicateImports();
|
119
|
-
this._checkRegions();
|
120
119
|
}
|
121
120
|
walk(node) {
|
122
121
|
if (!AnalyzerNodeInfo.isCodeUnreachable(node)) {
|
@@ -181,6 +180,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
181
180
|
this._validateSlotsClassVarConflict(classTypeResult.classType);
|
182
181
|
}
|
183
182
|
this._validateBaseClassOverrides(classTypeResult.classType);
|
183
|
+
this._validateTypedDictOverrides(classTypeResult.classType);
|
184
184
|
this._validateOverloadDecoratorConsistency(classTypeResult.classType);
|
185
185
|
this._validateMultipleInheritanceBaseClasses(classTypeResult.classType, node.name);
|
186
186
|
this._validateMultipleInheritanceCompatibility(classTypeResult.classType, node.name);
|
@@ -288,7 +288,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
288
288
|
const kwargsType = types_1.FunctionType.getEffectiveParameterType(functionTypeResult.functionType, kwargsIndex);
|
289
289
|
if ((0, types_1.isClass)(kwargsType) && kwargsType.details.typedDictEntries) {
|
290
290
|
const overlappingEntries = new Set();
|
291
|
-
kwargsType.details.typedDictEntries.forEach((_, name) => {
|
291
|
+
kwargsType.details.typedDictEntries.knownItems.forEach((_, name) => {
|
292
292
|
if (keywordNames.has(name)) {
|
293
293
|
overlappingEntries.add(name);
|
294
294
|
}
|
@@ -383,7 +383,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
383
383
|
}
|
384
384
|
// Verify common dunder signatures.
|
385
385
|
this._validateDunderSignatures(node, functionTypeResult.functionType, containingClassNode !== undefined);
|
386
|
-
// Verify TypeGuard functions.
|
386
|
+
// Verify TypeGuard and TypeIs functions.
|
387
387
|
this._validateTypeGuardFunction(node, functionTypeResult.functionType, containingClassNode !== undefined);
|
388
388
|
this._validateFunctionTypeVarUsage(node, functionTypeResult);
|
389
389
|
this._validateGeneratorReturnType(node, functionTypeResult.functionType);
|
@@ -3272,6 +3272,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3272
3272
|
});
|
3273
3273
|
}
|
3274
3274
|
_validateTypeGuardFunction(node, functionType, isMethod) {
|
3275
|
+
var _a;
|
3275
3276
|
const returnType = functionType.details.declaredReturnType;
|
3276
3277
|
if (!returnType) {
|
3277
3278
|
return;
|
@@ -3279,7 +3280,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3279
3280
|
if (!(0, types_1.isClassInstance)(returnType) || !returnType.typeArguments || returnType.typeArguments.length < 1) {
|
3280
3281
|
return;
|
3281
3282
|
}
|
3282
|
-
|
3283
|
+
const isTypeGuard = types_1.ClassType.isBuiltIn(returnType, 'TypeGuard');
|
3284
|
+
const isTypeIs = types_1.ClassType.isBuiltIn(returnType, 'TypeIs');
|
3285
|
+
if (!isTypeGuard && !isTypeIs) {
|
3283
3286
|
return;
|
3284
3287
|
}
|
3285
3288
|
// Make sure there's at least one input parameter provided.
|
@@ -3294,6 +3297,25 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3294
3297
|
if (paramCount < 1) {
|
3295
3298
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typeGuardParamCount(), node.name);
|
3296
3299
|
}
|
3300
|
+
if (isTypeIs) {
|
3301
|
+
const typeGuardType = returnType.typeArguments[0];
|
3302
|
+
// Determine the type of the first parameter.
|
3303
|
+
const paramIndex = isMethod && !types_1.FunctionType.isStaticMethod(functionType) ? 1 : 0;
|
3304
|
+
if (paramIndex >= functionType.details.parameters.length) {
|
3305
|
+
return;
|
3306
|
+
}
|
3307
|
+
const paramType = types_1.FunctionType.getEffectiveParameterType(functionType, paramIndex);
|
3308
|
+
// Verify that the typeGuardType is a narrower type than the paramType.
|
3309
|
+
if (!this._evaluator.assignType(paramType, typeGuardType)) {
|
3310
|
+
const returnAnnotation = node.returnTypeAnnotation || ((_a = node.functionAnnotationComment) === null || _a === void 0 ? void 0 : _a.returnTypeAnnotation);
|
3311
|
+
if (returnAnnotation) {
|
3312
|
+
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typeIsReturnType().format({
|
3313
|
+
type: this._evaluator.printType(paramType),
|
3314
|
+
returnType: this._evaluator.printType(typeGuardType),
|
3315
|
+
}), returnAnnotation);
|
3316
|
+
}
|
3317
|
+
}
|
3318
|
+
}
|
3297
3319
|
}
|
3298
3320
|
_validateDunderSignatures(node, functionType, isMethod) {
|
3299
3321
|
var _a;
|
@@ -3639,7 +3661,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3639
3661
|
// variables. We need to make sure these are initialized.
|
3640
3662
|
const abstractSymbols = new Map();
|
3641
3663
|
if (types_1.ClassType.isFinal(classType)) {
|
3642
|
-
(0, typeUtils_1.getProtocolSymbolsRecursive)(classType, abstractSymbols,
|
3664
|
+
(0, typeUtils_1.getProtocolSymbolsRecursive)(classType, abstractSymbols, 2048 /* ClassTypeFlags.SupportsAbstractMethods */);
|
3643
3665
|
}
|
3644
3666
|
classType.details.fields.forEach((localSymbol, name) => {
|
3645
3667
|
abstractSymbols.delete(name);
|
@@ -4042,6 +4064,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4042
4064
|
}
|
4043
4065
|
}
|
4044
4066
|
_validateMultipleInheritanceOverride(overriddenClassAndSymbol, overrideClassAndSymbol, childClassType, memberName, errorNode) {
|
4067
|
+
var _a, _b, _c, _d;
|
4045
4068
|
if (!(0, types_1.isClass)(overriddenClassAndSymbol.classType) || !(0, types_1.isClass)(overrideClassAndSymbol.classType)) {
|
4046
4069
|
return;
|
4047
4070
|
}
|
@@ -4122,14 +4145,16 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4122
4145
|
}
|
4123
4146
|
let overriddenTDEntry;
|
4124
4147
|
if (overriddenClassAndSymbol.classType.details.typedDictEntries) {
|
4125
|
-
overriddenTDEntry =
|
4148
|
+
overriddenTDEntry =
|
4149
|
+
(_b = (_a = overriddenClassAndSymbol.classType.details.typedDictEntries.knownItems.get(memberName)) !== null && _a !== void 0 ? _a : overriddenClassAndSymbol.classType.details.typedDictEntries.extraItems) !== null && _b !== void 0 ? _b : (0, typedDicts_1.getEffectiveExtraItemsEntryType)(this._evaluator, overriddenClassAndSymbol.classType);
|
4126
4150
|
if (overriddenTDEntry === null || overriddenTDEntry === void 0 ? void 0 : overriddenTDEntry.isReadOnly) {
|
4127
4151
|
isInvariant = false;
|
4128
4152
|
}
|
4129
4153
|
}
|
4130
4154
|
let overrideTDEntry;
|
4131
4155
|
if (overrideClassAndSymbol.classType.details.typedDictEntries) {
|
4132
|
-
overrideTDEntry =
|
4156
|
+
overrideTDEntry =
|
4157
|
+
(_d = (_c = overrideClassAndSymbol.classType.details.typedDictEntries.knownItems.get(memberName)) !== null && _c !== void 0 ? _c : overrideClassAndSymbol.classType.details.typedDictEntries.extraItems) !== null && _d !== void 0 ? _d : (0, typedDicts_1.getEffectiveExtraItemsEntryType)(this._evaluator, overrideClassAndSymbol.classType);
|
4133
4158
|
}
|
4134
4159
|
if (!this._evaluator.assignType(overriddenType, childOverrideType !== null && childOverrideType !== void 0 ? childOverrideType : overrideType,
|
4135
4160
|
/* diag */ undefined,
|
@@ -4222,6 +4247,84 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4222
4247
|
}
|
4223
4248
|
});
|
4224
4249
|
}
|
4250
|
+
// For a TypedDict class that derives from another TypedDict class
|
4251
|
+
// that is closed, verify that any new keys are compatible with the
|
4252
|
+
// base class.
|
4253
|
+
_validateTypedDictOverrides(classType) {
|
4254
|
+
if (!types_1.ClassType.isTypedDictClass(classType)) {
|
4255
|
+
return;
|
4256
|
+
}
|
4257
|
+
const typedDictEntries = (0, typedDicts_1.getTypedDictMembersForClass)(this._evaluator, classType, /* allowNarrowed */ false);
|
4258
|
+
for (const baseClass of classType.details.baseClasses) {
|
4259
|
+
const diag = new diagnostic_1.DiagnosticAddendum();
|
4260
|
+
if (!(0, types_1.isClass)(baseClass) ||
|
4261
|
+
!types_1.ClassType.isTypedDictClass(baseClass) ||
|
4262
|
+
!types_1.ClassType.isTypedDictEffectivelyClosed(baseClass)) {
|
4263
|
+
continue;
|
4264
|
+
}
|
4265
|
+
const baseTypedDictEntries = (0, typedDicts_1.getTypedDictMembersForClass)(this._evaluator, baseClass,
|
4266
|
+
/* allowNarrowed */ false);
|
4267
|
+
const typeVarContext = (0, typeUtils_1.buildTypeVarContextFromSpecializedClass)(baseClass);
|
4268
|
+
const baseExtraItemsType = baseTypedDictEntries.extraItems
|
4269
|
+
? (0, typeUtils_1.applySolvedTypeVars)(baseTypedDictEntries.extraItems.valueType, typeVarContext)
|
4270
|
+
: types_1.UnknownType.create();
|
4271
|
+
for (const [name, entry] of typedDictEntries.knownItems) {
|
4272
|
+
const baseEntry = baseTypedDictEntries.knownItems.get(name);
|
4273
|
+
if (!baseEntry) {
|
4274
|
+
if (!baseTypedDictEntries.extraItems || (0, types_1.isNever)(baseTypedDictEntries.extraItems.valueType)) {
|
4275
|
+
diag.addMessage(localize_1.LocAddendum.typedDictClosedExtraNotAllowed().format({
|
4276
|
+
name,
|
4277
|
+
}));
|
4278
|
+
}
|
4279
|
+
else if (!this._evaluator.assignType(baseExtraItemsType, entry.valueType,
|
4280
|
+
/* diag */ undefined,
|
4281
|
+
/* destTypeVarContext */ undefined,
|
4282
|
+
/* srcTypeVarContext */ undefined, !baseTypedDictEntries.extraItems.isReadOnly
|
4283
|
+
? 1 /* AssignTypeFlags.EnforceInvariance */
|
4284
|
+
: 0 /* AssignTypeFlags.Default */)) {
|
4285
|
+
diag.addMessage(localize_1.LocAddendum.typedDictClosedExtraTypeMismatch().format({
|
4286
|
+
name,
|
4287
|
+
type: this._evaluator.printType(entry.valueType),
|
4288
|
+
}));
|
4289
|
+
}
|
4290
|
+
else if (!baseTypedDictEntries.extraItems.isReadOnly && entry.isRequired) {
|
4291
|
+
diag.addMessage(localize_1.LocAddendum.typedDictClosedFieldNotRequired().format({
|
4292
|
+
name,
|
4293
|
+
}));
|
4294
|
+
}
|
4295
|
+
}
|
4296
|
+
}
|
4297
|
+
if (typedDictEntries.extraItems && baseTypedDictEntries.extraItems) {
|
4298
|
+
if (!this._evaluator.assignType(baseExtraItemsType, typedDictEntries.extraItems.valueType,
|
4299
|
+
/* diag */ undefined,
|
4300
|
+
/* destTypeVarContext */ undefined,
|
4301
|
+
/* srcTypeVarContext */ undefined, !baseTypedDictEntries.extraItems.isReadOnly
|
4302
|
+
? 1 /* AssignTypeFlags.EnforceInvariance */
|
4303
|
+
: 0 /* AssignTypeFlags.Default */)) {
|
4304
|
+
diag.addMessage(localize_1.LocAddendum.typedDictClosedExtraTypeMismatch().format({
|
4305
|
+
name: '__extra_items__',
|
4306
|
+
type: this._evaluator.printType(typedDictEntries.extraItems.valueType),
|
4307
|
+
}));
|
4308
|
+
}
|
4309
|
+
}
|
4310
|
+
if (!diag.isEmpty() && classType.details.declaration) {
|
4311
|
+
const declNode = (0, declarationUtils_1.getNameNodeForDeclaration)(classType.details.declaration);
|
4312
|
+
if (declNode) {
|
4313
|
+
if (baseTypedDictEntries.extraItems) {
|
4314
|
+
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.LocMessage.typedDictClosedExtras().format({
|
4315
|
+
name: baseClass.details.name,
|
4316
|
+
type: this._evaluator.printType(baseExtraItemsType),
|
4317
|
+
}) + diag.getString(), declNode);
|
4318
|
+
}
|
4319
|
+
else {
|
4320
|
+
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.LocMessage.typedDictClosedNoExtras().format({
|
4321
|
+
name: baseClass.details.name,
|
4322
|
+
}) + diag.getString(), declNode);
|
4323
|
+
}
|
4324
|
+
}
|
4325
|
+
}
|
4326
|
+
}
|
4327
|
+
}
|
4225
4328
|
// Validates that any overridden methods or variables contain the same
|
4226
4329
|
// types as the original method. Also marks the class as abstract if one
|
4227
4330
|
// or more abstract methods are not overridden.
|
@@ -4341,7 +4444,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4341
4444
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.overriddenMethodNotFound().format({ name: funcNode.name.value }), funcNode.name);
|
4342
4445
|
}
|
4343
4446
|
_validateBaseClassOverride(baseClassAndSymbol, overrideSymbol, overrideType, childClassType, memberName) {
|
4344
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
4447
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
4345
4448
|
if (!(0, types_1.isInstantiableClass)(baseClassAndSymbol.classType)) {
|
4346
4449
|
return;
|
4347
4450
|
}
|
@@ -4533,15 +4636,28 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4533
4636
|
}
|
4534
4637
|
}
|
4535
4638
|
let overriddenTDEntry;
|
4536
|
-
if (baseClass.details.typedDictEntries) {
|
4537
|
-
overriddenTDEntry = baseClass.details.typedDictEntries.get(memberName);
|
4538
|
-
if (overriddenTDEntry === null || overriddenTDEntry === void 0 ? void 0 : overriddenTDEntry.isReadOnly) {
|
4539
|
-
isInvariant = false;
|
4540
|
-
}
|
4541
|
-
}
|
4542
4639
|
let overrideTDEntry;
|
4543
|
-
if (
|
4544
|
-
|
4640
|
+
if (!overrideSymbol.isIgnoredForProtocolMatch()) {
|
4641
|
+
if (baseClass.details.typedDictEntries) {
|
4642
|
+
overriddenTDEntry =
|
4643
|
+
(_e = (_d = baseClass.details.typedDictEntries.knownItems.get(memberName)) !== null && _d !== void 0 ? _d : baseClass.details.typedDictEntries.extraItems) !== null && _e !== void 0 ? _e : (0, typedDicts_1.getEffectiveExtraItemsEntryType)(this._evaluator, baseClass);
|
4644
|
+
if (overriddenTDEntry === null || overriddenTDEntry === void 0 ? void 0 : overriddenTDEntry.isReadOnly) {
|
4645
|
+
isInvariant = false;
|
4646
|
+
}
|
4647
|
+
}
|
4648
|
+
if (childClassType.details.typedDictEntries) {
|
4649
|
+
// Exempt __extra_items__ here. We'll check this separately
|
4650
|
+
// in _validateTypedDictOverrides. If we don't skip it here,
|
4651
|
+
// redundant errors will be produced.
|
4652
|
+
if (types_1.ClassType.isTypedDictMarkedClosed(childClassType) && memberName === '__extra_items__') {
|
4653
|
+
overrideTDEntry = overriddenTDEntry;
|
4654
|
+
overrideType = baseType;
|
4655
|
+
}
|
4656
|
+
else {
|
4657
|
+
overrideTDEntry =
|
4658
|
+
(_g = (_f = childClassType.details.typedDictEntries.knownItems.get(memberName)) !== null && _f !== void 0 ? _f : childClassType.details.typedDictEntries.extraItems) !== null && _g !== void 0 ? _g : (0, typedDicts_1.getEffectiveExtraItemsEntryType)(this._evaluator, childClassType);
|
4659
|
+
}
|
4660
|
+
}
|
4545
4661
|
}
|
4546
4662
|
let diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
4547
4663
|
if (!this._evaluator.assignType(baseType, overrideType, diagAddendum,
|
@@ -4558,7 +4674,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4558
4674
|
const diag = this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.LocMessage.symbolOverridden().format({
|
4559
4675
|
name: memberName,
|
4560
4676
|
className: baseClass.details.name,
|
4561
|
-
}) + diagAddendum.getString(), (
|
4677
|
+
}) + diagAddendum.getString(), (_h = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _h !== void 0 ? _h : lastDecl.node);
|
4562
4678
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4563
4679
|
if (diag && origDecl) {
|
4564
4680
|
diag.addRelatedInfo(localize_1.LocAddendum.overriddenSymbol(), origDecl.uri, origDecl.range);
|
@@ -4579,14 +4695,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4579
4695
|
const message = overrideTDEntry.isRequired
|
4580
4696
|
? localize_1.LocMessage.typedDictFieldRequiredRedefinition
|
4581
4697
|
: localize_1.LocMessage.typedDictFieldNotRequiredRedefinition;
|
4582
|
-
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, message().format({ name: memberName }), (
|
4698
|
+
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, message().format({ name: memberName }), (_j = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _j !== void 0 ? _j : lastDecl.node);
|
4583
4699
|
}
|
4584
4700
|
// Make sure that the derived class isn't marking a previously writable
|
4585
4701
|
// entry as read-only.
|
4586
4702
|
if (!overriddenTDEntry.isReadOnly && overrideTDEntry.isReadOnly) {
|
4587
4703
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictFieldReadOnlyRedefinition().format({
|
4588
4704
|
name: memberName,
|
4589
|
-
}), (
|
4705
|
+
}), (_k = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _k !== void 0 ? _k : lastDecl.node);
|
4590
4706
|
}
|
4591
4707
|
}
|
4592
4708
|
// Verify that there is not a Final mismatch.
|
@@ -4596,7 +4712,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4596
4712
|
const diag = this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.LocMessage.variableFinalOverride().format({
|
4597
4713
|
name: memberName,
|
4598
4714
|
className: baseClass.details.name,
|
4599
|
-
}), (
|
4715
|
+
}), (_l = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _l !== void 0 ? _l : lastDecl.node);
|
4600
4716
|
if (diag) {
|
4601
4717
|
diag.addRelatedInfo(localize_1.LocAddendum.overriddenSymbol(), overrideFinalVarDecl.uri, overrideFinalVarDecl.range);
|
4602
4718
|
}
|
@@ -4625,7 +4741,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4625
4741
|
const diag = this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, unformattedMessage.format({
|
4626
4742
|
name: memberName,
|
4627
4743
|
className: baseClass.details.name,
|
4628
|
-
}), (
|
4744
|
+
}), (_m = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _m !== void 0 ? _m : lastDecl.node);
|
4629
4745
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4630
4746
|
if (diag && origDecl) {
|
4631
4747
|
diag.addRelatedInfo(localize_1.LocAddendum.overriddenSymbol(), origDecl.uri, origDecl.range);
|
@@ -4999,33 +5115,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4999
5115
|
}
|
5000
5116
|
});
|
5001
5117
|
}
|
5002
|
-
_checkRegions() {
|
5003
|
-
const regionComments = (0, regions_1.getRegionComments)(this._parseResults);
|
5004
|
-
const regionStack = [];
|
5005
|
-
regionComments.forEach((regionComment) => {
|
5006
|
-
if (regionComment.type === 0 /* RegionCommentType.Region */) {
|
5007
|
-
regionStack.push(regionComment);
|
5008
|
-
}
|
5009
|
-
else {
|
5010
|
-
if (regionStack.length > 0) {
|
5011
|
-
regionStack.pop();
|
5012
|
-
}
|
5013
|
-
else {
|
5014
|
-
this._addDiagnosticForRegionComment(regionComment, localize_1.LocMessage.unmatchedEndregionComment());
|
5015
|
-
}
|
5016
|
-
}
|
5017
|
-
});
|
5018
|
-
regionStack.forEach((regionComment) => {
|
5019
|
-
this._addDiagnosticForRegionComment(regionComment, localize_1.LocMessage.unmatchedRegionComment());
|
5020
|
-
});
|
5021
|
-
}
|
5022
|
-
_addDiagnosticForRegionComment(regionComment, message) {
|
5023
|
-
return this._evaluator.addDiagnosticForTextRange(this._fileInfo, 'error', '', message, {
|
5024
|
-
// extend range to include # character
|
5025
|
-
start: regionComment.comment.start - 1,
|
5026
|
-
length: regionComment.comment.length + 1,
|
5027
|
-
});
|
5028
|
-
}
|
5029
5118
|
}
|
5030
5119
|
exports.Checker = Checker;
|
5031
5120
|
//# sourceMappingURL=checker.js.map
|