@zzzen/pyright-internal 1.2.0-dev.20240107 → 1.2.0-dev.20240114

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 (202) hide show
  1. package/dist/analyzer/checker.d.ts +2 -0
  2. package/dist/analyzer/checker.js +64 -14
  3. package/dist/analyzer/checker.js.map +1 -1
  4. package/dist/analyzer/codeFlowEngine.js +2 -2
  5. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  6. package/dist/analyzer/constraintSolver.js +6 -0
  7. package/dist/analyzer/constraintSolver.js.map +1 -1
  8. package/dist/analyzer/dataClasses.js +2 -2
  9. package/dist/analyzer/dataClasses.js.map +1 -1
  10. package/dist/analyzer/decorators.js +9 -9
  11. package/dist/analyzer/decorators.js.map +1 -1
  12. package/dist/analyzer/importResolver.d.ts +2 -2
  13. package/dist/analyzer/importResolver.js +93 -24
  14. package/dist/analyzer/importResolver.js.map +1 -1
  15. package/dist/analyzer/operations.js +4 -3
  16. package/dist/analyzer/operations.js.map +1 -1
  17. package/dist/analyzer/parseTreeUtils.js +37 -0
  18. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  19. package/dist/analyzer/patternMatching.js +4 -4
  20. package/dist/analyzer/patternMatching.js.map +1 -1
  21. package/dist/analyzer/program.js +1 -1
  22. package/dist/analyzer/program.js.map +1 -1
  23. package/dist/analyzer/protocols.js +27 -20
  24. package/dist/analyzer/protocols.js.map +1 -1
  25. package/dist/analyzer/service.d.ts +1 -1
  26. package/dist/analyzer/service.js +7 -6
  27. package/dist/analyzer/service.js.map +1 -1
  28. package/dist/analyzer/sourceFile.d.ts +2 -2
  29. package/dist/analyzer/sourceFile.js +5 -5
  30. package/dist/analyzer/sourceFile.js.map +1 -1
  31. package/dist/analyzer/sourceFileInfoUtils.js +1 -1
  32. package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
  33. package/dist/analyzer/typeEvaluator.js +228 -133
  34. package/dist/analyzer/typeEvaluator.js.map +1 -1
  35. package/dist/analyzer/typeEvaluatorTypes.d.ts +4 -3
  36. package/dist/analyzer/typeEvaluatorTypes.js +2 -4
  37. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  38. package/dist/analyzer/typeGuards.js +14 -9
  39. package/dist/analyzer/typeGuards.js.map +1 -1
  40. package/dist/analyzer/typeUtils.d.ts +2 -1
  41. package/dist/analyzer/typeUtils.js +13 -0
  42. package/dist/analyzer/typeUtils.js.map +1 -1
  43. package/dist/analyzer/types.d.ts +9 -5
  44. package/dist/analyzer/types.js +38 -23
  45. package/dist/analyzer/types.js.map +1 -1
  46. package/dist/backgroundAnalysisBase.d.ts +12 -11
  47. package/dist/backgroundAnalysisBase.js +60 -64
  48. package/dist/backgroundAnalysisBase.js.map +1 -1
  49. package/dist/backgroundThreadBase.d.ts +6 -5
  50. package/dist/backgroundThreadBase.js +63 -60
  51. package/dist/backgroundThreadBase.js.map +1 -1
  52. package/dist/commands/quickActionCommand.js +1 -1
  53. package/dist/commands/quickActionCommand.js.map +1 -1
  54. package/dist/common/cancellationUtils.d.ts +6 -3
  55. package/dist/common/cancellationUtils.js +29 -5
  56. package/dist/common/cancellationUtils.js.map +1 -1
  57. package/dist/common/commandUtils.d.ts +2 -0
  58. package/dist/common/commandUtils.js +24 -0
  59. package/dist/common/commandUtils.js.map +1 -0
  60. package/dist/common/extensibility.d.ts +7 -6
  61. package/dist/common/extensibility.js.map +1 -1
  62. package/dist/common/fileBasedCancellationUtils.js +19 -13
  63. package/dist/common/fileBasedCancellationUtils.js.map +1 -1
  64. package/dist/common/fullAccessHost.d.ts +1 -1
  65. package/dist/common/fullAccessHost.js +2 -2
  66. package/dist/common/fullAccessHost.js.map +1 -1
  67. package/dist/common/host.d.ts +2 -2
  68. package/dist/common/host.js.map +1 -1
  69. package/dist/common/realFileSystem.js +8 -8
  70. package/dist/common/realFileSystem.js.map +1 -1
  71. package/dist/common/serviceProvider.js +8 -1
  72. package/dist/common/serviceProvider.js.map +1 -1
  73. package/dist/common/uri/baseUri.d.ts +4 -1
  74. package/dist/common/uri/baseUri.js +7 -1
  75. package/dist/common/uri/baseUri.js.map +1 -1
  76. package/dist/common/uri/emptyUri.d.ts +3 -0
  77. package/dist/common/uri/emptyUri.js +9 -0
  78. package/dist/common/uri/emptyUri.js.map +1 -1
  79. package/dist/common/uri/fileUri.d.ts +2 -0
  80. package/dist/common/uri/fileUri.js +6 -0
  81. package/dist/common/uri/fileUri.js.map +1 -1
  82. package/dist/common/uri/memoization.js +1 -1
  83. package/dist/common/uri/memoization.js.map +1 -1
  84. package/dist/common/uri/uri.d.ts +4 -1
  85. package/dist/common/uri/uri.js +5 -2
  86. package/dist/common/uri/uri.js.map +1 -1
  87. package/dist/common/uri/uriUtils.d.ts +2 -0
  88. package/dist/common/uri/uriUtils.js +18 -1
  89. package/dist/common/uri/uriUtils.js.map +1 -1
  90. package/dist/common/uri/webUri.d.ts +2 -0
  91. package/dist/common/uri/webUri.js +7 -1
  92. package/dist/common/uri/webUri.js.map +1 -1
  93. package/dist/common/workspaceEditUtils.d.ts +6 -5
  94. package/dist/common/workspaceEditUtils.js +18 -17
  95. package/dist/common/workspaceEditUtils.js.map +1 -1
  96. package/dist/languageServerBase.d.ts +1 -0
  97. package/dist/languageServerBase.js +28 -25
  98. package/dist/languageServerBase.js.map +1 -1
  99. package/dist/languageService/analyzerServiceExecutor.d.ts +1 -2
  100. package/dist/languageService/analyzerServiceExecutor.js +6 -5
  101. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  102. package/dist/languageService/autoImporter.js +3 -3
  103. package/dist/languageService/autoImporter.js.map +1 -1
  104. package/dist/languageService/callHierarchyProvider.js +9 -7
  105. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  106. package/dist/languageService/codeActionProvider.js +3 -2
  107. package/dist/languageService/codeActionProvider.js.map +1 -1
  108. package/dist/languageService/completionProvider.d.ts +2 -4
  109. package/dist/languageService/completionProvider.js +14 -18
  110. package/dist/languageService/completionProvider.js.map +1 -1
  111. package/dist/languageService/documentSymbolProvider.js +5 -4
  112. package/dist/languageService/documentSymbolProvider.js.map +1 -1
  113. package/dist/languageService/navigationUtils.js +2 -1
  114. package/dist/languageService/navigationUtils.js.map +1 -1
  115. package/dist/languageService/renameProvider.js +2 -2
  116. package/dist/languageService/renameProvider.js.map +1 -1
  117. package/dist/languageService/workspaceSymbolProvider.js +2 -1
  118. package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
  119. package/dist/localization/localize.d.ts +5 -4
  120. package/dist/localization/localize.js +3 -2
  121. package/dist/localization/localize.js.map +1 -1
  122. package/dist/localization/package.nls.cs.json +19 -4
  123. package/dist/localization/package.nls.de.json +19 -4
  124. package/dist/localization/package.nls.en-us.json +3 -2
  125. package/dist/localization/package.nls.es.json +19 -4
  126. package/dist/localization/package.nls.fr.json +18 -3
  127. package/dist/localization/package.nls.it.json +19 -4
  128. package/dist/localization/package.nls.ja.json +19 -4
  129. package/dist/localization/package.nls.ko.json +19 -4
  130. package/dist/localization/package.nls.pl.json +19 -4
  131. package/dist/localization/package.nls.pt-br.json +19 -4
  132. package/dist/localization/package.nls.qps-ploc.json +19 -4
  133. package/dist/localization/package.nls.ru.json +18 -3
  134. package/dist/localization/package.nls.tr.json +19 -4
  135. package/dist/localization/package.nls.zh-cn.json +19 -4
  136. package/dist/localization/package.nls.zh-tw.json +19 -4
  137. package/dist/parser/parser.d.ts +0 -3
  138. package/dist/parser/parser.js.map +1 -1
  139. package/dist/parser/tokenizer.d.ts +2 -4
  140. package/dist/parser/tokenizer.js +5 -6
  141. package/dist/parser/tokenizer.js.map +1 -1
  142. package/dist/parser/tokenizerTypes.d.ts +2 -2
  143. package/dist/parser/tokenizerTypes.js.map +1 -1
  144. package/dist/pyright.js +3 -3
  145. package/dist/pyright.js.map +1 -1
  146. package/dist/tests/chainedSourceFiles.test.js +8 -8
  147. package/dist/tests/chainedSourceFiles.test.js.map +1 -1
  148. package/dist/tests/completions.test.js +3 -3
  149. package/dist/tests/completions.test.js.map +1 -1
  150. package/dist/tests/config.test.js +10 -2
  151. package/dist/tests/config.test.js.map +1 -1
  152. package/dist/tests/filesystem.test.js +4 -4
  153. package/dist/tests/filesystem.test.js.map +1 -1
  154. package/dist/tests/fourSlashParser.test.js +22 -8
  155. package/dist/tests/fourSlashParser.test.js.map +1 -1
  156. package/dist/tests/fourslash/rename.multipleDecl.fourslash.d.ts +1 -1
  157. package/dist/tests/harness/fourslash/fourSlashParser.js +4 -0
  158. package/dist/tests/harness/fourslash/fourSlashParser.js.map +1 -1
  159. package/dist/tests/harness/fourslash/fourSlashTypes.d.ts +3 -0
  160. package/dist/tests/harness/fourslash/fourSlashTypes.js.map +1 -1
  161. package/dist/tests/harness/fourslash/testState.d.ts +13 -0
  162. package/dist/tests/harness/fourslash/testState.js +13 -8
  163. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  164. package/dist/tests/harness/vfs/factory.d.ts +1 -1
  165. package/dist/tests/harness/vfs/factory.js +4 -4
  166. package/dist/tests/harness/vfs/factory.js.map +1 -1
  167. package/dist/tests/importStatementUtils.test.js +1 -1
  168. package/dist/tests/importStatementUtils.test.js.map +1 -1
  169. package/dist/tests/ipythonMode.test.js +11 -12
  170. package/dist/tests/ipythonMode.test.js.map +1 -1
  171. package/dist/tests/serialization.test.d.ts +2 -0
  172. package/dist/tests/serialization.test.js +88 -0
  173. package/dist/tests/serialization.test.js.map +1 -0
  174. package/dist/tests/service.test.js +1 -1
  175. package/dist/tests/service.test.js.map +1 -1
  176. package/dist/tests/signatureHelp.test.js +2 -3
  177. package/dist/tests/signatureHelp.test.js.map +1 -1
  178. package/dist/tests/sourceFile.test.js +3 -3
  179. package/dist/tests/sourceFile.test.js.map +1 -1
  180. package/dist/tests/sourceMapperUtils.test.js +2 -2
  181. package/dist/tests/sourceMapperUtils.test.js.map +1 -1
  182. package/dist/tests/testState.test.js +1 -1
  183. package/dist/tests/testState.test.js.map +1 -1
  184. package/dist/tests/testStateUtils.js +2 -2
  185. package/dist/tests/testStateUtils.js.map +1 -1
  186. package/dist/tests/textEditUtil.test.js +1 -2
  187. package/dist/tests/textEditUtil.test.js.map +1 -1
  188. package/dist/tests/typeEvaluator1.test.js +12 -0
  189. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  190. package/dist/tests/typeEvaluator2.test.js +6 -6
  191. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  192. package/dist/tests/typeEvaluator3.test.js +6 -0
  193. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  194. package/dist/tests/typeEvaluator4.test.js +4 -4
  195. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  196. package/dist/tests/uri.test.js +30 -7
  197. package/dist/tests/uri.test.js.map +1 -1
  198. package/dist/tests/workspaceEditUtils.test.js +8 -8
  199. package/dist/tests/workspaceEditUtils.test.js.map +1 -1
  200. package/dist/workspaceFactory.js +1 -1
  201. package/dist/workspaceFactory.js.map +1 -1
  202. package/package.json +2 -1
