@zzzen/pyright-internal 1.2.0-dev.20230820 → 1.2.0-dev.20230827

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 (88) hide show
  1. package/dist/analyzer/checker.js +46 -64
  2. package/dist/analyzer/checker.js.map +1 -1
  3. package/dist/analyzer/codeFlowEngine.js +23 -1
  4. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  5. package/dist/analyzer/constraintSolver.js +2 -1
  6. package/dist/analyzer/constraintSolver.js.map +1 -1
  7. package/dist/analyzer/constructorTransform.js +1 -1
  8. package/dist/analyzer/constructorTransform.js.map +1 -1
  9. package/dist/analyzer/decorators.js +11 -6
  10. package/dist/analyzer/decorators.js.map +1 -1
  11. package/dist/analyzer/deprecatedSymbols.d.ts +9 -0
  12. package/dist/analyzer/deprecatedSymbols.js +292 -0
  13. package/dist/analyzer/deprecatedSymbols.js.map +1 -0
  14. package/dist/analyzer/docStringConversion.js +7 -1
  15. package/dist/analyzer/docStringConversion.js.map +1 -1
  16. package/dist/analyzer/importResolver.js +5 -0
  17. package/dist/analyzer/importResolver.js.map +1 -1
  18. package/dist/analyzer/program.d.ts +3 -3
  19. package/dist/analyzer/program.js +5 -9
  20. package/dist/analyzer/program.js.map +1 -1
  21. package/dist/analyzer/sourceFile.js +1 -0
  22. package/dist/analyzer/sourceFile.js.map +1 -1
  23. package/dist/analyzer/typeEvaluator.js +530 -432
  24. package/dist/analyzer/typeEvaluator.js.map +1 -1
  25. package/dist/analyzer/typeGuards.js +15 -4
  26. package/dist/analyzer/typeGuards.js.map +1 -1
  27. package/dist/analyzer/typeUtils.d.ts +2 -2
  28. package/dist/analyzer/typeUtils.js +10 -5
  29. package/dist/analyzer/typeUtils.js.map +1 -1
  30. package/dist/analyzer/typeVarContext.js +3 -1
  31. package/dist/analyzer/typeVarContext.js.map +1 -1
  32. package/dist/analyzer/types.d.ts +6 -1
  33. package/dist/analyzer/types.js +19 -0
  34. package/dist/analyzer/types.js.map +1 -1
  35. package/dist/common/cancellationUtils.d.ts +2 -1
  36. package/dist/common/cancellationUtils.js +3 -0
  37. package/dist/common/cancellationUtils.js.map +1 -1
  38. package/dist/common/configOptions.d.ts +1 -0
  39. package/dist/common/configOptions.js +5 -1
  40. package/dist/common/configOptions.js.map +1 -1
  41. package/dist/common/diagnosticRules.d.ts +1 -0
  42. package/dist/common/diagnosticRules.js +1 -0
  43. package/dist/common/diagnosticRules.js.map +1 -1
  44. package/dist/languageService/completionProvider.js +9 -3
  45. package/dist/languageService/completionProvider.js.map +1 -1
  46. package/dist/localization/localize.d.ts +3 -0
  47. package/dist/localization/localize.js +1 -0
  48. package/dist/localization/localize.js.map +1 -1
  49. package/dist/localization/package.nls.cs.json +12 -10
  50. package/dist/localization/package.nls.de.json +12 -10
  51. package/dist/localization/package.nls.en-us.json +2 -1
  52. package/dist/localization/package.nls.es.json +12 -10
  53. package/dist/localization/package.nls.fr.json +12 -10
  54. package/dist/localization/package.nls.it.json +12 -10
  55. package/dist/localization/package.nls.ja.json +12 -10
  56. package/dist/localization/package.nls.ko.json +12 -10
  57. package/dist/localization/package.nls.pl.json +12 -10
  58. package/dist/localization/package.nls.pt-br.json +12 -10
  59. package/dist/localization/package.nls.qps-ploc.json +12 -10
  60. package/dist/localization/package.nls.ru.json +12 -10
  61. package/dist/localization/package.nls.tr.json +12 -10
  62. package/dist/localization/package.nls.zh-cn.json +12 -10
  63. package/dist/localization/package.nls.zh-tw.json +12 -10
  64. package/dist/parser/parser.js +2 -0
  65. package/dist/parser/parser.js.map +1 -1
  66. package/dist/parser/tokenizer.d.ts +1 -1
  67. package/dist/parser/tokenizer.js +9 -5
  68. package/dist/parser/tokenizer.js.map +1 -1
  69. package/dist/tests/checker.test.js +34 -13
  70. package/dist/tests/checker.test.js.map +1 -1
  71. package/dist/tests/completions.test.js +39 -2
  72. package/dist/tests/completions.test.js.map +1 -1
  73. package/dist/tests/docStringConversion.test.js +23 -0
  74. package/dist/tests/docStringConversion.test.js.map +1 -1
  75. package/dist/tests/typeEvaluator1.test.js +4 -0
  76. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  77. package/dist/tests/typeEvaluator2.test.js +4 -0
  78. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  79. package/dist/tests/typeEvaluator3.test.js +14 -20
  80. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  81. package/dist/tests/typeEvaluator4.test.js +12 -0
  82. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  83. package/dist/tests/typeEvaluator5.test.js +24 -0
  84. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  85. package/dist/workspaceFactory.d.ts +1 -1
  86. package/dist/workspaceFactory.js +3 -3
  87. package/dist/workspaceFactory.js.map +1 -1
  88. package/package.json +1 -1
