@zzzen/pyright-internal 1.2.0-dev.20230115 → 1.2.0-dev.20230129

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 (103) hide show
  1. package/dist/analyzer/binder.js +1 -1
  2. package/dist/analyzer/binder.js.map +1 -1
  3. package/dist/analyzer/checker.d.ts +1 -1
  4. package/dist/analyzer/checker.js +51 -38
  5. package/dist/analyzer/checker.js.map +1 -1
  6. package/dist/analyzer/constraintSolver.js +7 -6
  7. package/dist/analyzer/constraintSolver.js.map +1 -1
  8. package/dist/analyzer/enums.js +1 -1
  9. package/dist/analyzer/enums.js.map +1 -1
  10. package/dist/analyzer/importResolver.d.ts +2 -1
  11. package/dist/analyzer/importResolver.js +6 -1
  12. package/dist/analyzer/importResolver.js.map +1 -1
  13. package/dist/analyzer/importResult.d.ts +1 -0
  14. package/dist/analyzer/parseTreeUtils.d.ts +1 -0
  15. package/dist/analyzer/parseTreeUtils.js +70 -11
  16. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  17. package/dist/analyzer/patternMatching.js +1 -1
  18. package/dist/analyzer/patternMatching.js.map +1 -1
  19. package/dist/analyzer/program.d.ts +3 -2
  20. package/dist/analyzer/program.js +19 -6
  21. package/dist/analyzer/program.js.map +1 -1
  22. package/dist/analyzer/regions.js +8 -12
  23. package/dist/analyzer/regions.js.map +1 -1
  24. package/dist/analyzer/service.js +1 -1
  25. package/dist/analyzer/service.js.map +1 -1
  26. package/dist/analyzer/sourceFile.d.ts +2 -2
  27. package/dist/analyzer/sourceFile.js +2 -2
  28. package/dist/analyzer/sourceFile.js.map +1 -1
  29. package/dist/analyzer/typeEvaluator.js +120 -24
  30. package/dist/analyzer/typeEvaluator.js.map +1 -1
  31. package/dist/analyzer/typeEvaluatorTypes.d.ts +0 -1
  32. package/dist/analyzer/typeGuards.js +5 -3
  33. package/dist/analyzer/typeGuards.js.map +1 -1
  34. package/dist/analyzer/typePrinter.js +32 -12
  35. package/dist/analyzer/typePrinter.js.map +1 -1
  36. package/dist/analyzer/typeUtils.d.ts +1 -0
  37. package/dist/analyzer/typeUtils.js +51 -4
  38. package/dist/analyzer/typeUtils.js.map +1 -1
  39. package/dist/analyzer/typedDicts.js +6 -2
  40. package/dist/analyzer/typedDicts.js.map +1 -1
  41. package/dist/analyzer/types.d.ts +5 -2
  42. package/dist/analyzer/types.js +29 -5
  43. package/dist/analyzer/types.js.map +1 -1
  44. package/dist/backgroundThreadBase.js +1 -0
  45. package/dist/backgroundThreadBase.js.map +1 -1
  46. package/dist/common/configOptions.d.ts +5 -0
  47. package/dist/common/configOptions.js +19 -1
  48. package/dist/common/configOptions.js.map +1 -1
  49. package/dist/common/envVarUtils.js +30 -7
  50. package/dist/common/envVarUtils.js.map +1 -1
  51. package/dist/languageServerBase.d.ts +2 -1
  52. package/dist/languageServerBase.js.map +1 -1
  53. package/dist/languageService/completionProvider.js +4 -11
  54. package/dist/languageService/completionProvider.js.map +1 -1
  55. package/dist/languageService/hoverProvider.d.ts +3 -1
  56. package/dist/languageService/hoverProvider.js +34 -32
  57. package/dist/languageService/hoverProvider.js.map +1 -1
  58. package/dist/languageService/indentationUtils.js +54 -43
  59. package/dist/languageService/indentationUtils.js.map +1 -1
  60. package/dist/languageService/tooltipUtils.d.ts +5 -1
  61. package/dist/languageService/tooltipUtils.js +60 -3
  62. package/dist/languageService/tooltipUtils.js.map +1 -1
  63. package/dist/localization/package.nls.en-us.json +1 -1
  64. package/dist/parser/parseNodes.js +0 -1
  65. package/dist/parser/parseNodes.js.map +1 -1
  66. package/dist/parser/stringTokenUtils.js +1 -1
  67. package/dist/parser/stringTokenUtils.js.map +1 -1
  68. package/dist/server.js +2 -0
  69. package/dist/server.js.map +1 -1
  70. package/dist/tests/fourslash/completions.commitChars.fourslash.js +23 -1
  71. package/dist/tests/fourslash/completions.commitChars.fourslash.js.map +1 -1
  72. package/dist/tests/fourslash/findDefinitions.namespaceImport.fourslash.js +2 -2
  73. package/dist/tests/fourslash/findDefinitions.namespaceImport.fourslash.js.map +1 -1
  74. package/dist/tests/fourslash/hover.formatted.fourslash.d.ts +1 -0
  75. package/dist/tests/fourslash/hover.formatted.fourslash.js +45 -0
  76. package/dist/tests/fourslash/hover.formatted.fourslash.js.map +1 -0
  77. package/dist/tests/fourslash/hover.overloadedFunction.fourslash.d.ts +1 -0
  78. package/dist/tests/fourslash/hover.overloadedFunction.fourslash.js +23 -0
  79. package/dist/tests/fourslash/hover.overloadedFunction.fourslash.js.map +1 -0
  80. package/dist/tests/harness/fourslash/testLanguageService.js +1 -0
  81. package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
  82. package/dist/tests/harness/fourslash/testState.d.ts +0 -10
  83. package/dist/tests/harness/fourslash/testState.js +15 -68
  84. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  85. package/dist/tests/harness/fourslash/testStateUtils.d.ts +12 -0
  86. package/dist/tests/harness/fourslash/testStateUtils.js +98 -0
  87. package/dist/tests/harness/fourslash/testStateUtils.js.map +1 -0
  88. package/dist/tests/indentationUtils.test.js +51 -0
  89. package/dist/tests/indentationUtils.test.js.map +1 -1
  90. package/dist/tests/pathUtils.test.js +10 -0
  91. package/dist/tests/pathUtils.test.js.map +1 -1
  92. package/dist/tests/signatureHelp.test.d.ts +1 -0
  93. package/dist/tests/signatureHelp.test.js +73 -0
  94. package/dist/tests/signatureHelp.test.js.map +1 -0
  95. package/dist/tests/typeEvaluator1.test.js +12 -0
  96. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  97. package/dist/tests/typeEvaluator2.test.js +4 -0
  98. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  99. package/dist/tests/typeEvaluator3.test.js +9 -1
  100. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  101. package/dist/tests/typeEvaluator4.test.js +10 -0
  102. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  103. package/package.json +1 -1
