@zzzen/pyright-internal 1.2.0-dev.20231001 → 1.2.0-dev.20231015

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.
Files changed (171) hide show
  1. package/dist/analyzer/checker.d.ts +3 -1
  2. package/dist/analyzer/checker.js +82 -41
  3. package/dist/analyzer/checker.js.map +1 -1
  4. package/dist/analyzer/codeFlowEngine.js +11 -4
  5. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  6. package/dist/analyzer/constraintSolver.js +208 -151
  7. package/dist/analyzer/constraintSolver.js.map +1 -1
  8. package/dist/analyzer/decorators.d.ts +6 -1
  9. package/dist/analyzer/decorators.js +34 -25
  10. package/dist/analyzer/decorators.js.map +1 -1
  11. package/dist/analyzer/parseTreeUtils.d.ts +2 -1
  12. package/dist/analyzer/parseTreeUtils.js +21 -2
  13. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  14. package/dist/analyzer/program.js +7 -1
  15. package/dist/analyzer/program.js.map +1 -1
  16. package/dist/analyzer/properties.d.ts +2 -2
  17. package/dist/analyzer/properties.js +8 -2
  18. package/dist/analyzer/properties.js.map +1 -1
  19. package/dist/analyzer/protocols.js +102 -149
  20. package/dist/analyzer/protocols.js.map +1 -1
  21. package/dist/analyzer/scopeUtils.js +3 -2
  22. package/dist/analyzer/scopeUtils.js.map +1 -1
  23. package/dist/analyzer/service.js +13 -13
  24. package/dist/analyzer/service.js.map +1 -1
  25. package/dist/analyzer/sourceFile.d.ts +3 -2
  26. package/dist/analyzer/sourceFile.js +21 -7
  27. package/dist/analyzer/sourceFile.js.map +1 -1
  28. package/dist/analyzer/sourceFileInfo.d.ts +4 -4
  29. package/dist/analyzer/sourceFileInfo.js +2 -0
  30. package/dist/analyzer/sourceFileInfo.js.map +1 -1
  31. package/dist/analyzer/staticExpressions.js +2 -1
  32. package/dist/analyzer/staticExpressions.js.map +1 -1
  33. package/dist/analyzer/typeEvaluator.d.ts +2 -1
  34. package/dist/analyzer/typeEvaluator.js +171 -244
  35. package/dist/analyzer/typeEvaluator.js.map +1 -1
  36. package/dist/analyzer/typeEvaluatorTypes.d.ts +10 -2
  37. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  38. package/dist/analyzer/typeGuards.d.ts +1 -1
  39. package/dist/analyzer/typeGuards.js +127 -55
  40. package/dist/analyzer/typeGuards.js.map +1 -1
  41. package/dist/analyzer/typeUtils.d.ts +4 -1
  42. package/dist/analyzer/typeUtils.js +82 -8
  43. package/dist/analyzer/typeUtils.js.map +1 -1
  44. package/dist/analyzer/typeVarContext.d.ts +4 -1
  45. package/dist/analyzer/typeVarContext.js +7 -2
  46. package/dist/analyzer/typeVarContext.js.map +1 -1
  47. package/dist/analyzer/types.d.ts +5 -2
  48. package/dist/analyzer/types.js +25 -14
  49. package/dist/analyzer/types.js.map +1 -1
  50. package/dist/backgroundThreadBase.js +5 -1
  51. package/dist/backgroundThreadBase.js.map +1 -1
  52. package/dist/commands/dumpFileDebugInfoCommand.js +1 -1
  53. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  54. package/dist/common/configOptions.d.ts +2 -1
  55. package/dist/common/configOptions.js +9 -5
  56. package/dist/common/configOptions.js.map +1 -1
  57. package/dist/common/extensibility.d.ts +19 -8
  58. package/dist/common/extensibility.js +6 -7
  59. package/dist/common/extensibility.js.map +1 -1
  60. package/dist/common/fileSystem.d.ts +9 -4
  61. package/dist/common/fileSystem.js +8 -1
  62. package/dist/common/fileSystem.js.map +1 -1
  63. package/dist/common/pathUtils.d.ts +5 -4
  64. package/dist/common/pathUtils.js +13 -7
  65. package/dist/common/pathUtils.js.map +1 -1
  66. package/dist/common/pythonVersion.d.ts +1 -1
  67. package/dist/common/pythonVersion.js +1 -1
  68. package/dist/common/realFileSystem.d.ts +7 -1
  69. package/dist/common/realFileSystem.js +33 -37
  70. package/dist/common/realFileSystem.js.map +1 -1
  71. package/dist/common/serviceProvider.d.ts +1 -1
  72. package/dist/common/serviceProvider.js.map +1 -1
  73. package/dist/common/serviceProviderExtensions.d.ts +5 -3
  74. package/dist/common/serviceProviderExtensions.js +6 -1
  75. package/dist/common/serviceProviderExtensions.js.map +1 -1
  76. package/dist/languageServerBase.d.ts +6 -2
  77. package/dist/languageServerBase.js +31 -4
  78. package/dist/languageServerBase.js.map +1 -1
  79. package/dist/languageService/autoImporter.d.ts +1 -1
  80. package/dist/languageService/callHierarchyProvider.d.ts +0 -1
  81. package/dist/languageService/callHierarchyProvider.js +33 -16
  82. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  83. package/dist/languageService/completionProvider.d.ts +2 -2
  84. package/dist/languageService/completionProvider.js +20 -23
  85. package/dist/languageService/completionProvider.js.map +1 -1
  86. package/dist/languageService/definitionProvider.js +4 -5
  87. package/dist/languageService/definitionProvider.js.map +1 -1
  88. package/dist/languageService/documentHighlightProvider.js +5 -2
  89. package/dist/languageService/documentHighlightProvider.js.map +1 -1
  90. package/dist/languageService/documentSymbolCollector.d.ts +32 -23
  91. package/dist/languageService/documentSymbolCollector.js +170 -267
  92. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  93. package/dist/languageService/hoverProvider.js +1 -5
  94. package/dist/languageService/hoverProvider.js.map +1 -1
  95. package/dist/languageService/navigationUtils.d.ts +1 -1
  96. package/dist/languageService/navigationUtils.js +2 -2
  97. package/dist/languageService/navigationUtils.js.map +1 -1
  98. package/dist/languageService/referencesProvider.d.ts +15 -8
  99. package/dist/languageService/referencesProvider.js +41 -20
  100. package/dist/languageService/referencesProvider.js.map +1 -1
  101. package/dist/languageService/renameProvider.js +3 -3
  102. package/dist/languageService/renameProvider.js.map +1 -1
  103. package/dist/localization/localize.d.ts +21 -0
  104. package/dist/localization/localize.js +7 -0
  105. package/dist/localization/localize.js.map +1 -1
  106. package/dist/localization/package.nls.cs.json +5 -0
  107. package/dist/localization/package.nls.de.json +5 -0
  108. package/dist/localization/package.nls.en-us.json +7 -0
  109. package/dist/localization/package.nls.es.json +5 -0
  110. package/dist/localization/package.nls.fr.json +5 -0
  111. package/dist/localization/package.nls.it.json +5 -0
  112. package/dist/localization/package.nls.ja.json +5 -0
  113. package/dist/localization/package.nls.ko.json +5 -0
  114. package/dist/localization/package.nls.pl.json +5 -0
  115. package/dist/localization/package.nls.pt-br.json +5 -0
  116. package/dist/localization/package.nls.qps-ploc.json +5 -0
  117. package/dist/localization/package.nls.ru.json +5 -0
  118. package/dist/localization/package.nls.tr.json +5 -0
  119. package/dist/localization/package.nls.zh-cn.json +5 -0
  120. package/dist/localization/package.nls.zh-tw.json +5 -0
  121. package/dist/parser/stringTokenUtils.js +9 -5
  122. package/dist/parser/stringTokenUtils.js.map +1 -1
  123. package/dist/parser/tokenizer.d.ts +1 -0
  124. package/dist/parser/tokenizer.js +5 -5
  125. package/dist/parser/tokenizer.js.map +1 -1
  126. package/dist/pyright.js +2 -1
  127. package/dist/pyright.js.map +1 -1
  128. package/dist/pyrightFileSystem.d.ts +0 -1
  129. package/dist/pyrightFileSystem.js +0 -3
  130. package/dist/pyrightFileSystem.js.map +1 -1
  131. package/dist/readonlyAugmentedFileSystem.d.ts +1 -4
  132. package/dist/readonlyAugmentedFileSystem.js +0 -10
  133. package/dist/readonlyAugmentedFileSystem.js.map +1 -1
  134. package/dist/server.js +2 -1
  135. package/dist/server.js.map +1 -1
  136. package/dist/tests/checker.test.js +8 -0
  137. package/dist/tests/checker.test.js.map +1 -1
  138. package/dist/tests/config.test.js +5 -3
  139. package/dist/tests/config.test.js.map +1 -1
  140. package/dist/tests/documentSymbolCollector.test.js +8 -363
  141. package/dist/tests/documentSymbolCollector.test.js.map +1 -1
  142. package/dist/tests/fourslash/completions.indexer.keys.getitem.fourslash.js +56 -10
  143. package/dist/tests/fourslash/completions.indexer.keys.getitem.fourslash.js.map +1 -1
  144. package/dist/tests/harness/fourslash/testState.d.ts +5 -2
  145. package/dist/tests/harness/fourslash/testState.js +13 -14
  146. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  147. package/dist/tests/harness/vfs/filesystem.d.ts +2 -2
  148. package/dist/tests/importResolver.test.js +0 -9
  149. package/dist/tests/importResolver.test.js.map +1 -1
  150. package/dist/tests/pathUtils.test.js +2 -2
  151. package/dist/tests/pathUtils.test.js.map +1 -1
  152. package/dist/tests/testStateUtils.d.ts +3 -0
  153. package/dist/tests/testStateUtils.js +25 -1
  154. package/dist/tests/testStateUtils.js.map +1 -1
  155. package/dist/tests/typeEvaluator1.test.js +5 -1
  156. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  157. package/dist/tests/typeEvaluator2.test.js +13 -5
  158. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  159. package/dist/tests/typeEvaluator3.test.js +12 -4
  160. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  161. package/dist/tests/typeEvaluator4.test.js +17 -9
  162. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  163. package/dist/tests/typeEvaluator5.test.js +4 -2
  164. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  165. package/dist/workspaceFactory.d.ts +2 -1
  166. package/dist/workspaceFactory.js +3 -1
  167. package/dist/workspaceFactory.js.map +1 -1
  168. package/package.json +1 -1
  169. package/dist/tests/fourslash/showcallhierarchy.incomingCalls.overriddenFunction.fourslash.d.ts +0 -1
  170. package/dist/tests/fourslash/showcallhierarchy.incomingCalls.overriddenFunction.fourslash.js +0 -40
  171. package/dist/tests/fourslash/showcallhierarchy.incomingCalls.overriddenFunction.fourslash.js.map +0 -1