@@ -48,6 +48,7 @@ const stringTokenUtils_1 = require("../parser/stringTokenUtils");
48
48
  const AnalyzerNodeInfo = __importStar(require("./analyzerNodeInfo"));
49
49
  const declaration_1 = require("./declaration");
50
50
  const declarationUtils_1 = require("./declarationUtils");
51
+ const deprecatedSymbols_1 = require("./deprecatedSymbols");
51
52
  const importResolver_1 = require("./importResolver");
52
53
  const importStatementUtils_1 = require("./importStatementUtils");
53
54
  const parameterUtils_1 = require("./parameterUtils");
@@ -66,43 +67,6 @@ const typeGuards_1 = require("./typeGuards");
66
67
  const typeUtils_1 = require("./typeUtils");
67
68
  const typeVarContext_1 = require("./typeVarContext");
68
69
  const types_1 = require("./types");
69
- const deprecatedAliases = new Map([
70
- ['Tuple', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.tuple', replacementText: 'tuple' }],
71
- ['List', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.list', replacementText: 'list' }],
72
- ['Dict', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.dict', replacementText: 'dict' }],
73
- ['Set', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.set', replacementText: 'set' }],
74
- ['FrozenSet', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.frozenset', replacementText: 'frozenset' }],
75
- ['Type', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.type', replacementText: 'type' }],
76
- ['Deque', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'collections.deque', replacementText: 'collections.deque' }],
77
- [
78
- 'DefaultDict',
79
- {
80
- version: pythonVersion_1.PythonVersion.V3_9,
81
- fullName: 'collections.defaultdict',
82
- replacementText: 'collections.defaultdict',
83
- },
84
- ],
85
- [
86
- 'OrderedDict',
87
- {
88
- version: pythonVersion_1.PythonVersion.V3_9,
89
- fullName: 'collections.OrderedDict',
90
- replacementText: 'collections.OrderedDict',
91
- },
92
- ],
93
- [
94
- 'Counter',
95
- { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'collections.Counter', replacementText: 'collections.Counter' },
96
- ],
97
- [
98
- 'ChainMap',
99
- { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'collections.ChainMap', replacementText: 'collections.ChainMap' },
100
- ],
101
- ]);
102
- const deprecatedSpecialForms = new Map([
103
- ['Optional', { version: pythonVersion_1.PythonVersion.V3_10, fullName: 'typing.Optional', replacementText: '| None' }],
104
- ['Union', { version: pythonVersion_1.PythonVersion.V3_10, fullName: 'typing.Union', replacementText: '|' }],
105
- ]);
106
70
  // When enabled, this debug flag causes the code complexity of
107
71
  // functions to be emitted.
108
72
  const isPrintCodeComplexityEnabled = false;
@@ -936,7 +900,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
936
900
  }
937
901
  visitMemberAccess(node) {
938
902
  const type = this._evaluator.getType(node);
939
- this._reportDeprecatedUse(node.memberName, type);
903
+ const leftExprType = this._evaluator.getType(node.leftExpression);
904
+ this._reportDeprecatedUse(node.memberName, type, leftExprType && (0, types_1.isModule)(leftExprType) && leftExprType.moduleName === 'typing');
940
905
  this._conditionallyReportPrivateUsage(node.memberName);
941
906
  // Walk the leftExpression but not the memberName.
942
907
  this.walk(node.leftExpression);
@@ -975,7 +940,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
975
940
  return true;
976
941
  }
977
942
  visitImportFromAs(node) {
978
- var _a;
943
+ var _a, _b;
979
944
  if (this._fileInfo.isStubFile) {
980
945
  return false;
981
946
  }
@@ -999,8 +964,16 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
999
964
  this._addMissingModuleSourceDiagnosticIfNeeded(importResult, node.name);
1000
965
  break;
1001
966
  }
1002
- const type = this._evaluator.getType((_a = node.alias) !== null && _a !== void 0 ? _a : node.name);
1003
- this._reportDeprecatedUse(node.name, type);
967
+ let isImportFromTyping = false;
968
+ if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 22 /* ImportFrom */) {
969
+ if (node.parent.module.leadingDots === 0 && node.parent.module.nameParts.length === 1) {
970
+ if (node.parent.module.nameParts[0].value === 'typing') {
971
+ isImportFromTyping = true;
972
+ }
973
+ }
974
+ }
975
+ const type = this._evaluator.getType((_b = node.alias) !== null && _b !== void 0 ? _b : node.name);
976
+ this._reportDeprecatedUse(node.name, type, isImportFromTyping);
1004
977
  return false;
1005
978
  }
1006
979
  visitModuleName(node) {
@@ -1935,17 +1908,25 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1935
1908
  implementationFunction = type;
1936
1909
  }
1937
1910
  if (!implementationFunction) {
1938
- let isProtocolMethod = false;
1911
+ let exemptMissingImplementation = false;
1939
1912
  const containingClassNode = ParseTreeUtils.getEnclosingClassOrFunction(primaryDecl.node);
1940
1913
  if (containingClassNode && containingClassNode.nodeType === 10 /* Class */) {
1941
1914
  const classType = this._evaluator.getTypeOfClass(containingClassNode);
1942
- if (classType && types_1.ClassType.isProtocolClass(classType.classType)) {
1943
- isProtocolMethod = true;
1915
+ if (classType) {
1916
+ if (types_1.ClassType.isProtocolClass(classType.classType)) {
1917
+ exemptMissingImplementation = true;
1918
+ }
1919
+ else if (types_1.ClassType.supportsAbstractMethods(classType.classType)) {
1920
+ if ((0, types_1.isOverloadedFunction)(type) &&
1921
+ types_1.OverloadedFunctionType.getOverloads(type).every((overload) => types_1.FunctionType.isAbstractMethod(overload))) {
1922
+ exemptMissingImplementation = true;
1923
+ }
1924
+ }
1944
1925
  }
1945
1926
  }
1946
1927
  // If this is a method within a protocol class, don't require that
1947
1928
  // there is an implementation.
1948
- if (!isProtocolMethod) {
1929
+ if (!exemptMissingImplementation) {
1949
1930
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.overloadWithoutImplementation().format({
1950
1931
  name: primaryDecl.node.name.value,
1951
1932
  }), primaryDecl.node.name);
@@ -2639,8 +2620,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2639
2620
  }
2640
2621
  return false;
2641
2622
  }
2642
- _reportDeprecatedUse(node, type) {
2643
- var _a;
2623
+ _reportDeprecatedUse(node, type, isImportFromTyping = false) {
2624
+ var _a, _b;
2644
2625
  if (!type) {
2645
2626
  return;
2646
2627
  }
@@ -2717,24 +2698,25 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2717
2698
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportDeprecated, diagnosticRules_1.DiagnosticRule.reportDeprecated, errorMessage + diag.getString(), node);
2718
2699
  }
2719
2700
  }
2720
- // We'll leave this disabled for now because this would be too noisy for most
2721
- // code bases. We may want to add it at some future date.
2722
- if (0) {
2723
- const deprecatedForm = (_a = deprecatedAliases.get(node.value)) !== null && _a !== void 0 ? _a : deprecatedSpecialForms.get(node.value);
2701
+ if (this._fileInfo.diagnosticRuleSet.deprecateTypingAliases) {
2702
+ const deprecatedForm = (_a = deprecatedSymbols_1.deprecatedAliases.get(node.value)) !== null && _a !== void 0 ? _a : deprecatedSymbols_1.deprecatedSpecialForms.get(node.value);
2724
2703
  if (deprecatedForm) {
2725
- if ((0, types_1.isInstantiableClass)(type) && type.details.fullName === deprecatedForm.fullName) {
2704
+ if (((0, types_1.isInstantiableClass)(type) && type.details.fullName === deprecatedForm.fullName) ||
2705
+ ((_b = type.typeAliasInfo) === null || _b === void 0 ? void 0 : _b.fullName) === deprecatedForm.fullName) {
2726
2706
  if (this._fileInfo.executionEnvironment.pythonVersion >= deprecatedForm.version) {
2727
- if (this._fileInfo.diagnosticRuleSet.reportDeprecated === 'none') {
2728
- this._evaluator.addDeprecated(localize_1.Localizer.Diagnostic.deprecatedType().format({
2729
- version: (0, pythonVersion_1.versionToString)(deprecatedForm.version),
2730
- replacement: deprecatedForm.replacementText,
2731
- }), node);
2732
- }
2733
- else {
2734
- this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportDeprecated, diagnosticRules_1.DiagnosticRule.reportDeprecated, localize_1.Localizer.Diagnostic.deprecatedType().format({
2735
- version: (0, pythonVersion_1.versionToString)(deprecatedForm.version),
2736
- replacement: deprecatedForm.replacementText,
2737
- }), node);
2707
+ if (!deprecatedForm.typingImportOnly || isImportFromTyping) {
2708
+ if (this._fileInfo.diagnosticRuleSet.reportDeprecated === 'none') {
2709
+ this._evaluator.addDeprecated(localize_1.Localizer.Diagnostic.deprecatedType().format({
2710
+ version: (0, pythonVersion_1.versionToString)(deprecatedForm.version),
2711
+ replacement: deprecatedForm.replacementText,
2712
+ }), node);
2713
+ }
2714
+ else {
2715
+ this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportDeprecated, diagnosticRules_1.DiagnosticRule.reportDeprecated, localize_1.Localizer.Diagnostic.deprecatedType().format({
2716
+ version: (0, pythonVersion_1.versionToString)(deprecatedForm.version),
2717
+ replacement: deprecatedForm.replacementText,
2718
+ }), node);
2719
+ }
2738
2720
  }
2739
2721
  }
2740
2722
  }
@@ -3961,7 +3943,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3961
3943
  if (!(0, types_1.isInstantiableClass)(baseClassAndSymbol.classType)) {
3962
3944
  return;
3963
3945
  }
3964
- if (baseClassAndSymbol.symbol.isIgnoredForOverrideChecks()) {
3946
+ if (baseClassAndSymbol.symbol.isIgnoredForOverrideChecks() || overrideSymbol.isIgnoredForOverrideChecks()) {
3965
3947
  return;
3966
3948
  }
3967
3949
  // If the base class doesn't provide a type declaration, we won't bother