@zzzen/pyright-internal 1.2.0-dev.20231008 → 1.2.0-dev.20231022
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/checker.js +33 -37
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +2 -2
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +262 -168
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructors.js +3 -4
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/decorators.js +3 -1
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +1 -1
- package/dist/analyzer/patternMatching.js +4 -0
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.js +7 -1
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.d.ts +2 -2
- package/dist/analyzer/properties.js +10 -4
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.js +119 -174
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/service.js +13 -13
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +3 -2
- package/dist/analyzer/sourceFile.js +31 -11
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfo.d.ts +4 -4
- package/dist/analyzer/sourceFileInfo.js +2 -0
- package/dist/analyzer/sourceFileInfo.js.map +1 -1
- package/dist/analyzer/staticExpressions.js +2 -1
- package/dist/analyzer/staticExpressions.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +138 -123
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +4 -3
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +101 -33
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +4 -1
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +13 -2
- package/dist/analyzer/typeUtils.js +130 -51
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.d.ts +4 -1
- package/dist/analyzer/typeVarContext.js +7 -2
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/typedDicts.js +99 -27
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +6 -2
- package/dist/analyzer/types.js +49 -17
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundThreadBase.js +5 -1
- package/dist/backgroundThreadBase.js.map +1 -1
- package/dist/common/configOptions.d.ts +2 -1
- package/dist/common/configOptions.js +9 -5
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/extensibility.d.ts +0 -2
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/fileSystem.d.ts +9 -4
- package/dist/common/fileSystem.js +8 -1
- package/dist/common/fileSystem.js.map +1 -1
- package/dist/common/pathUtils.d.ts +8 -5
- package/dist/common/pathUtils.js +90 -33
- package/dist/common/pathUtils.js.map +1 -1
- package/dist/common/realFileSystem.d.ts +7 -1
- package/dist/common/realFileSystem.js +35 -22
- package/dist/common/realFileSystem.js.map +1 -1
- package/dist/common/serviceProviderExtensions.d.ts +3 -4
- package/dist/common/serviceProviderExtensions.js +3 -6
- package/dist/common/serviceProviderExtensions.js.map +1 -1
- package/dist/common/uriParser.d.ts +10 -1
- package/dist/common/uriParser.js.map +1 -1
- package/dist/languageServerBase.d.ts +4 -4
- package/dist/languageServerBase.js +3 -17
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +1 -1
- package/dist/languageService/completionProvider.d.ts +2 -2
- package/dist/languageService/completionProvider.js +20 -23
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/hoverProvider.d.ts +6 -2
- package/dist/languageService/hoverProvider.js +33 -65
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/navigationUtils.d.ts +1 -1
- package/dist/languageService/navigationUtils.js +2 -2
- package/dist/languageService/navigationUtils.js.map +1 -1
- package/dist/languageService/referencesProvider.d.ts +9 -2
- package/dist/languageService/referencesProvider.js +19 -12
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/tooltipUtils.js +1 -3
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/localization/localize.d.ts +4 -3
- package/dist/localization/localize.js +1 -1
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +7 -1
- package/dist/localization/package.nls.de.json +7 -1
- package/dist/localization/package.nls.en-us.json +1 -1
- package/dist/localization/package.nls.es.json +7 -1
- package/dist/localization/package.nls.fr.json +7 -1
- package/dist/localization/package.nls.it.json +7 -1
- package/dist/localization/package.nls.ja.json +7 -1
- package/dist/localization/package.nls.ko.json +7 -1
- package/dist/localization/package.nls.pl.json +7 -1
- package/dist/localization/package.nls.pt-br.json +7 -1
- package/dist/localization/package.nls.qps-ploc.json +7 -1
- package/dist/localization/package.nls.ru.json +7 -1
- package/dist/localization/package.nls.tr.json +7 -1
- package/dist/localization/package.nls.zh-cn.json +7 -1
- package/dist/localization/package.nls.zh-tw.json +7 -1
- package/dist/pyright.js +2 -1
- package/dist/pyright.js.map +1 -1
- package/dist/pyrightFileSystem.d.ts +1 -16
- package/dist/pyrightFileSystem.js +1 -60
- package/dist/pyrightFileSystem.js.map +1 -1
- package/dist/readonlyAugmentedFileSystem.d.ts +1 -4
- package/dist/readonlyAugmentedFileSystem.js +0 -10
- package/dist/readonlyAugmentedFileSystem.js.map +1 -1
- package/dist/server.js +2 -1
- package/dist/server.js.map +1 -1
- package/dist/tests/config.test.js +5 -3
- package/dist/tests/config.test.js.map +1 -1
- package/dist/tests/fourslash/completions.indexer.keys.getitem.fourslash.js +56 -10
- package/dist/tests/fourslash/completions.indexer.keys.getitem.fourslash.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +5 -2
- package/dist/tests/harness/fourslash/testState.js +13 -14
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/harness/vfs/filesystem.d.ts +2 -2
- package/dist/tests/harness/vfs/filesystem.js +4 -0
- package/dist/tests/harness/vfs/filesystem.js.map +1 -1
- package/dist/tests/harness/vfs/pathValidation.js +10 -1
- package/dist/tests/harness/vfs/pathValidation.js.map +1 -1
- package/dist/tests/importResolver.test.js +0 -9
- package/dist/tests/importResolver.test.js.map +1 -1
- package/dist/tests/pathUtils.test.js +2 -2
- package/dist/tests/pathUtils.test.js.map +1 -1
- package/dist/tests/pyrightFileSystem.test.js +0 -20
- package/dist/tests/pyrightFileSystem.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +4 -0
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +14 -2
- 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 +10 -2
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +7 -1
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/package.json +1 -1
package/dist/analyzer/checker.js
CHANGED
@@ -168,14 +168,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
168
168
|
// have the proper variance.
|
169
169
|
this._validateProtocolTypeParamVariance(node, classTypeResult.classType);
|
170
170
|
}
|
171
|
-
// Skip the
|
172
|
-
//
|
173
|
-
// check because class variables declared in a stub file are
|
174
|
-
// interpreted as instance variables.
|
171
|
+
// Skip the slots check because class variables declared in a stub
|
172
|
+
// file are interpreted as instance variables.
|
175
173
|
if (!this._fileInfo.isStubFile) {
|
176
|
-
this._validateBaseClassOverrides(classTypeResult.classType);
|
177
174
|
this._validateSlotsClassVarConflict(classTypeResult.classType);
|
178
175
|
}
|
176
|
+
this._validateBaseClassOverrides(classTypeResult.classType);
|
179
177
|
this._validateMultipleInheritanceBaseClasses(classTypeResult.classType, node.name);
|
180
178
|
this._validateMultipleInheritanceCompatibility(classTypeResult.classType, node.name);
|
181
179
|
this._validateConstructorConsistency(classTypeResult.classType);
|
@@ -590,8 +588,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
590
588
|
return true;
|
591
589
|
}
|
592
590
|
visitYield(node) {
|
593
|
-
|
594
|
-
|
591
|
+
var _a;
|
592
|
+
const yieldTypeResult = node.expression
|
593
|
+
? this._evaluator.getTypeResult(node.expression)
|
594
|
+
: { type: types_1.NoneType.createInstance() };
|
595
|
+
this._validateYieldType(node, (_a = yieldTypeResult === null || yieldTypeResult === void 0 ? void 0 : yieldTypeResult.type) !== null && _a !== void 0 ? _a : types_1.UnknownType.create(), yieldTypeResult === null || yieldTypeResult === void 0 ? void 0 : yieldTypeResult.expectedTypeDiagAddendum);
|
595
596
|
return true;
|
596
597
|
}
|
597
598
|
visitYieldFrom(node) {
|
@@ -619,7 +620,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
619
620
|
(_d = (_c = this._evaluator.getTypeOfIterator({ type: yieldFromType }, /* isAsync */ false, node)) === null || _c === void 0 ? void 0 : _c.type) !== null && _d !== void 0 ? _d : types_1.UnknownType.create();
|
620
621
|
}
|
621
622
|
}
|
622
|
-
this._validateYieldType(node, yieldType, sendType);
|
623
|
+
this._validateYieldType(node, yieldType, /* expectedDiagAddendum */ undefined, sendType);
|
623
624
|
return true;
|
624
625
|
}
|
625
626
|
visitRaise(node) {
|
@@ -2645,12 +2646,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2645
2646
|
}
|
2646
2647
|
break;
|
2647
2648
|
case 3 /* None */:
|
2648
|
-
|
2649
|
-
isSupported = false;
|
2650
|
-
}
|
2651
|
-
else {
|
2652
|
-
isSupported = types_1.TypeBase.isInstantiable(subtype);
|
2653
|
-
}
|
2649
|
+
isSupported = types_1.TypeBase.isInstantiable(subtype);
|
2654
2650
|
break;
|
2655
2651
|
case 5 /* Function */:
|
2656
2652
|
if (!types_1.TypeBase.isInstantiable(subtype) || subtype.isCallableWithTypeArgs) {
|
@@ -3634,8 +3630,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3634
3630
|
}
|
3635
3631
|
newMemberType = this._evaluator.bindFunctionToClassOrObject(classType, newMemberType,
|
3636
3632
|
/* memberClass */ undefined,
|
3637
|
-
/* errorNode */ undefined,
|
3638
|
-
/* recursionCount */ undefined,
|
3639
3633
|
/* treatConstructorAsClassMember */ true);
|
3640
3634
|
if (!newMemberType) {
|
3641
3635
|
return;
|
@@ -3745,10 +3739,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3745
3739
|
if (matchingMroClass && (0, types_1.isInstantiableClass)(matchingMroClass)) {
|
3746
3740
|
const matchingMroObject = types_1.ClassType.cloneAsInstance(matchingMroClass);
|
3747
3741
|
const baseClassMroObject = types_1.ClassType.cloneAsInstance(specializedBaseClassMroClass);
|
3748
|
-
// If the types match exactly, we can shortcut the remainder of the MRO chain.
|
3749
|
-
// if (isTypeSame(matchingMroObject, baseClassMroObject)) {
|
3750
|
-
// break;
|
3751
|
-
// }
|
3752
3742
|
if (!this._evaluator.assignType(matchingMroObject, baseClassMroObject)) {
|
3753
3743
|
const diag = new diagnostic_1.DiagnosticAddendum();
|
3754
3744
|
const baseClassObject = (0, typeUtils_1.convertToInstance)(baseClass);
|
@@ -4073,7 +4063,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4073
4063
|
if (memberName === '_') {
|
4074
4064
|
return;
|
4075
4065
|
}
|
4076
|
-
const
|
4066
|
+
const baseClass = baseClassAndSymbol.classType;
|
4067
|
+
const childClassSelf = (0, typeUtils_1.selfSpecializeClass)(childClassType);
|
4068
|
+
const baseType = (0, typeUtils_1.partiallySpecializeType)(this._evaluator.getEffectiveTypeOfSymbol(baseClassAndSymbol.symbol), baseClass, types_1.ClassType.cloneAsInstance(childClassSelf));
|
4077
4069
|
if ((0, types_1.isFunction)(baseType) || (0, types_1.isOverloadedFunction)(baseType)) {
|
4078
4070
|
const diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
4079
4071
|
if ((0, types_1.isFunction)(overrideType) || (0, types_1.isOverloadedFunction)(overrideType)) {
|
@@ -4083,8 +4075,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4083
4075
|
// false positives.
|
4084
4076
|
const enforceParamNameMatch = !SymbolNameUtils.isDunderName(memberName);
|
4085
4077
|
// Don't check certain magic functions or private symbols.
|
4078
|
+
// Also, skip this check if the class is a TypedDict. The methods for a TypedDict
|
4079
|
+
// are synthesized, and they can result in many overloads. We assume they
|
4080
|
+
// are correct and will not produce any errors.
|
4086
4081
|
if (!exemptMethods.some((exempt) => exempt === memberName) &&
|
4087
|
-
!SymbolNameUtils.isPrivateName(memberName)
|
4082
|
+
!SymbolNameUtils.isPrivateName(memberName) &&
|
4083
|
+
!types_1.ClassType.isTypedDictClass(childClassType)) {
|
4088
4084
|
if (!this._evaluator.validateOverrideMethod(baseType, overrideType, childClassType, diagAddendum, enforceParamNameMatch)) {
|
4089
4085
|
const decl = (0, types_1.isFunction)(overrideType) && overrideType.details.declaration
|
4090
4086
|
? overrideType.details.declaration
|
@@ -4092,7 +4088,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4092
4088
|
if (decl) {
|
4093
4089
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.incompatibleMethodOverride().format({
|
4094
4090
|
name: memberName,
|
4095
|
-
className:
|
4091
|
+
className: baseClass.details.name,
|
4096
4092
|
}) + diagAddendum.getString(), decl.type === 5 /* Function */ ? decl.node.name : decl.node);
|
4097
4093
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4098
4094
|
if (diag && origDecl) {
|
@@ -4108,7 +4104,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4108
4104
|
if (decl && decl.type === 5 /* Function */) {
|
4109
4105
|
const diag = this._evaluator.addError(localize_1.Localizer.Diagnostic.finalMethodOverride().format({
|
4110
4106
|
name: memberName,
|
4111
|
-
className:
|
4107
|
+
className: baseClass.details.name,
|
4112
4108
|
}), decl.node.name);
|
4113
4109
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4114
4110
|
if (diag && origDecl) {
|
@@ -4122,13 +4118,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4122
4118
|
// Special-case overrides of methods in '_TypedDict', since
|
4123
4119
|
// TypedDict attributes aren't manifest as attributes but rather
|
4124
4120
|
// as named keys.
|
4125
|
-
if (!types_1.ClassType.isBuiltIn(
|
4121
|
+
if (!types_1.ClassType.isBuiltIn(baseClass, '_TypedDict')) {
|
4126
4122
|
const decls = overrideSymbol.getDeclarations();
|
4127
4123
|
if (decls.length > 0) {
|
4128
4124
|
const lastDecl = decls[decls.length - 1];
|
4129
4125
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.methodOverridden().format({
|
4130
4126
|
name: memberName,
|
4131
|
-
className:
|
4127
|
+
className: baseClass.details.name,
|
4132
4128
|
type: this._evaluator.printType(overrideType),
|
4133
4129
|
}), lastDecl.node);
|
4134
4130
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
@@ -4146,14 +4142,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4146
4142
|
if (decls.length > 0) {
|
4147
4143
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.propertyOverridden().format({
|
4148
4144
|
name: memberName,
|
4149
|
-
className:
|
4145
|
+
className: baseClass.details.name,
|
4150
4146
|
}), decls[decls.length - 1].node);
|
4151
4147
|
}
|
4152
4148
|
}
|
4153
4149
|
else {
|
4154
4150
|
const basePropFields = baseType.details.fields;
|
4155
4151
|
const subclassPropFields = overrideType.details.fields;
|
4156
|
-
const baseClassType =
|
4152
|
+
const baseClassType = baseClass;
|
4157
4153
|
['fget', 'fset', 'fdel'].forEach((methodName) => {
|
4158
4154
|
const diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
4159
4155
|
const baseClassPropMethod = basePropFields.get(methodName);
|
@@ -4218,9 +4214,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4218
4214
|
let isInvariant = (primaryDecl === null || primaryDecl === void 0 ? void 0 : primaryDecl.type) === 1 /* Variable */ && !primaryDecl.isFinal;
|
4219
4215
|
// If the entry is a member of a frozen dataclass, it is immutable,
|
4220
4216
|
// so it does not need to be invariant.
|
4221
|
-
if (types_1.ClassType.isFrozenDataClass(
|
4222
|
-
|
4223
|
-
const dataclassEntry = baseClassAndSymbol.classType.details.dataClassEntries.find((entry) => entry.name === memberName);
|
4217
|
+
if (types_1.ClassType.isFrozenDataClass(baseClass) && baseClass.details.dataClassEntries) {
|
4218
|
+
const dataclassEntry = baseClass.details.dataClassEntries.find((entry) => entry.name === memberName);
|
4224
4219
|
if (dataclassEntry) {
|
4225
4220
|
isInvariant = false;
|
4226
4221
|
}
|
@@ -4239,7 +4234,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4239
4234
|
}
|
4240
4235
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.symbolOverridden().format({
|
4241
4236
|
name: memberName,
|
4242
|
-
className:
|
4237
|
+
className: baseClass.details.name,
|
4243
4238
|
}) + diagAddendum.getString(), (_a = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _a !== void 0 ? _a : lastDecl.node);
|
4244
4239
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4245
4240
|
if (diag && origDecl) {
|
@@ -4252,7 +4247,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4252
4247
|
if (!isBaseVarFinal && overrideFinalVarDecl) {
|
4253
4248
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.variableFinalOverride().format({
|
4254
4249
|
name: memberName,
|
4255
|
-
className:
|
4250
|
+
className: baseClass.details.name,
|
4256
4251
|
}), lastDecl.node);
|
4257
4252
|
if (diag) {
|
4258
4253
|
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), overrideFinalVarDecl.path, overrideFinalVarDecl.range);
|
@@ -4281,7 +4276,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4281
4276
|
: localize_1.Localizer.Diagnostic.instanceVarOverridesClassVar();
|
4282
4277
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, unformattedMessage.format({
|
4283
4278
|
name: memberName,
|
4284
|
-
className:
|
4279
|
+
className: baseClass.details.name,
|
4285
4280
|
}), (_b = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _b !== void 0 ? _b : lastDecl.node);
|
4286
4281
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4287
4282
|
if (diag && origDecl) {
|
@@ -4525,8 +4520,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4525
4520
|
}
|
4526
4521
|
// Determines whether a yield or yield from node is compatible with the
|
4527
4522
|
// return type annotation of the containing function.
|
4528
|
-
_validateYieldType(node, yieldType, sendType) {
|
4529
|
-
var _a;
|
4523
|
+
_validateYieldType(node, yieldType, expectedDiagAddendum, sendType) {
|
4524
|
+
var _a, _b, _c, _d;
|
4530
4525
|
const enclosingFunctionNode = ParseTreeUtils.getEnclosingFunction(node);
|
4531
4526
|
if (!enclosingFunctionNode || !enclosingFunctionNode.returnTypeAnnotation) {
|
4532
4527
|
return;
|
@@ -4567,7 +4562,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4567
4562
|
const errorMessage = enclosingFunctionNode.isAsync
|
4568
4563
|
? localize_1.Localizer.Diagnostic.generatorAsyncReturnType()
|
4569
4564
|
: localize_1.Localizer.Diagnostic.generatorSyncReturnType();
|
4570
|
-
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, errorMessage.format({ yieldType: this._evaluator.printType(yieldType) }) +
|
4565
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, errorMessage.format({ yieldType: this._evaluator.printType(yieldType) }) +
|
4566
|
+
((_a = expectedDiagAddendum === null || expectedDiagAddendum === void 0 ? void 0 : expectedDiagAddendum.getString()) !== null && _a !== void 0 ? _a : diagAddendum.getString()), (_b = node.expression) !== null && _b !== void 0 ? _b : node, (_d = (_c = expectedDiagAddendum === null || expectedDiagAddendum === void 0 ? void 0 : expectedDiagAddendum.getEffectiveTextRange()) !== null && _c !== void 0 ? _c : node.expression) !== null && _d !== void 0 ? _d : node);
|
4571
4567
|
}
|
4572
4568
|
}
|
4573
4569
|
// Determines whether any of the except statements are unreachable because
|