@@ -103,7 +103,9 @@ export declare class Checker extends ParseTreeWalker {
103
103
  private _validateIsInstanceCall;
104
104
  private _isTypeSupportedTypeForIsInstance;
105
105
  private _isSymbolPrivate;
106
- private _reportDeprecatedUse;
106
+ private _reportDeprecatedUseForMemberAccess;
107
+ private _reportDeprecatedUseForType;
108
+ private _reportDeprecatedDiagnostic;
107
109
  private _reportUnboundName;
108
110
  private _conditionallyReportShadowedModule;
109
111
  private _conditionallyReportShadowedImport;
@@ -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 overrides check for stub files. Many of the built-in
172
- // typeshed stub files trigger this diagnostic. Also skip the slots
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
- const yieldType = node.expression ? this._evaluator.getType(node.expression) : types_1.NoneType.createInstance();
594
- this._validateYieldType(node, yieldType || types_1.UnknownType.create());
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) {
@@ -892,7 +893,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
892
893
  }
893
894
  // Report the use of a deprecated symbol.
894
895
  const type = this._evaluator.getType(node);
895
- this._reportDeprecatedUse(node, type);
896
+ this._reportDeprecatedUseForType(node, type);
896
897
  return true;
897
898
  }
898
899
  visitDel(node) {
@@ -903,9 +904,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
903
904
  return false;
904
905
  }