@@ -105,6 +105,7 @@ export declare class Checker extends ParseTreeWalker {
105
105
  private _validateIsInstanceCall;
106
106
  private _validateUnsafeProtocolOverlap;
107
107
  private _isTypeSupportedTypeForIsInstance;
108
+ private _validateNotDataProtocol;
108
109
  private _isSymbolPrivate;
109
110
  private _reportDeprecatedClassProperty;
110
111
  private _reportDeprecatedUseForMemberAccess;
@@ -125,6 +126,7 @@ export declare class Checker extends ParseTreeWalker {
125
126
  private _reportDuplicateEnumMembers;
126
127
  private _validateProtocolCompatibility;
127
128
  private _validateDataClassPostInit;
129
+ private _isUnimplementedProtocolMethod;
128
130
  private _validateFinalClassNotAbstract;
129
131
  private _validateInstanceVariableInitialization;
130
132
  private _validateProtocolTypeParamVariance;
@@ -1954,6 +1954,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1954
1954
  else if ((0, types_1.isClassInstance)(exceptionType)) {
1955
1955
  const iterableType = (_b = (_a = this._evaluator.getTypeOfIterator({ type: exceptionType }, /* isAsync */ false, errorNode)) === null || _a === void 0 ? void 0 : _a.type) !== null && _b !== void 0 ? _b : types_1.UnknownType.create();
1956
1956
  resultingExceptionType = (0, typeUtils_1.mapSubtypes)(iterableType, (subtype) => {
1957
+ subtype = this._evaluator.makeTopLevelTypeVarsConcrete(subtype);
1957
1958
  if ((0, types_1.isAnyOrUnknown)(subtype) || (0, types_1.isNever)(subtype)) {
1958
1959
  return subtype;
1959
1960
  }
@@ -2553,12 +2554,15 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2553
2554
  if (!isInstanceCheck) {
2554
2555
  const diag = new diagnostic_1.DiagnosticAddendum();
2555
2556
  (0, typeUtils_1.doForEachSubtype)(arg1Type, (arg1Subtype) => {
2556
- if ((0, types_1.isInstantiableClass)(arg1Subtype) &&
2557
- types_1.ClassType.isProtocolClass(arg1Subtype) &&
2558
- !(0, protocols_1.isMethodOnlyProtocol)(arg1Subtype)) {
2559
- diag.addMessage(localize_1.Localizer.DiagnosticAddendum.dataProtocolUnsupported().format({
2560
- name: arg1Subtype.details.name,
2561
- }));
2557
+ if ((0, types_1.isClassInstance)(arg1Subtype) &&
2558
+ types_1.ClassType.isTupleClass(arg1Subtype) &&
2559
+ arg1Subtype.tupleTypeArguments) {
2560
+ arg1Subtype.tupleTypeArguments.forEach((typeArg) => {
2561
+ this._validateNotDataProtocol(typeArg.type, diag);
2562
+ });
2563
+ }
2564
+ else {
2565
+ this._validateNotDataProtocol(arg1Subtype, diag);
2562
2566
  }
2563
2567
  });
2564
2568
  if (!diag.isEmpty()) {
@@ -2761,6 +2765,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2761
2765
  (0, typeUtils_1.doForEachSubtype)(type, (subtype) => {
2762
2766
  subtype = this._evaluator.makeTopLevelTypeVarsConcrete(subtype);
2763
2767
  subtype = (0, typeUtils_1.transformPossibleRecursiveTypeAlias)(subtype);
2768
+ if (subtype.specialForm && types_1.ClassType.isBuiltIn(subtype.specialForm, 'TypeAliasType')) {
2769
+ diag.addMessage(localize_1.Localizer.DiagnosticAddendum.typeAliasInstanceCheck());
2770
+ isSupported = false;
2771
+ return;
2772
+ }
2764
2773
  switch (subtype.category) {
2765
2774
  case 2 /* TypeCategory.Any */:
2766
2775
  case 1 /* TypeCategory.Unknown */:
@@ -2809,6 +2818,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2809
2818
  });
2810
2819
  return isSupported;
2811
2820
  }
2821
+ _validateNotDataProtocol(type, diag) {
2822
+ if ((0, types_1.isInstantiableClass)(type) && types_1.ClassType.isProtocolClass(type) && !(0, protocols_1.isMethodOnlyProtocol)(type)) {
2823
+ diag.addMessage(localize_1.Localizer.DiagnosticAddendum.dataProtocolUnsupported().format({
2824
+ name: type.details.name,
2825
+ }));
2826
+ }
2827
+ }
2812
2828
  _isSymbolPrivate(nameValue, scopeType) {
2813
2829
  // All variables within the scope of a function or a list
2814
2830
  // comprehension are considered private.
@@ -3444,14 +3460,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3444
3460
  }
3445
3461
  }
3446
3462
  else if (decls[0].type === 5 /* DeclarationType.Function */) {
3447
- if (decls.every((decl) => decl.type !== 5 /* DeclarationType.Function */ || ParseTreeUtils.isSuiteEmpty(decl.node.suite))) {
3448
- if (!decls[0].uri.hasExtension('.pyi')) {
3449
- if (!isSymbolImplemented(name)) {
3450
- diagAddendum.addMessage(localize_1.Localizer.DiagnosticAddendum.missingProtocolMember().format({
3451
- name,
3452
- classType: member.classType.details.name,
3453
- }));
3454
- }
3463
+ if (this._isUnimplementedProtocolMethod(member.symbol)) {
3464
+ if (!isSymbolImplemented(name)) {
3465
+ diagAddendum.addMessage(localize_1.Localizer.DiagnosticAddendum.missingProtocolMember().format({
3466
+ name,
3467
+ classType: member.classType.details.name,
3468
+ }));
3455
3469
  }
3456
3470
  }
3457
3471
  }
@@ -3533,6 +3547,42 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3533
3547
  paramIndex++;
3534
3548
  });
3535
3549
  }
3550
+ // Determine whether a method defined in a protocol should be considered
3551
+ // "unimplemented". This is an under-specified part of the typing spec.
3552
+ _isUnimplementedProtocolMethod(symbol) {
3553
+ const symbolType = this._evaluator.getEffectiveTypeOfSymbol(symbol);
3554
+ // Behavior differs between stub files and source files.
3555
+ const decls = symbol.getDeclarations();
3556
+ const isDeclaredInStubFile = decls.length > 0 && (0, sourceMapper_1.isStubFile)(decls[0].uri);
3557
+ if ((0, types_1.isFunction)(symbolType)) {
3558
+ const decl = symbolType.details.declaration;
3559
+ if (decl) {
3560
+ return isDeclaredInStubFile
3561
+ ? types_1.FunctionType.isAbstractMethod(symbolType)
3562
+ : ParseTreeUtils.isSuiteEmpty(decl.node.suite);
3563
+ }
3564
+ }
3565
+ else if ((0, types_1.isOverloadedFunction)(symbolType)) {
3566
+ // If an implementation is present and has an empty body, assume
3567
+ // the function is unimplemented.
3568
+ const impl = types_1.OverloadedFunctionType.getImplementation(symbolType);
3569
+ if (impl) {
3570
+ const decl = impl.details.declaration;
3571
+ if (decl) {
3572
+ return ParseTreeUtils.isSuiteEmpty(decl.node.suite);
3573
+ }
3574
+ return false;
3575
+ }
3576
+ if (isDeclaredInStubFile) {
3577
+ // If no implementation was present, see if any of the overloads
3578
+ // are marked as abstract.
3579
+ const overloads = types_1.OverloadedFunctionType.getOverloads(symbolType);
3580
+ return overloads.some((overload) => types_1.FunctionType.isAbstractMethod(overload));
3581
+ }
3582
+ return true;
3583
+ }
3584
+ return false;
3585
+ }
3536
3586
  // If a class is marked final, it must implement all abstract methods,
3537
3587
  // otherwise it is of no use.
3538
3588
  _validateFinalClassNotAbstract(classType, errorNode) {