@@ -215,7 +215,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
215
215
  this._validateFinalClassNotAbstract(classTypeResult.classType, node);
216
216
  this._validateDataClassPostInit(classTypeResult.classType, node);
217
217
  this._validateProtocolCompatibility(classTypeResult.classType, node);
218
- this._validateInitSubclassArgs(classTypeResult.classType, node);
219
218
  this._reportDuplicateEnumMembers(classTypeResult.classType);
220
219
  if (types_1.ClassType.isTypedDictClass(classTypeResult.classType)) {
221
220
  this._validateTypedDictClassSuite(node.suite);
@@ -765,6 +764,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
765
764
  this._validateComparisonTypes(node);
766
765
  }
767
766
  }
767
+ else if (node.operator === 39 /* Is */ || node.operator === 40 /* IsNot */) {
768
+ // Don't apply this rule if it's within an assert.
769
+ if (!ParseTreeUtils.isWithinAssertExpression(node)) {
770
+ this._validateComparisonTypesForIsOperator(node);
771
+ }
772
+ }
768
773
  else if (node.operator === 41 /* In */ || node.operator === 42 /* NotIn */) {
769
774
  // Don't apply this rule if it's within an assert.
770
775
  if (!ParseTreeUtils.isWithinAssertExpression(node)) {
@@ -989,7 +994,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
989
994
  return false;
990
995
  }
991
996
  _getImportResult(node, filePath) {
992
- const execEnv = this._importResolver.getConfigOption().findExecEnvironment(filePath);
997
+ const execEnv = this._importResolver.getConfigOptions().findExecEnvironment(filePath);
993
998
  const moduleNameNode = node.parent.module;
994
999
  // Handle both absolute and relative imports.
995
1000
  const moduleName = moduleNameNode.leadingDots === 0
@@ -1155,6 +1160,36 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1155
1160
  }), node);
1156
1161
  }
1157
1162
  }
