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

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 (176) hide show
  1. package/dist/analyzer/binder.js +4 -1
  2. package/dist/analyzer/binder.js.map +1 -1
  3. package/dist/analyzer/checker.js +47 -64
  4. package/dist/analyzer/checker.js.map +1 -1
  5. package/dist/analyzer/codeFlowEngine.js +24 -3
  6. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  7. package/dist/analyzer/constraintSolver.js +2 -1
  8. package/dist/analyzer/constraintSolver.js.map +1 -1
  9. package/dist/analyzer/constructorTransform.js +1 -1
  10. package/dist/analyzer/constructorTransform.js.map +1 -1
  11. package/dist/analyzer/decorators.js +11 -6
  12. package/dist/analyzer/decorators.js.map +1 -1
  13. package/dist/analyzer/deprecatedSymbols.d.ts +9 -0
  14. package/dist/analyzer/deprecatedSymbols.js +303 -0
  15. package/dist/analyzer/deprecatedSymbols.js.map +1 -0
  16. package/dist/analyzer/docStringConversion.js +7 -1
  17. package/dist/analyzer/docStringConversion.js.map +1 -1
  18. package/dist/analyzer/importResolver.d.ts +6 -4
  19. package/dist/analyzer/importResolver.js +21 -11
  20. package/dist/analyzer/importResolver.js.map +1 -1
  21. package/dist/analyzer/namedTuples.js +1 -1
  22. package/dist/analyzer/namedTuples.js.map +1 -1
  23. package/dist/analyzer/packageTypeVerifier.d.ts +3 -3
  24. package/dist/analyzer/packageTypeVerifier.js +8 -11
  25. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  26. package/dist/analyzer/program.d.ts +10 -23
  27. package/dist/analyzer/program.js +94 -92
  28. package/dist/analyzer/program.js.map +1 -1
  29. package/dist/analyzer/protocols.js +3 -1
  30. package/dist/analyzer/protocols.js.map +1 -1
  31. package/dist/analyzer/service.d.ts +6 -3
  32. package/dist/analyzer/service.js +26 -8
  33. package/dist/analyzer/service.js.map +1 -1
  34. package/dist/analyzer/sourceFile.d.ts +6 -4
  35. package/dist/analyzer/sourceFile.js +10 -16
  36. package/dist/analyzer/sourceFile.js.map +1 -1
  37. package/dist/analyzer/sourceFileInfo.d.ts +62 -0
  38. package/dist/analyzer/sourceFileInfo.js +145 -0
  39. package/dist/analyzer/sourceFileInfo.js.map +1 -0
  40. package/dist/analyzer/sourceMapper.d.ts +1 -1
  41. package/dist/analyzer/typeEvaluator.js +729 -592
  42. package/dist/analyzer/typeEvaluator.js.map +1 -1
  43. package/dist/analyzer/typeEvaluatorTypes.d.ts +1 -0
  44. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  45. package/dist/analyzer/typeGuards.js +93 -18
  46. package/dist/analyzer/typeGuards.js.map +1 -1
  47. package/dist/analyzer/typeUtils.d.ts +2 -2
  48. package/dist/analyzer/typeUtils.js +32 -13
  49. package/dist/analyzer/typeUtils.js.map +1 -1
  50. package/dist/analyzer/typeVarContext.js +3 -1
  51. package/dist/analyzer/typeVarContext.js.map +1 -1
  52. package/dist/analyzer/typeWalker.js +1 -1
  53. package/dist/analyzer/typeWalker.js.map +1 -1
  54. package/dist/analyzer/types.d.ts +6 -1
  55. package/dist/analyzer/types.js +19 -0
  56. package/dist/analyzer/types.js.map +1 -1
  57. package/dist/backgroundAnalysis.d.ts +1 -2
  58. package/dist/backgroundAnalysis.js +2 -2
  59. package/dist/backgroundAnalysis.js.map +1 -1
  60. package/dist/backgroundAnalysisBase.d.ts +1 -2
  61. package/dist/backgroundAnalysisBase.js +4 -4
  62. package/dist/backgroundAnalysisBase.js.map +1 -1
  63. package/dist/backgroundThreadBase.d.ts +1 -1
  64. package/dist/backgroundThreadBase.js +1 -0
  65. package/dist/backgroundThreadBase.js.map +1 -1
  66. package/dist/common/cancellationUtils.d.ts +2 -1
  67. package/dist/common/cancellationUtils.js +3 -0
  68. package/dist/common/cancellationUtils.js.map +1 -1
  69. package/dist/common/commandLineOptions.d.ts +1 -0
  70. package/dist/common/commandLineOptions.js.map +1 -1
  71. package/dist/common/configOptions.d.ts +5 -1
  72. package/dist/common/configOptions.js +21 -4
  73. package/dist/common/configOptions.js.map +1 -1
  74. package/dist/common/console.d.ts +3 -0
  75. package/dist/common/console.js +8 -1
  76. package/dist/common/console.js.map +1 -1
  77. package/dist/common/diagnosticRules.d.ts +1 -0
  78. package/dist/common/diagnosticRules.js +1 -0
  79. package/dist/common/diagnosticRules.js.map +1 -1
  80. package/dist/common/extensibility.d.ts +4 -1
  81. package/dist/common/extensibility.js.map +1 -1
  82. package/dist/common/fileSystem.d.ts +3 -0
  83. package/dist/common/fileSystem.js +8 -1
  84. package/dist/common/fileSystem.js.map +1 -1
  85. package/dist/common/serviceProvider.d.ts +1 -4
  86. package/dist/common/serviceProvider.js +4 -4
  87. package/dist/common/serviceProvider.js.map +1 -1
  88. package/dist/common/serviceProviderExtensions.d.ts +10 -4
  89. package/dist/common/serviceProviderExtensions.js +43 -1
  90. package/dist/common/serviceProviderExtensions.js.map +1 -1
  91. package/dist/languageServerBase.d.ts +8 -8
  92. package/dist/languageServerBase.js +3 -2
  93. package/dist/languageServerBase.js.map +1 -1
  94. package/dist/languageService/analyzerServiceExecutor.js +3 -2
  95. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  96. package/dist/languageService/completionProvider.d.ts +4 -3
  97. package/dist/languageService/completionProvider.js +187 -173
  98. package/dist/languageService/completionProvider.js.map +1 -1
  99. package/dist/languageService/completionProviderUtils.d.ts +1 -1
  100. package/dist/languageService/completionProviderUtils.js +1 -1
  101. package/dist/languageService/completionProviderUtils.js.map +1 -1
  102. package/dist/localization/localize.d.ts +8 -0
  103. package/dist/localization/localize.js +2 -0
  104. package/dist/localization/localize.js.map +1 -1
  105. package/dist/localization/package.nls.cs.json +15 -10
  106. package/dist/localization/package.nls.de.json +11 -6
  107. package/dist/localization/package.nls.en-us.json +6 -4
  108. package/dist/localization/package.nls.es.json +16 -11
  109. package/dist/localization/package.nls.fr.json +17 -12
  110. package/dist/localization/package.nls.it.json +17 -12
  111. package/dist/localization/package.nls.ja.json +11 -6
  112. package/dist/localization/package.nls.ko.json +15 -10
  113. package/dist/localization/package.nls.pl.json +14 -9
  114. package/dist/localization/package.nls.pt-br.json +18 -13
  115. package/dist/localization/package.nls.qps-ploc.json +18 -13
  116. package/dist/localization/package.nls.ru.json +15 -10
  117. package/dist/localization/package.nls.tr.json +11 -6
  118. package/dist/localization/package.nls.zh-cn.json +14 -9
  119. package/dist/localization/package.nls.zh-tw.json +11 -6
  120. package/dist/parser/parser.js +2 -0
  121. package/dist/parser/parser.js.map +1 -1
  122. package/dist/parser/tokenizer.d.ts +1 -1
  123. package/dist/parser/tokenizer.js +9 -5
  124. package/dist/parser/tokenizer.js.map +1 -1
  125. package/dist/pyright.js +6 -4
  126. package/dist/pyright.js.map +1 -1
  127. package/dist/server.d.ts +2 -2
  128. package/dist/server.js +6 -9
  129. package/dist/server.js.map +1 -1
  130. package/dist/tests/chainedSourceFiles.test.js +4 -1
  131. package/dist/tests/chainedSourceFiles.test.js.map +1 -1
  132. package/dist/tests/checker.test.js +34 -13
  133. package/dist/tests/checker.test.js.map +1 -1
  134. package/dist/tests/completions.test.js +69 -2
  135. package/dist/tests/completions.test.js.map +1 -1
  136. package/dist/tests/config.test.js +23 -17
  137. package/dist/tests/config.test.js.map +1 -1
  138. package/dist/tests/docStringConversion.test.js +23 -0
  139. package/dist/tests/docStringConversion.test.js.map +1 -1
  140. package/dist/tests/fourslash/diagnostics.missingModuleSource.fourslash.js +8 -8
  141. package/dist/tests/fourslash/diagnostics.missingModuleSource.fourslash.js.map +1 -1
  142. package/dist/tests/fourslash/importnotresolved.fourslash.js +2 -2
  143. package/dist/tests/fourslash/importnotresolved.fourslash.js.map +1 -1
  144. package/dist/tests/fourslash/missingModuleSource.fourslash.js +4 -1
  145. package/dist/tests/fourslash/missingModuleSource.fourslash.js.map +1 -1
  146. package/dist/tests/harness/fourslash/testLanguageService.js +4 -1
  147. package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
  148. package/dist/tests/harness/fourslash/testState.d.ts +2 -0
  149. package/dist/tests/harness/fourslash/testState.js +5 -1
  150. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  151. package/dist/tests/importResolver.test.js +14 -9
  152. package/dist/tests/importResolver.test.js.map +1 -1
  153. package/dist/tests/localizer.test.js +1 -1
  154. package/dist/tests/localizer.test.js.map +1 -1
  155. package/dist/tests/service.test.js +55 -0
  156. package/dist/tests/service.test.js.map +1 -1
  157. package/dist/tests/sourceFile.test.js +4 -2
  158. package/dist/tests/sourceFile.test.js.map +1 -1
  159. package/dist/tests/testUtils.js +3 -5
  160. package/dist/tests/testUtils.js.map +1 -1
  161. package/dist/tests/typeEvaluator1.test.js +6 -2
  162. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  163. package/dist/tests/typeEvaluator2.test.js +9 -1
  164. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  165. package/dist/tests/typeEvaluator3.test.js +17 -23
  166. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  167. package/dist/tests/typeEvaluator4.test.js +12 -0
  168. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  169. package/dist/tests/typeEvaluator5.test.js +24 -0
  170. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  171. package/dist/tests/workspaceEditUtils.test.js +24 -20
  172. package/dist/tests/workspaceEditUtils.test.js.map +1 -1
  173. package/dist/workspaceFactory.d.ts +2 -1
  174. package/dist/workspaceFactory.js +15 -6
  175. package/dist/workspaceFactory.js.map +1 -1
  176. 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) {
@@ -1075,6 +1048,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1075
1048
  // Type stub found, but source is missing.
1076
1049
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportMissingModuleSource, diagnosticRules_1.DiagnosticRule.reportMissingModuleSource, localize_1.Localizer.Diagnostic.importSourceResolveFailure().format({
1077
1050
  importName: importResult.importName,
1051
+ venv: this._fileInfo.executionEnvironment.name,
1078
1052
  }), node);