905
906
  visitMemberAccess(node) {
906
- const type = this._evaluator.getType(node);
907
+ var _a;
908
+ const typeResult = this._evaluator.getTypeResult(node);
909
+ const type = (_a = typeResult === null || typeResult === void 0 ? void 0 : typeResult.type) !== null && _a !== void 0 ? _a : types_1.UnknownType.create();
907
910
  const leftExprType = this._evaluator.getType(node.leftExpression);
908
- this._reportDeprecatedUse(node.memberName, type, leftExprType && (0, types_1.isModule)(leftExprType) && leftExprType.moduleName === 'typing');
911
+ this._reportDeprecatedUseForType(node.memberName, type, leftExprType && (0, types_1.isModule)(leftExprType) && leftExprType.moduleName === 'typing');
912
+ if (typeResult === null || typeResult === void 0 ? void 0 : typeResult.memberAccessDeprecationInfo) {
913
+ this._reportDeprecatedUseForMemberAccess(node.memberName, typeResult.memberAccessDeprecationInfo);
914
+ }
909
915
  this._conditionallyReportPrivateUsage(node.memberName);
910
916
  // Walk the leftExpression but not the memberName.
911
917
  this.walk(node.leftExpression);
@@ -977,7 +983,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
977
983
  }
978
984
  }
