@zzzen/pyright-internal 1.2.0-dev.20231008 → 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 (118) hide show
  1. package/dist/analyzer/checker.js +27 -24
  2. package/dist/analyzer/checker.js.map +1 -1
  3. package/dist/analyzer/codeFlowEngine.js +2 -2
  4. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  5. package/dist/analyzer/constraintSolver.js +208 -151
  6. package/dist/analyzer/constraintSolver.js.map +1 -1
  7. package/dist/analyzer/decorators.js +3 -1
  8. package/dist/analyzer/decorators.js.map +1 -1
  9. package/dist/analyzer/parseTreeUtils.d.ts +1 -1
  10. package/dist/analyzer/program.js +7 -1
  11. package/dist/analyzer/program.js.map +1 -1
  12. package/dist/analyzer/properties.d.ts +2 -2
  13. package/dist/analyzer/properties.js +4 -2
  14. package/dist/analyzer/properties.js.map +1 -1
  15. package/dist/analyzer/protocols.js +95 -148
  16. package/dist/analyzer/protocols.js.map +1 -1
  17. package/dist/analyzer/service.js +13 -13
  18. package/dist/analyzer/service.js.map +1 -1
  19. package/dist/analyzer/sourceFile.d.ts +3 -2
  20. package/dist/analyzer/sourceFile.js +21 -7
  21. package/dist/analyzer/sourceFile.js.map +1 -1
  22. package/dist/analyzer/sourceFileInfo.d.ts +4 -4
  23. package/dist/analyzer/sourceFileInfo.js +2 -0
  24. package/dist/analyzer/sourceFileInfo.js.map +1 -1
  25. package/dist/analyzer/staticExpressions.js +2 -1
  26. package/dist/analyzer/staticExpressions.js.map +1 -1
  27. package/dist/analyzer/typeEvaluator.js +24 -22
  28. package/dist/analyzer/typeEvaluator.js.map +1 -1
  29. package/dist/analyzer/typeEvaluatorTypes.d.ts +3 -2
  30. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  31. package/dist/analyzer/typeGuards.js +73 -13
  32. package/dist/analyzer/typeGuards.js.map +1 -1
  33. package/dist/analyzer/typeUtils.d.ts +4 -1
  34. package/dist/analyzer/typeUtils.js +81 -7
  35. package/dist/analyzer/typeUtils.js.map +1 -1
  36. package/dist/analyzer/typeVarContext.d.ts +4 -1
  37. package/dist/analyzer/typeVarContext.js +7 -2
  38. package/dist/analyzer/typeVarContext.js.map +1 -1
  39. package/dist/analyzer/types.d.ts +4 -2
  40. package/dist/analyzer/types.js +22 -14
  41. package/dist/analyzer/types.js.map +1 -1
  42. package/dist/backgroundThreadBase.js +5 -1
  43. package/dist/backgroundThreadBase.js.map +1 -1
  44. package/dist/common/configOptions.d.ts +2 -1
  45. package/dist/common/configOptions.js +9 -5
  46. package/dist/common/configOptions.js.map +1 -1
  47. package/dist/common/extensibility.d.ts +0 -2
  48. package/dist/common/extensibility.js.map +1 -1
  49. package/dist/common/fileSystem.d.ts +9 -4
  50. package/dist/common/fileSystem.js +8 -1
  51. package/dist/common/fileSystem.js.map +1 -1
  52. package/dist/common/pathUtils.d.ts +5 -4
  53. package/dist/common/pathUtils.js +13 -7
  54. package/dist/common/pathUtils.js.map +1 -1
  55. package/dist/common/realFileSystem.d.ts +7 -1
  56. package/dist/common/realFileSystem.js +24 -21
  57. package/dist/common/realFileSystem.js.map +1 -1
  58. package/dist/common/serviceProviderExtensions.d.ts +2 -1
  59. package/dist/common/serviceProviderExtensions.js +4 -0
  60. package/dist/common/serviceProviderExtensions.js.map +1 -1
  61. package/dist/languageServerBase.d.ts +4 -2
  62. package/dist/languageServerBase.js +3 -3
  63. package/dist/languageServerBase.js.map +1 -1
  64. package/dist/languageService/autoImporter.d.ts +1 -1
  65. package/dist/languageService/completionProvider.d.ts +2 -2
  66. package/dist/languageService/completionProvider.js +20 -23
  67. package/dist/languageService/completionProvider.js.map +1 -1
  68. package/dist/languageService/navigationUtils.d.ts +1 -1
  69. package/dist/languageService/navigationUtils.js +2 -2
  70. package/dist/languageService/navigationUtils.js.map +1 -1
  71. package/dist/languageService/referencesProvider.d.ts +9 -2
  72. package/dist/languageService/referencesProvider.js +18 -12
  73. package/dist/languageService/referencesProvider.js.map +1 -1
  74. package/dist/localization/package.nls.cs.json +1 -0
  75. package/dist/localization/package.nls.de.json +1 -0
  76. package/dist/localization/package.nls.es.json +1 -0
  77. package/dist/localization/package.nls.fr.json +1 -0
  78. package/dist/localization/package.nls.it.json +1 -0
  79. package/dist/localization/package.nls.ja.json +1 -0
  80. package/dist/localization/package.nls.ko.json +1 -0
  81. package/dist/localization/package.nls.pl.json +1 -0
  82. package/dist/localization/package.nls.pt-br.json +1 -0
  83. package/dist/localization/package.nls.qps-ploc.json +1 -0
  84. package/dist/localization/package.nls.ru.json +1 -0
  85. package/dist/localization/package.nls.tr.json +1 -0
  86. package/dist/localization/package.nls.zh-cn.json +1 -0
  87. package/dist/localization/package.nls.zh-tw.json +1 -0
  88. package/dist/pyright.js +2 -1
  89. package/dist/pyright.js.map +1 -1
  90. package/dist/pyrightFileSystem.d.ts +0 -1
  91. package/dist/pyrightFileSystem.js +0 -3
  92. package/dist/pyrightFileSystem.js.map +1 -1
  93. package/dist/readonlyAugmentedFileSystem.d.ts +1 -4
  94. package/dist/readonlyAugmentedFileSystem.js +0 -10
  95. package/dist/readonlyAugmentedFileSystem.js.map +1 -1
  96. package/dist/server.js +2 -1
  97. package/dist/server.js.map +1 -1
  98. package/dist/tests/config.test.js +5 -3
  99. package/dist/tests/config.test.js.map +1 -1
  100. package/dist/tests/fourslash/completions.indexer.keys.getitem.fourslash.js +56 -10
  101. package/dist/tests/fourslash/completions.indexer.keys.getitem.fourslash.js.map +1 -1
  102. package/dist/tests/harness/fourslash/testState.d.ts +5 -2
  103. package/dist/tests/harness/fourslash/testState.js +13 -14
  104. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  105. package/dist/tests/harness/vfs/filesystem.d.ts +2 -2
  106. package/dist/tests/importResolver.test.js +0 -9
  107. package/dist/tests/importResolver.test.js.map +1 -1
  108. package/dist/tests/pathUtils.test.js +2 -2
  109. package/dist/tests/pathUtils.test.js.map +1 -1
  110. package/dist/tests/typeEvaluator1.test.js +4 -0
  111. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  112. package/dist/tests/typeEvaluator2.test.js +4 -0
  113. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  114. package/dist/tests/typeEvaluator3.test.js +5 -1
  115. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  116. package/dist/tests/typeEvaluator4.test.js +10 -2
  117. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  118. package/package.json +1 -1