1079
1053
  }
1080
1054
  _validateConditionalIsBool(node) {
@@ -1935,17 +1909,25 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1935
1909
  implementationFunction = type;
1936
1910
  }
1937
1911
  if (!implementationFunction) {
1938
- let isProtocolMethod = false;
1912
+ let exemptMissingImplementation = false;
1939
1913
  const containingClassNode = ParseTreeUtils.getEnclosingClassOrFunction(primaryDecl.node);
1940
1914
  if (containingClassNode && containingClassNode.nodeType === 10 /* Class */) {
1941
1915
  const classType = this._evaluator.getTypeOfClass(containingClassNode);
1942
- if (classType && types_1.ClassType.isProtocolClass(classType.classType)) {
1943
- isProtocolMethod = true;
1916
+ if (classType) {
1917
+ if (types_1.ClassType.isProtocolClass(classType.classType)) {
1918
+ exemptMissingImplementation = true;
1919
+ }
1920
+ else if (types_1.ClassType.supportsAbstractMethods(classType.classType)) {
1921
+ if ((0, types_1.isOverloadedFunction)(type) &&
1922
+ types_1.OverloadedFunctionType.getOverloads(type).every((overload) => types_1.FunctionType.isAbstractMethod(overload))) {
1923
+ exemptMissingImplementation = true;
1924
+ }
1925
+ }
1944
1926
  }
1945
1927
  }
1946
1928
  // If this is a method within a protocol class, don't require that
1947
1929
  // there is an implementation.
1948
- if (!isProtocolMethod) {
1930
+ if (!exemptMissingImplementation) {
1949
1931
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.overloadWithoutImplementation().format({
1950
1932
  name: primaryDecl.node.name.value,
1951
1933
  }), primaryDecl.node.name);
@@ -2639,8 +2621,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2639
2621
  }
2640
2622
  return false;
2641
2623
  }
2642
- _reportDeprecatedUse(node, type) {
2643
- var _a;
2624
+ _reportDeprecatedUse(node, type, isImportFromTyping = false) {
2625
+ var _a, _b;
2644
2626
  if (!type) {
2645
2627
  return;
2646
2628
  }
@@ -2717,24 +2699,25 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2717
2699
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportDeprecated, diagnosticRules_1.DiagnosticRule.reportDeprecated, errorMessage + diag.getString(), node);
2718
2700
  }
2719
2701
  }
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);
2702
+ if (this._fileInfo.diagnosticRuleSet.deprecateTypingAliases) {
2703
+ const deprecatedForm = (_a = deprecatedSymbols_1.deprecatedAliases.get(node.value)) !== null && _a !== void 0 ? _a : deprecatedSymbols_1.deprecatedSpecialForms.get(node.value);
2724
2704
  if (deprecatedForm) {
2725
- if ((0, types_1.isInstantiableClass)(type) && type.details.fullName === deprecatedForm.fullName) {
2705
+ if (((0, types_1.isInstantiableClass)(type) && type.details.fullName === deprecatedForm.fullName) ||
2706
+ ((_b = type.typeAliasInfo) === null || _b === void 0 ? void 0 : _b.fullName) === deprecatedForm.fullName) {
2726
2707
  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);
2708
+ if (!deprecatedForm.typingImportOnly || isImportFromTyping) {
2709
+ if (this._fileInfo.diagnosticRuleSet.reportDeprecated === 'none') {
2710
+ this._evaluator.addDeprecated(localize_1.Localizer.Diagnostic.deprecatedType().format({
2711
+ version: (0, pythonVersion_1.versionToString)(deprecatedForm.version),
2712
+ replacement: deprecatedForm.replacementText,
2713
+ }), node);
2714
+ }
2715
+ else {
2716
+ this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportDeprecated, diagnosticRules_1.DiagnosticRule.reportDeprecated, localize_1.Localizer.Diagnostic.deprecatedType().format({
2717
+ version: (0, pythonVersion_1.versionToString)(deprecatedForm.version),
2718
+ replacement: deprecatedForm.replacementText,
2719
+ }), node);
2720
+ }
2738
2721
  }
2739
2722
  }
2740
2723
  }
@@ -3961,7 +3944,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3961
3944
  if (!(0, types_1.isInstantiableClass)(baseClassAndSymbol.classType)) {
3962
3945
  return;
3963
3946
  }
3964
- if (baseClassAndSymbol.symbol.isIgnoredForOverrideChecks()) {
3947
+ if (baseClassAndSymbol.symbol.isIgnoredForOverrideChecks() || overrideSymbol.isIgnoredForOverrideChecks()) {
3965
3948
  return;
3966
3949
  }
3967
3950
  // If the base class doesn't provide a type declaration, we won't bother