@zzzen/pyright-internal 1.2.0-dev.20260823 → 1.2.0-dev.20260906

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 (149) hide show
  1. package/dist/analyzer/analyzerNodeInfo.d.ts +4 -0
  2. package/dist/analyzer/analyzerNodeInfo.js +29 -8
  3. package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
  4. package/dist/analyzer/backgroundAnalysisProgram.d.ts +2 -1
  5. package/dist/analyzer/backgroundAnalysisProgram.js +4 -8
  6. package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
  7. package/dist/analyzer/checker.js +31 -25
  8. package/dist/analyzer/checker.js.map +1 -1
  9. package/dist/analyzer/constructorTransform.js +8 -0
  10. package/dist/analyzer/constructorTransform.js.map +1 -1
  11. package/dist/analyzer/dataClasses.js +9 -3
  12. package/dist/analyzer/dataClasses.js.map +1 -1
  13. package/dist/analyzer/parseTreeUtils.js +12 -13
  14. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  15. package/dist/analyzer/program.js +4 -1
  16. package/dist/analyzer/program.js.map +1 -1
  17. package/dist/analyzer/sentinel.d.ts +2 -2
  18. package/dist/analyzer/sentinel.js +3 -3
  19. package/dist/analyzer/sentinel.js.map +1 -1
  20. package/dist/analyzer/service.d.ts +8 -11
  21. package/dist/analyzer/service.js +27 -96
  22. package/dist/analyzer/service.js.map +1 -1
  23. package/dist/analyzer/sourceFile.js +1 -0
  24. package/dist/analyzer/sourceFile.js.map +1 -1
  25. package/dist/analyzer/sourceFileInfo.d.ts +1 -0
  26. package/dist/analyzer/sourceFileInfo.js +3 -0
  27. package/dist/analyzer/sourceFileInfo.js.map +1 -1
  28. package/dist/analyzer/typeEvaluator.js +93 -32
  29. package/dist/analyzer/typeEvaluator.js.map +1 -1
  30. package/dist/analyzer/typeGuards.js +133 -10
  31. package/dist/analyzer/typeGuards.js.map +1 -1
  32. package/dist/analyzer/typeStubGeneration.d.ts +64 -0
  33. package/dist/analyzer/typeStubGeneration.js +226 -0
  34. package/dist/analyzer/typeStubGeneration.js.map +1 -0
  35. package/dist/analyzer/typeStubMessages.d.ts +4 -0
  36. package/dist/analyzer/typeStubMessages.js +25 -0
  37. package/dist/analyzer/typeStubMessages.js.map +1 -0
  38. package/dist/analyzer/typeStubOutput.d.ts +9 -0
  39. package/dist/analyzer/typeStubOutput.js +52 -0
  40. package/dist/analyzer/typeStubOutput.js.map +1 -0
  41. package/dist/analyzer/typeStubRenderer.d.ts +5 -0
  42. package/dist/analyzer/{typeStubWriter.js → typeStubRenderer.js} +11 -93
  43. package/dist/analyzer/typeStubRenderer.js.map +1 -0
  44. package/dist/analyzer/typeUtils.d.ts +1 -0
  45. package/dist/analyzer/typeUtils.js +112 -0
  46. package/dist/analyzer/typeUtils.js.map +1 -1
  47. package/dist/analyzer/types.d.ts +2 -0
  48. package/dist/analyzer/types.js +84 -58
  49. package/dist/analyzer/types.js.map +1 -1
  50. package/dist/backgroundAnalysisBase.d.ts +5 -4
  51. package/dist/backgroundAnalysisBase.js +11 -19
  52. package/dist/backgroundAnalysisBase.js.map +1 -1
  53. package/dist/commands/createTypeStub.d.ts +2 -6
  54. package/dist/commands/createTypeStub.js +14 -27
  55. package/dist/commands/createTypeStub.js.map +1 -1
  56. package/dist/common/commandLineOptions.d.ts +0 -1
  57. package/dist/common/commandLineOptions.js.map +1 -1
  58. package/dist/common/extensibility.d.ts +1 -0
  59. package/dist/common/extensibility.js.map +1 -1
  60. package/dist/languageServerBase.d.ts +1 -1
  61. package/dist/languageServerBase.js +2 -2
  62. package/dist/languageServerBase.js.map +1 -1
  63. package/dist/languageService/analyzerServiceExecutor.d.ts +1 -3
  64. package/dist/languageService/analyzerServiceExecutor.js +8 -28
  65. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  66. package/dist/languageService/fileWatcherDynamicFeature.d.ts +6 -4
  67. package/dist/languageService/fileWatcherDynamicFeature.js +19 -15
  68. package/dist/languageService/fileWatcherDynamicFeature.js.map +1 -1
  69. package/dist/languageService/hoverProvider.d.ts +1 -1
  70. package/dist/languageService/hoverProvider.js +13 -8
  71. package/dist/languageService/hoverProvider.js.map +1 -1
  72. package/dist/languageService/tooltipUtils.d.ts +2 -1
  73. package/dist/languageService/tooltipUtils.js +15 -17
  74. package/dist/languageService/tooltipUtils.js.map +1 -1
  75. package/dist/localization/localize.d.ts +1 -0
  76. package/dist/localization/localize.js +1 -0
  77. package/dist/localization/localize.js.map +1 -1
  78. package/dist/localization/package.nls.cs.json +4 -0
  79. package/dist/localization/package.nls.de.json +4 -0
  80. package/dist/localization/package.nls.en-us.json +1 -0
  81. package/dist/localization/package.nls.es.json +4 -0
  82. package/dist/localization/package.nls.fr.json +4 -0
  83. package/dist/localization/package.nls.it.json +4 -0
  84. package/dist/localization/package.nls.ja.json +4 -0
  85. package/dist/localization/package.nls.ko.json +4 -0
  86. package/dist/localization/package.nls.pl.json +4 -0
  87. package/dist/localization/package.nls.pt-br.json +4 -0
  88. package/dist/localization/package.nls.qps-ploc.json +4 -0
  89. package/dist/localization/package.nls.ru.json +4 -0
  90. package/dist/localization/package.nls.tr.json +4 -0
  91. package/dist/localization/package.nls.zh-cn.json +4 -0
  92. package/dist/localization/package.nls.zh-tw.json +4 -0
  93. package/dist/parser/parser.js +7 -1
  94. package/dist/parser/parser.js.map +1 -1
  95. package/dist/parser/tokenizer.js +3 -5
  96. package/dist/parser/tokenizer.js.map +1 -1
  97. package/dist/pyright.js +30 -17
  98. package/dist/pyright.js.map +1 -1
  99. package/dist/tests/analyzerNodeInfo.test.js +32 -0
  100. package/dist/tests/analyzerNodeInfo.test.js.map +1 -1
  101. package/dist/tests/config.test.js +0 -1
  102. package/dist/tests/config.test.js.map +1 -1
  103. package/dist/tests/fourslash/hover.builtinDocstrings.fourslash.js +5 -5
  104. package/dist/tests/fourslash/hover.docFromSrc.stubs-package.fourslash.js +0 -1
  105. package/dist/tests/fourslash/hover.docFromSrc.stubs-package.fourslash.js.map +1 -1
  106. package/dist/tests/fourslash/hover.fourslash.js +1 -1
  107. package/dist/tests/fourslash/hover.import.django.view.fourslash.js +1 -1
  108. package/dist/tests/fourslash/hover.plainText.fourslash.js +1 -1
  109. package/dist/tests/hoverProvider.test.js +2 -2
  110. package/dist/tests/parseTreeUtils.test.js +41 -0
  111. package/dist/tests/parseTreeUtils.test.js.map +1 -1
  112. package/dist/tests/pyrightCli.test.d.ts +1 -0
  113. package/dist/tests/pyrightCli.test.js +205 -0
  114. package/dist/tests/pyrightCli.test.js.map +1 -0
  115. package/dist/tests/service.test.js +152 -0
  116. package/dist/tests/service.test.js.map +1 -1
  117. package/dist/tests/typeEquality.test.d.ts +1 -0
  118. package/dist/tests/typeEquality.test.js +95 -0
  119. package/dist/tests/typeEquality.test.js.map +1 -0
  120. package/dist/tests/typeEvaluator1.test.js +11 -0
  121. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  122. package/dist/tests/typeEvaluator2.test.js +4 -0
  123. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  124. package/dist/tests/typeEvaluator3.test.js +8 -0
  125. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  126. package/dist/tests/typeEvaluator4.test.js +4 -0
  127. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  128. package/dist/tests/typeEvaluator5.test.js +1 -1
  129. package/dist/tests/typeEvaluator6.test.js +5 -1
  130. package/dist/tests/typeEvaluator6.test.js.map +1 -1
  131. package/dist/tests/typeEvaluator8.test.js +4 -0
  132. package/dist/tests/typeEvaluator8.test.js.map +1 -1
  133. package/dist/tests/typeServer/stubGenerator.test.d.ts +1 -0
  134. package/dist/tests/typeServer/stubGenerator.test.js +73 -0
  135. package/dist/tests/typeServer/stubGenerator.test.js.map +1 -0
  136. package/dist/tests/typeStubGeneration.test.d.ts +1 -0
  137. package/dist/tests/typeStubGeneration.test.js +397 -0
  138. package/dist/tests/typeStubGeneration.test.js.map +1 -0
  139. package/dist/tests/typeStubOutput.test.d.ts +1 -0
  140. package/dist/tests/typeStubOutput.test.js +136 -0
  141. package/dist/tests/typeStubOutput.test.js.map +1 -0
  142. package/dist/tests/typeUtils.test.d.ts +1 -0
  143. package/dist/tests/typeUtils.test.js +133 -0
  144. package/dist/tests/typeUtils.test.js.map +1 -0
  145. package/dist/typeServer/stubGenerator.js +32 -7
  146. package/dist/typeServer/stubGenerator.js.map +1 -1
  147. package/package.json +1 -1
  148. package/dist/analyzer/typeStubWriter.d.ts +0 -17
  149. package/dist/analyzer/typeStubWriter.js.map +0 -1
