@zzzen/pyright-internal 1.2.0-dev.20230910 → 1.2.0-dev.20230917

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 (65) hide show
  1. package/dist/analyzer/binder.d.ts +1 -0
  2. package/dist/analyzer/binder.js +8 -4
  3. package/dist/analyzer/binder.js.map +1 -1
  4. package/dist/analyzer/checker.js +44 -31
  5. package/dist/analyzer/checker.js.map +1 -1
  6. package/dist/analyzer/constraintSolver.js +1 -0
  7. package/dist/analyzer/constraintSolver.js.map +1 -1
  8. package/dist/analyzer/dataClasses.js +1 -1
  9. package/dist/analyzer/dataClasses.js.map +1 -1
  10. package/dist/analyzer/declarationUtils.js +12 -2
  11. package/dist/analyzer/declarationUtils.js.map +1 -1
  12. package/dist/analyzer/decorators.js +9 -2
  13. package/dist/analyzer/decorators.js.map +1 -1
  14. package/dist/analyzer/namedTuples.js +2 -2
  15. package/dist/analyzer/namedTuples.js.map +1 -1
  16. package/dist/analyzer/parameterUtils.d.ts +2 -0
  17. package/dist/analyzer/parameterUtils.js +53 -1
  18. package/dist/analyzer/parameterUtils.js.map +1 -1
  19. package/dist/analyzer/parseTreeUtils.d.ts +1 -0
  20. package/dist/analyzer/parseTreeUtils.js +16 -2
  21. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  22. package/dist/analyzer/patternMatching.js +39 -22
  23. package/dist/analyzer/patternMatching.js.map +1 -1
  24. package/dist/analyzer/typeEvaluator.js +61 -61
  25. package/dist/analyzer/typeEvaluator.js.map +1 -1
  26. package/dist/analyzer/typeEvaluatorTypes.d.ts +3 -2
  27. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  28. package/dist/analyzer/typeGuards.d.ts +9 -0
  29. package/dist/analyzer/typeGuards.js +22 -1
  30. package/dist/analyzer/typeGuards.js.map +1 -1
  31. package/dist/analyzer/typePrinter.js +3 -2
  32. package/dist/analyzer/typePrinter.js.map +1 -1
  33. package/dist/analyzer/typeUtils.js +17 -4
  34. package/dist/analyzer/typeUtils.js.map +1 -1
  35. package/dist/analyzer/typedDicts.js +5 -5
  36. package/dist/analyzer/typedDicts.js.map +1 -1
  37. package/dist/analyzer/types.js +3 -0
  38. package/dist/analyzer/types.js.map +1 -1
  39. package/dist/common/realFileSystem.js +7 -2
  40. package/dist/common/realFileSystem.js.map +1 -1
  41. package/dist/localization/localize.d.ts +8 -4
  42. package/dist/localization/localize.js +3 -2
  43. package/dist/localization/localize.js.map +1 -1
  44. package/dist/localization/package.nls.cs.json +0 -2
  45. package/dist/localization/package.nls.de.json +0 -2
  46. package/dist/localization/package.nls.en-us.json +3 -2
  47. package/dist/localization/package.nls.es.json +0 -2
  48. package/dist/localization/package.nls.fr.json +0 -2
  49. package/dist/localization/package.nls.it.json +0 -2
  50. package/dist/localization/package.nls.ja.json +0 -2
  51. package/dist/localization/package.nls.ko.json +0 -2
  52. package/dist/localization/package.nls.pl.json +0 -2
  53. package/dist/localization/package.nls.pt-br.json +0 -2
  54. package/dist/localization/package.nls.qps-ploc.json +0 -2
  55. package/dist/localization/package.nls.ru.json +0 -2
  56. package/dist/localization/package.nls.tr.json +0 -2
  57. package/dist/localization/package.nls.zh-cn.json +0 -2
  58. package/dist/localization/package.nls.zh-tw.json +0 -2
  59. package/dist/tests/checker.test.js +2 -2
  60. package/dist/tests/checker.test.js.map +1 -1
  61. package/dist/tests/typeEvaluator2.test.js +1 -1
  62. package/dist/tests/typeEvaluator3.test.js +1 -1
  63. package/dist/tests/typeEvaluator4.test.js +4 -4
  64. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  65. package/package.json +1 -1
@@ -1897,14 +1897,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1897
1897
  // There should never be a single overload.
1898
1898
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.singleOverload().format({ name }), primaryDecl.node.name);
1899
1899
  }
1900
- overloadedFunctions.forEach((overload) => {
1901
- if (overload.details.declaration &&
1902
- !ParseTreeUtils.isFunctionSuiteEmpty(overload.details.declaration.node)) {
1903
- const diag = new diagnostic_1.DiagnosticAddendum();
1904
- diag.addMessage(localize_1.Localizer.DiagnosticAddendum.overloadWithImplementation());
1905
- this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.overloadWithImplementation().format({ name }) + diag.getString(), overload.details.declaration.node.name);
1906
- }
1907
- });
1908
1900
  // If the file is not a stub and this is the first overload,
1909
1901
  // verify that there is an implementation.