@@ -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) {
@@ -4073,7 +4074,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4073
4074
  if (memberName === '_') {
4074
4075
  return;
4075
4076
  }
4076
- 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));
4077
4080
  if ((0, types_1.isFunction)(baseType) || (0, types_1.isOverloadedFunction)(baseType)) {
4078
4081
  const diagAddendum = new diagnostic_1.DiagnosticAddendum();
4079
4082
  if ((0, types_1.isFunction)(overrideType) || (0, types_1.isOverloadedFunction)(overrideType)) {
@@ -4092,7 +4095,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4092
4095
  if (decl) {
4093
4096
  const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.incompatibleMethodOverride().format({
4094
4097
  name: memberName,
4095
- className: baseClassAndSymbol.classType.details.name,
4098
+ className: baseClass.details.name,
4096
4099
  }) + diagAddendum.getString(), decl.type === 5 /* Function */ ? decl.node.name : decl.node);
4097
4100
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4098
4101
  if (diag && origDecl) {
@@ -4108,7 +4111,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4108
4111
  if (decl && decl.type === 5 /* Function */) {
4109
4112
  const diag = this._evaluator.addError(localize_1.Localizer.Diagnostic.finalMethodOverride().format({
4110
4113
  name: memberName,
4111
- className: baseClassAndSymbol.classType.details.name,
4114
+ className: baseClass.details.name,
4112
4115
  }), decl.node.name);
4113
4116
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4114
4117
  if (diag && origDecl) {
@@ -4122,13 +4125,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4122
4125
  // Special-case overrides of methods in '_TypedDict', since
4123
4126
  // TypedDict attributes aren't manifest as attributes but rather
4124
4127
  // as named keys.
4125
- if (!types_1.ClassType.isBuiltIn(baseClassAndSymbol.classType, '_TypedDict')) {
4128
+ if (!types_1.ClassType.isBuiltIn(baseClass, '_TypedDict')) {
4126
4129
  const decls = overrideSymbol.getDeclarations();
4127
4130
  if (decls.length > 0) {
4128
4131
  const lastDecl = decls[decls.length - 1];
4129
4132
  const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.methodOverridden().format({
4130
4133
  name: memberName,
4131
- className: baseClassAndSymbol.classType.details.name,
4134
+ className: baseClass.details.name,
4132
4135
  type: this._evaluator.printType(overrideType),
4133
4136
  }), lastDecl.node);
4134
4137
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
@@ -4146,14 +4149,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4146
4149
  if (decls.length > 0) {
4147
4150
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.propertyOverridden().format({
4148
4151
  name: memberName,
4149
- className: baseClassAndSymbol.classType.details.name,
4152
+ className: baseClass.details.name,
4150
4153
  }), decls[decls.length - 1].node);
4151
4154
  }
4152
4155
  }
4153
4156
  else {
4154
4157
  const basePropFields = baseType.details.fields;
4155
4158
  const subclassPropFields = overrideType.details.fields;
4156
- const baseClassType = baseClassAndSymbol.classType;
4159
+ const baseClassType = baseClass;
4157
4160
  ['fget', 'fset', 'fdel'].forEach((methodName) => {
4158
4161
  const diagAddendum = new diagnostic_1.DiagnosticAddendum();
4159
4162
  const baseClassPropMethod = basePropFields.get(methodName);
@@ -4218,9 +4221,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4218
4221
  let isInvariant = (primaryDecl === null || primaryDecl === void 0 ? void 0 : primaryDecl.type) === 1 /* Variable */ && !primaryDecl.isFinal;
4219
4222
  // If the entry is a member of a frozen dataclass, it is immutable,
4220
4223
  // so it does not need to be invariant.
4221
- if (types_1.ClassType.isFrozenDataClass(baseClassAndSymbol.classType) &&
4222
- baseClassAndSymbol.classType.details.dataClassEntries) {
4223
- 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);
4224
4226
  if (dataclassEntry) {
4225
4227
  isInvariant = false;
4226
4228
  }
@@ -4239,7 +4241,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4239
4241
  }
4240
4242
  const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.symbolOverridden().format({
4241
4243
  name: memberName,
4242
- className: baseClassAndSymbol.classType.details.name,
4244
+ className: baseClass.details.name,
4243
4245
  }) + diagAddendum.getString(), (_a = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _a !== void 0 ? _a : lastDecl.node);
4244
4246
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4245
4247
  if (diag && origDecl) {
@@ -4252,7 +4254,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4252
4254
  if (!isBaseVarFinal && overrideFinalVarDecl) {
4253
4255
  const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.variableFinalOverride().format({
4254
4256
  name: memberName,
4255
- className: baseClassAndSymbol.classType.details.name,
4257
+ className: baseClass.details.name,
4256
4258
  }), lastDecl.node);
4257
4259
  if (diag) {
4258
4260
  diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), overrideFinalVarDecl.path, overrideFinalVarDecl.range);
@@ -4281,7 +4283,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4281
4283
  : localize_1.Localizer.Diagnostic.instanceVarOverridesClassVar();
4282
4284
  const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, unformattedMessage.format({
4283
4285
  name: memberName,
4284
- className: baseClassAndSymbol.classType.details.name,
4286
+ className: baseClass.details.name,
4285
4287
  }), (_b = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _b !== void 0 ? _b : lastDecl.node);
4286
4288
  const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
4287
4289
  if (diag && origDecl) {
@@ -4525,8 +4527,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4525
4527
  }
4526
4528
  // Determines whether a yield or yield from node is compatible with the
4527
4529
  // return type annotation of the containing function.
4528
- _validateYieldType(node, yieldType, sendType) {
4529
- var _a;
4530
+ _validateYieldType(node, yieldType, expectedDiagAddendum, sendType) {
4531
+ var _a, _b, _c, _d;
4530
4532
  const enclosingFunctionNode = ParseTreeUtils.getEnclosingFunction(node);
4531
4533
  if (!enclosingFunctionNode || !enclosingFunctionNode.returnTypeAnnotation) {
4532
4534
  return;
@@ -4567,7 +4569,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4567
4569
  const errorMessage = enclosingFunctionNode.isAsync
4568
4570
  ? localize_1.Localizer.Diagnostic.generatorAsyncReturnType()
4569
4571
  : localize_1.Localizer.Diagnostic.generatorSyncReturnType();
4570
- 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);
4571
4574
  }
4572
4575
  }
4573
4576
  // Determines whether any of the except statements are unreachable because