979
985
  const type = this._evaluator.getType((_b = node.alias) !== null && _b !== void 0 ? _b : node.name);
980
- this._reportDeprecatedUse(node.name, type, isImportFromTyping);
986
+ this._reportDeprecatedUseForType(node.name, type, isImportFromTyping);
981
987
  return false;
982
988
  }
983
989
  visitModuleName(node) {
@@ -2541,7 +2547,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2541
2547
  const filterType = (varType) => {
2542
2548
  const filteredTypes = [];
2543
2549
  for (const filterType of classTypeList) {
2544
- const filterIsSuperclass = (0, typeGuards_1.isIsinstanceFilterSuperclass)(this._evaluator, varType, filterType, filterType, isInstanceCheck);
2550
+ const filterIsSuperclass = (0, typeGuards_1.isIsinstanceFilterSuperclass)(this._evaluator, varType, varType, filterType, filterType, isInstanceCheck);
2545
2551
  const filterIsSubclass = (0, typeGuards_1.isIsinstanceFilterSubclass)(this._evaluator, varType, filterType, isInstanceCheck);
2546
2552
  // Normally, a class should never be both a subclass and a
2547
2553
  // superclass. However, this can happen if one of the classes
@@ -2648,7 +2654,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2648
2654
  }
2649
2655
  break;
2650
2656
  case 5 /* Function */:
2651
- isSupported = types_1.TypeBase.isInstantiable(subtype);
2657
+ if (!types_1.TypeBase.isInstantiable(subtype) || subtype.isCallableWithTypeArgs) {
2658
+ isSupported = false;
2659
+ }
2652
2660
  break;
2653
2661
  case 9 /* Union */:
2654
2662
  isSupported = this._isTypeSupportedTypeForIsInstance(subtype, isInstanceCheck);
@@ -2677,7 +2685,35 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2677
2685
  }
2678
2686
  return false;
2679
2687
  }