1163
+ // Determines whether the types of the two operands for an "is" or "is not"
1164
+ // operation have overlapping types.
1165
+ _validateComparisonTypesForIsOperator(node) {
1166
+ const rightType = this._evaluator.getType(node.rightExpression);
1167
+ if (!rightType || !(0, types_1.isNoneInstance)(rightType)) {
1168
+ return;
1169
+ }
1170
+ const leftType = this._evaluator.getType(node.leftExpression);
1171
+ if (!leftType) {
1172
+ return;
1173
+ }
1174
+ let foundMatchForNone = false;
1175
+ (0, typeUtils_1.doForEachSubtype)(leftType, (subtype) => {
1176
+ subtype = this._evaluator.makeTopLevelTypeVarsConcrete(subtype);
1177
+ if (this._evaluator.assignType(subtype, types_1.NoneType.createInstance())) {
1178
+ foundMatchForNone = true;
1179
+ }
1180
+ });
1181
+ const getMessage = () => {
1182
+ return node.operator === 39 /* Is */
1183
+ ? localize_1.Localizer.Diagnostic.comparisonAlwaysFalse()
1184
+ : localize_1.Localizer.Diagnostic.comparisonAlwaysTrue();
1185
+ };
1186
+ if (!foundMatchForNone) {
1187
+ this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUnnecessaryComparison, diagnosticRules_1.DiagnosticRule.reportUnnecessaryComparison, getMessage().format({
1188
+ leftType: this._evaluator.printType(leftType, { expandTypeAlias: true }),
1189
+ rightType: this._evaluator.printType(rightType),
1190
+ }), node);
1191
+ }
1192
+ }
1158
1193
  // Determines whether the types of the two operands for an == or != operation
1159
1194
  // have overlapping types.
1160
1195
  _validateComparisonTypes(node) {
@@ -2501,7 +2536,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2501
2536
  let errorMessage;
2502
2537
  let deprecatedMessage;
2503
2538
  (0, typeUtils_1.doForEachSubtype)(type, (subtype) => {
2504
- var _a, _b, _c;
2505
2539
  if ((0, types_1.isClass)(subtype)) {
2506
2540
  if (!subtype.includeSubclasses &&
2507
2541
  subtype.details.deprecatedMessage !== undefined &&
@@ -2521,25 +2555,20 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2521
2555
  // we can determine which overload(s) were used to satisfy
2522
2556
  // the call expression and determine whether any of them
2523
2557
  // are deprecated.
2524
- let callTypeResult;
2525
- if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 9 /* Call */ && node.parent.leftExpression === node) {
2526
- callTypeResult = this._evaluator.getTypeResult(node.parent);
2527
- }
2528
- else if (((_b = node.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 35 /* MemberAccess */ &&
2529
- node.parent.memberName === node &&
2530
- ((_c = node.parent.parent) === null || _c === void 0 ? void 0 : _c.nodeType) === 9 /* Call */ &&
2531
- node.parent.parent.leftExpression === node.parent) {
2532
- callTypeResult = this._evaluator.getTypeResult(node.parent.parent);
2533
- }
2534
- if (callTypeResult &&
2535
- callTypeResult.overloadsUsedForCall &&
2536
- callTypeResult.overloadsUsedForCall.length > 0) {
2537
- callTypeResult.overloadsUsedForCall.forEach((overload) => {
2538
- if (overload.details.deprecatedMessage !== undefined && node.value === overload.details.name) {
2539
- deprecatedMessage = overload.details.deprecatedMessage;
2540
- errorMessage = localize_1.Localizer.Diagnostic.deprecatedFunction();
2541
- }
2542
- });
2558
+ const callNode = ParseTreeUtils.getCallForName(node);
2559
+ if (callNode) {
2560
+ const callTypeResult = this._evaluator.getTypeResult(callNode);
2561
+ if (callTypeResult &&
2562
+ callTypeResult.overloadsUsedForCall &&
2563
+ callTypeResult.overloadsUsedForCall.length > 0) {
2564
+ callTypeResult.overloadsUsedForCall.forEach((overload) => {
2565
+ if (overload.details.deprecatedMessage !== undefined &&
2566
+ node.value === overload.details.name) {
2567
+ deprecatedMessage = overload.details.deprecatedMessage;
2568
+ errorMessage = localize_1.Localizer.Diagnostic.deprecatedFunction();
2569
+ }
2570
+ });
2571
+ }
2543
2572
  }
2544
2573
  }
2545
2574
  });
@@ -2999,22 +3028,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2999
3028
  }
3000
3029
  });
3001
3030
  }
3002
- _validateInitSubclassArgs(classType, node) {
3003
- const argList = [];
3004
- // Collect arguments that will be passed to the `__init_subclass__`
3005
- // method described in PEP 487.
3006
- node.arguments.forEach((arg) => {
3007
- if (arg.name && arg.name.value !== 'metaclass') {
3008
- argList.push({
3009
- argumentCategory: 0 /* Simple */,
3010
- node: arg,
3011
- name: arg.name,
3012
- valueExpression: arg.valueExpression,
3013
- });
3014
- }
3015
- });
3016
- this._evaluator.validateInitSubclassArgs(node, classType, argList);
3017
- }
3018
3031
  // If a non-protocol class explicitly inherits from a protocol class, this method
3019
3032
  // verifies that any class or instance variables declared but not assigned
3020
3033
  // in the protocol class are implemented in the subclass. It also checks that any