@@ -117,6 +117,7 @@ exports.computeMroLinearization = computeMroLinearization;
117
117
  exports.getDeclaringModulesForType = getDeclaringModulesForType;
118
118
  exports.convertTypeToParamSpecValue = convertTypeToParamSpecValue;
119
119
  exports.simplifyFunctionToParamSpec = simplifyFunctionToParamSpec;
120
+ exports.transformTypePair = transformTypePair;
120
121
  const collectionUtils_1 = require("../common/collectionUtils");
121
122
  const debug_1 = require("../common/debug");
122
123
  const constraintSolution_1 = require("./constraintSolution");
@@ -2712,6 +2713,117 @@ function simplifyFunctionToParamSpec(type) {
2712
2713
  }
2713
2714
  return type;
2714
2715
  }
2716
+ // Recursively transforms two structurally-aligned type trees. The callback
2717
+ // decides whether an aligned node should be replaced; this function owns only
2718
+ // the traversal and cloning needed to preserve the source tree's shape.
2719
+ function transformTypePair(sourceType, targetType, transformNode) {
2720
+ return transformTypePairRecursive(sourceType, targetType, transformNode, new Set(), 0);
2721
+ }
2722
+ function transformTypePairRecursive(sourceType, targetType, transformNode, pendingTypes, recursionCount) {
2723
+ const replacementType = transformNode(sourceType, targetType);
2724
+ if (replacementType) {
2725
+ return replacementType;
2726
+ }
2727
+ if (recursionCount > types_1.maxTypeRecursionCount || pendingTypes.has(sourceType)) {
2728
+ return sourceType;
2729
+ }
2730
+ pendingTypes.add(sourceType);
2731
+ try {
2732
+ if ((0, types_1.isFunction)(sourceType) && (0, types_1.isFunction)(targetType)) {
2733
+ if (sourceType.shared.parameters.length !== targetType.shared.parameters.length) {
2734
+ return sourceType;
2735
+ }
2736
+ const parameterTypes = sourceType.shared.parameters.map((_, index) => transformTypePairRecursive(types_1.FunctionType.getParamType(sourceType, index), types_1.FunctionType.getParamType(targetType, index), transformNode, pendingTypes, recursionCount + 1));
2737
+ const parameterDefaultTypes = sourceType.shared.parameters.map((_, index) => {
2738
+ const sourceDefaultType = types_1.FunctionType.getParamDefaultType(sourceType, index);
2739
+ const targetDefaultType = types_1.FunctionType.getParamDefaultType(targetType, index);
2740
+ return sourceDefaultType && targetDefaultType
2741
+ ? transformTypePairRecursive(sourceDefaultType, targetDefaultType, transformNode, pendingTypes, recursionCount + 1)
2742
+ : sourceDefaultType;
2743
+ });
2744
+ const sourceReturnType = types_1.FunctionType.getEffectiveReturnType(sourceType);
2745
+ const targetReturnType = types_1.FunctionType.getEffectiveReturnType(targetType);
2746
+ const returnType = sourceReturnType && targetReturnType
2747
+ ? transformTypePairRecursive(sourceReturnType, targetReturnType, transformNode, pendingTypes, recursionCount + 1)
2748
+ : sourceReturnType;
2749
+ if (parameterTypes.every((type, index) => type === types_1.FunctionType.getParamType(sourceType, index)) &&
2750
+ parameterDefaultTypes.every((type, index) => type === types_1.FunctionType.getParamDefaultType(sourceType, index)) &&
2751
+ returnType === sourceReturnType) {
2752
+ return sourceType;
2753
+ }
2754
+ const transformedType = types_1.FunctionType.clone(sourceType);
2755
+ transformedType.priv.specializedTypes = {
2756
+ parameterTypes,
2757
+ parameterDefaultTypes,
2758
+ returnType,
2759
+ };
2760
+ return transformedType;
2761
+ }
2762
+ if ((0, types_1.isTypeVar)(sourceType) && (0, types_1.isTypeVar)(targetType)) {
2763
+ if (sourceType.shared.constraints.length !== targetType.shared.constraints.length) {
2764
+ return sourceType;
2765
+ }
2766
+ const constraints = sourceType.shared.constraints.map((constraint, index) => transformTypePairRecursive(constraint, targetType.shared.constraints[index], transformNode, pendingTypes, recursionCount + 1));
2767
+ const boundType = sourceType.shared.boundType && targetType.shared.boundType
2768
+ ? transformTypePairRecursive(sourceType.shared.boundType, targetType.shared.boundType, transformNode, pendingTypes, recursionCount + 1)
2769
+ : sourceType.shared.boundType;
2770
+ const defaultType = transformTypePairRecursive(sourceType.shared.defaultType, targetType.shared.defaultType, transformNode, pendingTypes, recursionCount + 1);
2771
+ if (constraints.every((type, index) => type === sourceType.shared.constraints[index]) &&
2772
+ boundType === sourceType.shared.boundType &&
2773
+ defaultType === sourceType.shared.defaultType) {
2774
+ return sourceType;
2775
+ }
2776
+ const transformedType = types_1.TypeBase.cloneType(sourceType);
2777
+ transformedType.shared = {
2778
+ ...sourceType.shared,
2779
+ constraints,
2780
+ boundType,
2781
+ defaultType,
2782
+ };
2783
+ return transformedType;
2784
+ }
2785
+ if ((0, types_1.isUnion)(sourceType) && (0, types_1.isUnion)(targetType)) {
2786
+ if (sourceType.priv.subtypes.length !== targetType.priv.subtypes.length) {
2787
+ return sourceType;
2788
+ }
2789
+ const subtypes = sourceType.priv.subtypes.map((subtype, index) => {
2790
+ const transformedSubtype = transformTypePairRecursive(subtype, targetType.priv.subtypes[index], transformNode, pendingTypes, recursionCount + 1);
2791
+ return (0, types_1.isNever)(transformedSubtype) || (0, types_1.isUnion)(transformedSubtype) ? subtype : transformedSubtype;
2792
+ });
2793
+ if (subtypes.every((type, index) => type === sourceType.priv.subtypes[index])) {
2794
+ return sourceType;
2795
+ }
2796
+ const transformedType = types_1.TypeBase.cloneType(sourceType);
2797
+ transformedType.priv.subtypes = subtypes;
2798
+ return transformedType;
2799
+ }
2800
+ if ((0, types_1.isClass)(sourceType) && (0, types_1.isClass)(targetType)) {
2801
+ if (sourceType.shared.fullName !== targetType.shared.fullName ||
2802
+ types_1.TypeBase.isInstance(sourceType) !== types_1.TypeBase.isInstance(targetType) ||
2803
+ sourceType.priv.typeArgs?.length !== targetType.priv.typeArgs?.length ||
2804
+ sourceType.priv.tupleTypeArgs?.length !== targetType.priv.tupleTypeArgs?.length) {
2805
+ return sourceType;
2806
+ }
2807
+ const typeArgs = sourceType.priv.typeArgs?.map((typeArg, index) => transformTypePairRecursive(typeArg, targetType.priv.typeArgs[index], transformNode, pendingTypes, recursionCount + 1));
2808
+ const tupleTypeArgs = sourceType.priv.tupleTypeArgs?.map((tupleTypeArg, index) => ({
2809
+ ...tupleTypeArg,
2810
+ type: transformTypePairRecursive(tupleTypeArg.type, targetType.priv.tupleTypeArgs[index].type, transformNode, pendingTypes, recursionCount + 1),
2811
+ }));
2812
+ if (!typeArgs?.some((type, index) => type !== sourceType.priv.typeArgs[index]) &&
2813
+ !tupleTypeArgs?.some((tupleTypeArg, index) => tupleTypeArg.type !== sourceType.priv.tupleTypeArgs[index].type)) {
2814
+ return sourceType;
2815
+ }
2816
+ const transformedType = types_1.TypeBase.cloneType(sourceType);
2817
+ transformedType.priv.typeArgs = typeArgs;
2818
+ transformedType.priv.tupleTypeArgs = tupleTypeArgs;
2819
+ return transformedType;
2820
+ }
2821
+ return sourceType;
2822
+ }
2823
+ finally {
2824
+ pendingTypes.delete(sourceType);
2825
+ }
2826
+ }
2715
2827
  // Recursively walks a type and calls a callback for each TypeVar, allowing
2716
2828
  // it to be replaced with something else.
2717
2829
  class TypeVarTransformer {