2680
- _reportDeprecatedUse(node, type, isImportFromTyping = false) {
2688
+ _reportDeprecatedUseForMemberAccess(node, info) {
2689
+ let errorMessage;
2690
+ if (info.accessType === 'property') {
2691
+ if (info.accessMethod === 'get') {
2692
+ errorMessage = localize_1.Localizer.Diagnostic.deprecatedPropertyGetter().format({ name: node.value });
2693
+ }
2694
+ else if (info.accessMethod === 'set') {
2695
+ errorMessage = localize_1.Localizer.Diagnostic.deprecatedPropertySetter().format({ name: node.value });
2696
+ }
2697
+ else {
2698
+ errorMessage = localize_1.Localizer.Diagnostic.deprecatedPropertyDeleter().format({ name: node.value });
2699
+ }
2700
+ }
2701
+ else if (info.accessType === 'descriptor') {
2702
+ if (info.accessMethod === 'get') {
2703
+ errorMessage = localize_1.Localizer.Diagnostic.deprecatedDescriptorGetter().format({ name: node.value });
2704
+ }
2705
+ else if (info.accessMethod === 'set') {
2706
+ errorMessage = localize_1.Localizer.Diagnostic.deprecatedDescriptorSetter().format({ name: node.value });
2707
+ }
2708
+ else {
2709
+ errorMessage = localize_1.Localizer.Diagnostic.deprecatedDescriptorDeleter().format({ name: node.value });
2710
+ }
2711
+ }
2712
+ if (errorMessage) {
2713
+ this._reportDeprecatedDiagnostic(node, errorMessage, info.deprecationMessage);
2714
+ }
2715
+ }
2716
+ _reportDeprecatedUseForType(node, type, isImportFromTyping = false) {
2681
2717
  var _a, _b;
2682
2718
  if (!type) {
2683
2719
  return;
@@ -2765,16 +2801,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2765
2801
  }
2766
2802
  });
2767
2803
  if (errorMessage) {
2768
- const diag = new diagnostic_1.DiagnosticAddendum();
2769
- if (deprecatedMessage) {
2770
- diag.addMessage(deprecatedMessage);
2771
- }
2772
- if (this._fileInfo.diagnosticRuleSet.reportDeprecated === 'none') {
2773
- this._evaluator.addDeprecated(errorMessage + diag.getString(), node);
2774
- }
2775
- else {
2776
- this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportDeprecated, diagnosticRules_1.DiagnosticRule.reportDeprecated, errorMessage + diag.getString(), node);
2777
- }
2804
+ this._reportDeprecatedDiagnostic(node, errorMessage, deprecatedMessage);
2778
2805
  }
2779
2806
  if (this._fileInfo.diagnosticRuleSet.deprecateTypingAliases) {
2780
2807
  const deprecatedForm = (_a = deprecatedSymbols_1.deprecatedAliases.get(node.value)) !== null && _a !== void 0 ? _a : deprecatedSymbols_1.deprecatedSpecialForms.get(node.value);
@@ -2801,6 +2828,18 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2801
2828
  }
2802
2829
  }
2803
2830
  }