1910
1902
  if (!this._fileInfo.isStubFile && overloadedFunctions.length > 0) {
@@ -2662,27 +2654,34 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2662
2654
  // we can determine which overload(s) were used to satisfy
2663
2655
  // the call expression and determine whether any of them
2664
2656
  // are deprecated.
2657
+ let callTypeResult;
2665
2658
  const callNode = ParseTreeUtils.getCallForName(node);
2666
2659
  if (callNode) {
2667
- const callTypeResult = evaluator.getTypeResult(callNode);
2668
- if (callTypeResult &&
2669
- callTypeResult.overloadsUsedForCall &&
2670
- callTypeResult.overloadsUsedForCall.length > 0) {
2671
- callTypeResult.overloadsUsedForCall.forEach((overload) => {
2672
- if (overload.details.deprecatedMessage !== undefined) {
2673
- if (node.value === overload.details.name) {
2674
- deprecatedMessage = overload.details.deprecatedMessage;
2675
- errorMessage = getDeprecatedMessageForFunction(overload);
2676
- }
2677
- else if ((0, types_1.isInstantiableClass)(type) && overload.details.name === '__init__') {
2678
- deprecatedMessage = overload.details.deprecatedMessage;
2679
- errorMessage = localize_1.Localizer.Diagnostic.deprecatedConstructor().format({
2680
- name: type.details.name,
2681
- });
2682
- }
2660
+ callTypeResult = evaluator.getTypeResult(callNode);
2661
+ }
2662
+ else {
2663
+ const decoratorNode = ParseTreeUtils.getDecoratorForName(node);
2664
+ if (decoratorNode) {
2665
+ callTypeResult = evaluator.getTypeResultForDecorator(decoratorNode);
2666
+ }
2667
+ }
2668
+ if (callTypeResult &&
2669
+ callTypeResult.overloadsUsedForCall &&
2670
+ callTypeResult.overloadsUsedForCall.length > 0) {
2671
+ callTypeResult.overloadsUsedForCall.forEach((overload) => {
2672
+ if (overload.details.deprecatedMessage !== undefined) {
2673
+ if (node.value === overload.details.name) {
2674
+ deprecatedMessage = overload.details.deprecatedMessage;
2675
+ errorMessage = getDeprecatedMessageForFunction(overload);
2683
2676
  }
2684
- });
2685
- }
2677
+ else if ((0, types_1.isInstantiableClass)(type) && overload.details.name === '__init__') {
2678
+ deprecatedMessage = overload.details.deprecatedMessage;
2679
+ errorMessage = localize_1.Localizer.Diagnostic.deprecatedConstructor().format({
2680
+ name: type.details.name,
2681
+ });
2682
+ }
2683
+ }
2684
+ });
2686
2685
  }
2687
2686
  }
2688
2687
  (0, typeUtils_1.doForEachSubtype)(type, (subtype) => {
@@ -2699,9 +2698,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2699
2698
  }
2700
2699
  }
2701
2700
  else if ((0, types_1.isFunction)(subtype)) {
2702
- if (subtype.details.deprecatedMessage !== undefined && node.value === subtype.details.name) {
2703
- deprecatedMessage = subtype.details.deprecatedMessage;
2704
- errorMessage = getDeprecatedMessageForFunction(subtype);
2701
+ if (subtype.details.deprecatedMessage !== undefined) {
2702
+ if (!subtype.details.name || node.value === subtype.details.name) {
2703
+ deprecatedMessage = subtype.details.deprecatedMessage;
2704
+ errorMessage = getDeprecatedMessageForFunction(subtype);
2705
+ }
2705
2706
  }
2706
2707
  }
2707
2708
  else if ((0, types_1.isOverloadedFunction)(subtype)) {
@@ -4122,10 +4123,22 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4122
4123
  const decls = overrideSymbol.getDeclarations();
4123
4124
  if (decls.length > 0) {
4124
4125
  const lastDecl = decls[decls.length - 1];
4126
+ const primaryDecl = decls[0];
4125
4127
  // Verify that the override type is assignable to (same or narrower than)
4126
4128
  // the declared type of the base symbol.
4127
- const diagAddendum = new diagnostic_1.DiagnosticAddendum();
4128
- if (!this._evaluator.assignType(baseType, overrideType, diagAddendum)) {
4129
+ const isInvariant = (primaryDecl === null || primaryDecl === void 0 ? void 0 : primaryDecl.type) === 1 /* Variable */ && !primaryDecl.isFinal;
4130
+ let diagAddendum = new diagnostic_1.DiagnosticAddendum();
4131
+ if (!this._evaluator.assignType(baseType, overrideType, diagAddendum,
4132
+ /* destTypeVarContext */ undefined,
4133
+ /* srcTypeVarContext */ undefined, isInvariant ? 1 /* EnforceInvariance */ : 0 /* Default */)) {
4134
+ if (isInvariant) {
4135
+ diagAddendum = new diagnostic_1.DiagnosticAddendum();
4136
+ diagAddendum.addMessage(localize_1.Localizer.DiagnosticAddendum.overrideIsInvariant());
4137
+ diagAddendum.createAddendum().addMessage(localize_1.Localizer.DiagnosticAddendum.overrideInvariantMismatch().format({
4138
+ overrideType: this._evaluator.printType(overrideType),
4139
+ baseType: this._evaluator.printType(baseType),
4140
+ }));
4141
+ }
4129
4142
  const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.symbolOverridden().format({
4130
4143
  name: memberName,
4131
4144
  className: baseClassAndSymbol.classType.details.name,