@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
@@ -821,6 +821,14 @@ var ClassType;
821
821
  return !!(classType.shared.flags & 67108864 /* ClassTypeFlags.EnumMemberSetMayBeDynamicallyModified */);
822
822
  }
823
823
  ClassType.isEnumMemberSetMayBeDynamicallyModified = isEnumMemberSetMayBeDynamicallyModified;
824
+ function isNamedTupleClass(classType) {
825
+ return classType.shared.namedTupleEntries !== undefined;
826
+ }
827
+ ClassType.isNamedTupleClass = isNamedTupleClass;
828
+ function isDefinedAtSource(classType, fileUri, typeSourceId) {
829
+ return classType.shared.fileUri.equals(fileUri) && classType.shared.typeSourceId === typeSourceId;
830
+ }
831
+ ClassType.isDefinedAtSource = isDefinedAtSource;
824
832
  function isPropertyClass(classType) {
825
833
  return !!(classType.shared.flags & 128 /* ClassTypeFlags.PropertyClass */);
826
834
  }
@@ -2350,6 +2358,7 @@ function isTypeSame(type1, type2, options = {}, recursionCount = 0) {
2350
2358
  return true;
2351
2359
  }
2352
2360
  recursionCount++;
2361
+ const recursiveOptions = options.ignoreTypeFlags ? { ...options, ignoreTypeFlags: false } : options;
2353
2362
  if (options.honorTypeForm) {
2354
2363
  const typeForm1 = type1.props?.typeForm;
2355
2364
  const typeForm2 = type2.props?.typeForm;
@@ -2377,31 +2386,35 @@ function isTypeSame(type1, type2, options = {}, recursionCount = 0) {
2377
2386
  }
2378
2387
  if (!options.ignorePseudoGeneric || !ClassType.isPseudoGenericClass(type1)) {
2379
2388
  // Make sure the type args match.
2380
- if (type1.priv.tupleTypeArgs && classType2.priv.tupleTypeArgs) {
2381
- const type1TupleTypeArgs = type1.priv.tupleTypeArgs || [];
2382
- const type2TupleTypeArgs = classType2.priv.tupleTypeArgs || [];
2389
+ const type1TupleTypeArgs = type1.priv.tupleTypeArgs;
2390
+ const type2TupleTypeArgs = classType2.priv.tupleTypeArgs;
2391
+ if (type1TupleTypeArgs && type2TupleTypeArgs) {
2383
2392
  if (type1TupleTypeArgs.length !== type2TupleTypeArgs.length) {
2384
2393
  return false;
2385
2394
  }
2386
- for (let i = 0; i < type1TupleTypeArgs.length; i++) {
2387
- if (!isTypeSame(type1TupleTypeArgs[i].type, type2TupleTypeArgs[i].type, { ...options, ignoreTypeFlags: false }, recursionCount)) {
2388
- return false;
2389
- }
2390
- if (type1TupleTypeArgs[i].isUnbounded !== type2TupleTypeArgs[i].isUnbounded) {
2391
- return false;
2395
+ if (type1TupleTypeArgs !== type2TupleTypeArgs) {
2396
+ for (let i = 0; i < type1TupleTypeArgs.length; i++) {
2397
+ if (!isTypeSame(type1TupleTypeArgs[i].type, type2TupleTypeArgs[i].type, recursiveOptions, recursionCount)) {
2398
+ return false;
2399
+ }
2400
+ if (type1TupleTypeArgs[i].isUnbounded !== type2TupleTypeArgs[i].isUnbounded) {
2401
+ return false;
2402
+ }
2392
2403
  }
2393
2404
  }
2394
2405
  }
2395
2406
  else {
2396
- const type1TypeArgs = type1.priv.typeArgs || [];
2397
- const type2TypeArgs = classType2.priv.typeArgs || [];
2398
- const typeArgCount = Math.max(type1TypeArgs.length, type2TypeArgs.length);
2399
- for (let i = 0; i < typeArgCount; i++) {
2400
- // Assume that missing type args are "Unknown".
2401
- const typeArg1 = i < type1TypeArgs.length ? type1TypeArgs[i] : UnknownType.create();
2402
- const typeArg2 = i < type2TypeArgs.length ? type2TypeArgs[i] : UnknownType.create();
2403
- if (!isTypeSame(typeArg1, typeArg2, { ...options, ignoreTypeFlags: false }, recursionCount)) {
2404
- return false;
2407
+ const type1TypeArgs = type1.priv.typeArgs;
2408
+ const type2TypeArgs = classType2.priv.typeArgs;
2409
+ if (type1TypeArgs !== type2TypeArgs) {
2410
+ const typeArgCount = Math.max(type1TypeArgs?.length ?? 0, type2TypeArgs?.length ?? 0);
2411
+ for (let i = 0; i < typeArgCount; i++) {
2412
+ // Assume that missing type args are "Unknown".
2413
+ const typeArg1 = type1TypeArgs && i < type1TypeArgs.length ? type1TypeArgs[i] : UnknownType.create();
2414
+ const typeArg2 = type2TypeArgs && i < type2TypeArgs.length ? type2TypeArgs[i] : UnknownType.create();
2415
+ if (!isTypeSame(typeArg1, typeArg2, recursiveOptions, recursionCount)) {
2416
+ return false;
2417
+ }
2405
2418
  }
2406
2419
  }
2407
2420
  }
@@ -2437,35 +2450,43 @@ function isTypeSame(type1, type2, options = {}, recursionCount = 0) {
2437
2450
  if (FunctionType.isGradualCallableForm(type1) !== FunctionType.isGradualCallableForm(functionType2)) {
2438
2451
  return false;
2439
2452
  }
2440
- const positionOnlyIndex1 = params1.findIndex((param) => isPositionOnlySeparator(param));
2441
- const positionOnlyIndex2 = params2.findIndex((param) => isPositionOnlySeparator(param));
2442
- // Make sure the parameter details match.
2443
- for (let i = 0; i < params1.length; i++) {
2444
- const param1 = params1[i];
2445
- const param2 = params2[i];
2446
- if (param1.category !== param2.category) {
2447
- return false;
2448
- }
2449
- const isName1Relevant = positionOnlyIndex1 !== undefined && i > positionOnlyIndex1;
2450
- const isName2Relevant = positionOnlyIndex2 !== undefined && i > positionOnlyIndex2;
2451
- if (isName1Relevant !== isName2Relevant) {
2452
- return false;
2453
- }
2454
- if (isName1Relevant) {
2455
- if (param1.name !== param2.name) {
2453
+ const specializedTypes1 = type1.priv.specializedTypes;
2454
+ const specializedTypes2 = functionType2.priv.specializedTypes;
2455
+ if (type1.shared === functionType2.shared && specializedTypes1 === specializedTypes2) {
2456
+ return true;
2457
+ }
2458
+ const haveSameParamSignature = params1 === params2 && specializedTypes1?.parameterTypes === specializedTypes2?.parameterTypes;
2459
+ if (!haveSameParamSignature) {
2460
+ const positionOnlyIndex1 = params1.findIndex((param) => isPositionOnlySeparator(param));
2461
+ const positionOnlyIndex2 = params2.findIndex((param) => isPositionOnlySeparator(param));
2462
+ // Make sure the parameter details match.
2463
+ for (let i = 0; i < params1.length; i++) {
2464
+ const param1 = params1[i];
2465
+ const param2 = params2[i];
2466
+ if (param1.category !== param2.category) {
2467
+ return false;
2468
+ }
2469
+ const isName1Relevant = positionOnlyIndex1 !== undefined && i > positionOnlyIndex1;
2470
+ const isName2Relevant = positionOnlyIndex2 !== undefined && i > positionOnlyIndex2;
2471
+ if (isName1Relevant !== isName2Relevant) {
2472
+ return false;
2473
+ }
2474
+ if (isName1Relevant) {
2475
+ if (param1.name !== param2.name) {
2476
+ return false;
2477
+ }
2478
+ }
2479
+ else if (isPositionOnlySeparator(param1) && isPositionOnlySeparator(param2)) {
2480
+ continue;
2481
+ }
2482
+ else if (isKeywordOnlySeparator(param1) && isKeywordOnlySeparator(param2)) {
2483
+ continue;
2484
+ }
2485
+ const param1Type = FunctionType.getParamType(type1, i);
2486
+ const param2Type = FunctionType.getParamType(functionType2, i);
2487
+ if (!isTypeSame(param1Type, param2Type, recursiveOptions, recursionCount)) {
2456
2488
  return false;
2457
2489
  }
2458
- }
2459
- else if (isPositionOnlySeparator(param1) && isPositionOnlySeparator(param2)) {
2460
- continue;
2461
- }
2462
- else if (isKeywordOnlySeparator(param1) && isKeywordOnlySeparator(param2)) {
2463
- continue;
2464
- }
2465
- const param1Type = FunctionType.getParamType(type1, i);
2466
- const param2Type = FunctionType.getParamType(functionType2, i);
2467
- if (!isTypeSame(param1Type, param2Type, { ...options, ignoreTypeFlags: false }, recursionCount)) {
2468
- return false;
2469
2490
  }
2470
2491
  }
2471
2492
  // Make sure the return types match.
@@ -2486,7 +2507,7 @@ function isTypeSame(type1, type2, options = {}, recursionCount = 0) {
2486
2507
  if (return1Type || return2Type) {
2487
2508
  if (!return1Type ||
2488
2509
  !return2Type ||
2489
- !isTypeSame(return1Type, return2Type, { ...options, ignoreTypeFlags: false }, recursionCount)) {
2510
+ !isTypeSame(return1Type, return2Type, recursiveOptions, recursionCount)) {
2490
2511
  return false;
2491
2512
  }
2492
2513
  }
@@ -2495,6 +2516,9 @@ function isTypeSame(type1, type2, options = {}, recursionCount = 0) {
2495
2516
  case 5 /* TypeCategory.Overloaded */: {
2496
2517
  // Make sure the overload counts match.
2497
2518
  const functionType2 = type2;
2519
+ if (type1.priv._overloads === functionType2.priv._overloads) {
2520
+ return true;
2521
+ }
2498
2522
  if (type1.priv._overloads.length !== functionType2.priv._overloads.length) {
2499
2523
  return false;
2500
2524
  }
@@ -2514,6 +2538,9 @@ function isTypeSame(type1, type2, options = {}, recursionCount = 0) {
2514
2538
  if (subtypes1.length !== subtypes2.length) {
2515
2539
  return false;
2516
2540
  }
2541
+ if (subtypes1 === subtypes2) {
2542
+ return true;
2543
+ }
2517
2544
  // The types do not have a particular order, so we need to
2518
2545
  // do the comparison in an order-independent manner.
2519
2546
  const exclusionSet = new Set();
@@ -2537,7 +2564,7 @@ function isTypeSame(type1, type2, options = {}, recursionCount = 0) {
2537
2564
  // Assume that missing type args are "Any".
2538
2565
  const typeArg1 = i < type1TypeArgs.length ? type1TypeArgs[i] : AnyType.create();
2539
2566
  const typeArg2 = i < type2TypeArgs.length ? type2TypeArgs[i] : AnyType.create();
2540
- if (!isTypeSame(typeArg1, typeArg2, { ...options, ignoreTypeFlags: false }, recursionCount)) {
2567
+ if (!isTypeSame(typeArg1, typeArg2, recursiveOptions, recursionCount)) {
2541
2568
  return false;
2542
2569
  }
2543
2570
  }
@@ -2564,26 +2591,25 @@ function isTypeSame(type1, type2, options = {}, recursionCount = 0) {
2564
2591
  }
2565
2592
  const boundType1 = type1.shared.boundType;
2566
2593
  const boundType2 = type2TypeVar.shared.boundType;
2567
- if (boundType1) {
2568
- if (!boundType2 ||
2569
- !isTypeSame(boundType1, boundType2, { ...options, ignoreTypeFlags: false }, recursionCount)) {
2594
+ if (boundType1 !== boundType2) {
2595
+ if (!boundType1 || !boundType2) {
2570
2596
  return false;
2571
2597
  }
2572
- }
2573
- else {
2574
- if (boundType2) {
2598
+ if (!isTypeSame(boundType1, boundType2, recursiveOptions, recursionCount)) {
2575
2599
  return false;
2576
2600
  }
2577
2601
  }
2578
2602
  const constraints1 = type1.shared.constraints;
2579
2603
  const constraints2 = type2TypeVar.shared.constraints;
2580
- if (constraints1.length !== constraints2.length) {
2581
- return false;
2582
- }
2583
- for (let i = 0; i < constraints1.length; i++) {
2584
- if (!isTypeSame(constraints1[i], constraints2[i], { ...options, ignoreTypeFlags: false }, recursionCount)) {
2604
+ if (constraints1 !== constraints2) {
2605
+ if (constraints1.length !== constraints2.length) {
2585
2606
  return false;
2586
2607
  }
2608
+ for (let i = 0; i < constraints1.length; i++) {
2609
+ if (!isTypeSame(constraints1[i], constraints2[i], recursiveOptions, recursionCount)) {
2610
+ return false;
2611
+ }
2612
+ }
2587
2613
  }
2588
2614
  return true;
2589
2615
  }