2831
+ _reportDeprecatedDiagnostic(node, diagnosticMessage, deprecatedMessage) {
2832
+ const diag = new diagnostic_1.DiagnosticAddendum();
2833
+ if (deprecatedMessage) {
2834
+ diag.addMessage(deprecatedMessage);
2835
+ }
2836
+ if (this._fileInfo.diagnosticRuleSet.reportDeprecated === 'none') {
2837
+ this._evaluator.addDeprecated(diagnosticMessage + diag.getString(), node);
2838
+ }
2839
+ else {
2840
+ this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportDeprecated, diagnosticRules_1.DiagnosticRule.reportDeprecated, diagnosticMessage + diag.getString(), node);
2841
+ }
2842
+ }
2804
2843
  _reportUnboundName(node) {
2805
2844
  if (this._fileInfo.diagnosticRuleSet.reportUnboundVariable === 'none') {
2806
2845
  return;
@@ -4035,7 +4074,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4035
4074
  if (memberName === '_') {
4036
4075
  return;
4037
4076
  }
4038
- const baseType = (0, typeUtils_1.partiallySpecializeType)(this._evaluator.getEffectiveTypeOfSymbol(baseClassAndSymbol.symbol), baseClassAndSymbol.classType);
4077
+ const baseClass = baseClassAndSymbol.classType;
4078
+ const childClassSelf = (0, typeUtils_1.selfSpecializeClass)(childClassType);
4079
+ const baseType = (0, typeUtils_1.partiallySpecializeType)(this._evaluator.getEffectiveTypeOfSymbol(baseClassAndSymbol.symbol), baseClass, types_1.ClassType.cloneAsInstance(childClassSelf));
4039
4080
  if ((0, types_1.isFunction)(baseType) || (0, types_1.isOverloadedFunction)(baseType)) {
4040
4081
  const diagAddendum = new diagnostic_1.DiagnosticAddendum();
4041
4082
  if ((0, types_1.isFunction)(overrideType) || (0, types_1.isOverloadedFunction)(overrideType)) {
@@ -4054,7 +4095,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4054
4095
  if (decl) {
4055
4096
  const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.incompatibleMethodOverride().format({
4056
4097
  name: memberName,
4057
- className: baseClassAndSymbol.classType.details.name,
4098
+ className: baseClass.details.name,
4058
4099
  }) + diagAddendum.getString(), decl.type === 5 /* Function */ ? decl.node.name : decl.node);
4059
4100
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4060
4101
  if (diag && origDecl) {
@@ -4070,7 +4111,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4070
4111
  if (decl && decl.type === 5 /* Function */) {
4071
4112
  const diag = this._evaluator.addError(localize_1.Localizer.Diagnostic.finalMethodOverride().format({
4072
4113
  name: memberName,
4073
- className: baseClassAndSymbol.classType.details.name,
4114
+ className: baseClass.details.name,
4074
4115
  }), decl.node.name);
4075
4116
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4076
4117
  if (diag && origDecl) {
@@ -4084,13 +4125,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4084
4125
  // Special-case overrides of methods in '_TypedDict', since
4085
4126
  // TypedDict attributes aren't manifest as attributes but rather
4086
4127
  // as named keys.
4087
- if (!types_1.ClassType.isBuiltIn(baseClassAndSymbol.classType, '_TypedDict')) {
4128
+ if (!types_1.ClassType.isBuiltIn(baseClass, '_TypedDict')) {
4088
4129
  const decls = overrideSymbol.getDeclarations();
4089
4130
  if (decls.length > 0) {
4090
4131
  const lastDecl = decls[decls.length - 1];
4091
4132
  const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.methodOverridden().format({
4092
4133
  name: memberName,
4093
- className: baseClassAndSymbol.classType.details.name,
4134
+ className: baseClass.details.name,
4094
4135
  type: this._evaluator.printType(overrideType),
4095
4136
  }), lastDecl.node);
4096
4137
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
@@ -4108,14 +4149,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4108
4149
  if (decls.length > 0) {
4109
4150
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.propertyOverridden().format({
4110
4151
  name: memberName,
4111
- className: baseClassAndSymbol.classType.details.name,
4152
+ className: baseClass.details.name,
4112
4153
  }), decls[decls.length - 1].node);
4113
4154
  }
4114
4155
  }
4115
4156
  else {
4116
4157
  const basePropFields = baseType.details.fields;
4117
4158
  const subclassPropFields = overrideType.details.fields;
4118
- const baseClassType = baseClassAndSymbol.classType;
4159
+ const baseClassType = baseClass;
4119
4160
  ['fget', 'fset', 'fdel'].forEach((methodName) => {
4120
4161
  const diagAddendum = new diagnostic_1.DiagnosticAddendum();
4121
4162
  const baseClassPropMethod = basePropFields.get(methodName);
@@ -4180,9 +4221,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4180
4221
  let isInvariant = (primaryDecl === null || primaryDecl === void 0 ? void 0 : primaryDecl.type) === 1 /* Variable */ && !primaryDecl.isFinal;
4181
4222
  // If the entry is a member of a frozen dataclass, it is immutable,
4182
4223
  // so it does not need to be invariant.
4183
- if (types_1.ClassType.isFrozenDataClass(baseClassAndSymbol.classType) &&
4184
- baseClassAndSymbol.classType.details.dataClassEntries) {
4185
- const dataclassEntry = baseClassAndSymbol.classType.details.dataClassEntries.find((entry) => entry.name === memberName);
4224
+ if (types_1.ClassType.isFrozenDataClass(baseClass) && baseClass.details.dataClassEntries) {
4225
+ const dataclassEntry = baseClass.details.dataClassEntries.find((entry) => entry.name === memberName);
4186
4226
  if (dataclassEntry) {
4187
4227
  isInvariant = false;
4188
4228
  }
@@ -4201,7 +4241,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4201
4241
  }
4202
4242
  const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.symbolOverridden().format({
4203
4243
  name: memberName,
4204
- className: baseClassAndSymbol.classType.details.name,
4244
+ className: baseClass.details.name,
4205
4245
  }) + diagAddendum.getString(), (_a = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _a !== void 0 ? _a : lastDecl.node);
4206
4246
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4207
4247
  if (diag && origDecl) {
@@ -4214,7 +4254,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4214
4254
  if (!isBaseVarFinal && overrideFinalVarDecl) {
4215
4255
  const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.variableFinalOverride().format({
4216
4256
  name: memberName,
4217
- className: baseClassAndSymbol.classType.details.name,
4257
+ className: baseClass.details.name,
4218
4258
  }), lastDecl.node);
4219
4259
  if (diag) {
4220
4260
  diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), overrideFinalVarDecl.path, overrideFinalVarDecl.range);
@@ -4243,7 +4283,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4243
4283
  : localize_1.Localizer.Diagnostic.instanceVarOverridesClassVar();
4244
4284
  const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, unformattedMessage.format({
4245
4285
  name: memberName,
4246
- className: baseClassAndSymbol.classType.details.name,
4286
+ className: baseClass.details.name,
4247
4287
  }), (_b = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _b !== void 0 ? _b : lastDecl.node);
4248
4288
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4249
4289
  if (diag && origDecl) {
@@ -4487,8 +4527,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4487
4527
  }
4488
4528
  // Determines whether a yield or yield from node is compatible with the
4489
4529
  // return type annotation of the containing function.
4490
- _validateYieldType(node, yieldType, sendType) {
4491
- var _a;
4530
+ _validateYieldType(node, yieldType, expectedDiagAddendum, sendType) {
4531
+ var _a, _b, _c, _d;
4492
4532
  const enclosingFunctionNode = ParseTreeUtils.getEnclosingFunction(node);
4493
4533
  if (!enclosingFunctionNode || !enclosingFunctionNode.returnTypeAnnotation) {
4494
4534
  return;
@@ -4529,7 +4569,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4529
4569
  const errorMessage = enclosingFunctionNode.isAsync
4530
4570
  ? localize_1.Localizer.Diagnostic.generatorAsyncReturnType()
4531
4571
  : localize_1.Localizer.Diagnostic.generatorSyncReturnType();
4532
- this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, errorMessage.format({ yieldType: this._evaluator.printType(yieldType) }) + diagAddendum.getString(), (_a = node.expression) !== null && _a !== void 0 ? _a : node);
4572
+ this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, errorMessage.format({ yieldType: this._evaluator.printType(yieldType) }) +
4573
+ ((_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);
4533
4574
  }
4534
4575
  }
4535
4576
  // Determines whether any of the except statements are unreachable because