@zzzen/pyright-internal 1.2.0-dev.20230514 → 1.2.0-dev.20230521

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 (145) hide show
  1. package/dist/analyzer/analyzerFileInfo.d.ts +1 -0
  2. package/dist/analyzer/analyzerFileInfo.js +4 -3
  3. package/dist/analyzer/analyzerFileInfo.js.map +1 -1
  4. package/dist/analyzer/backgroundAnalysisProgram.d.ts +17 -15
  5. package/dist/analyzer/backgroundAnalysisProgram.js +43 -53
  6. package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
  7. package/dist/analyzer/binder.d.ts +0 -2
  8. package/dist/analyzer/binder.js +2 -20
  9. package/dist/analyzer/binder.js.map +1 -1
  10. package/dist/analyzer/checker.d.ts +1 -1
  11. package/dist/analyzer/checker.js +61 -28
  12. package/dist/analyzer/checker.js.map +1 -1
  13. package/dist/analyzer/constructorTransform.js +5 -1
  14. package/dist/analyzer/constructorTransform.js.map +1 -1
  15. package/dist/analyzer/constructors.js +14 -12
  16. package/dist/analyzer/constructors.js.map +1 -1
  17. package/dist/analyzer/dataClasses.js +3 -0
  18. package/dist/analyzer/dataClasses.js.map +1 -1
  19. package/dist/analyzer/declarationUtils.js +1 -0
  20. package/dist/analyzer/declarationUtils.js.map +1 -1
  21. package/dist/analyzer/importResolver.d.ts +4 -4
  22. package/dist/analyzer/importResolver.js +46 -40
  23. package/dist/analyzer/importResolver.js.map +1 -1
  24. package/dist/analyzer/importResult.d.ts +2 -2
  25. package/dist/analyzer/importStatementUtils.js +2 -2
  26. package/dist/analyzer/importStatementUtils.js.map +1 -1
  27. package/dist/analyzer/packageTypeVerifier.js +1 -1
  28. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  29. package/dist/analyzer/parseTreeUtils.js +2 -34
  30. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  31. package/dist/analyzer/parseTreeWalker.js +2 -2
  32. package/dist/analyzer/parseTreeWalker.js.map +1 -1
  33. package/dist/analyzer/patternMatching.js +1 -0
  34. package/dist/analyzer/patternMatching.js.map +1 -1
  35. package/dist/analyzer/program.d.ts +12 -18
  36. package/dist/analyzer/program.js +25 -12
  37. package/dist/analyzer/program.js.map +1 -1
  38. package/dist/analyzer/protocols.js +3 -1
  39. package/dist/analyzer/protocols.js.map +1 -1
  40. package/dist/analyzer/service.d.ts +4 -4
  41. package/dist/analyzer/service.js +21 -24
  42. package/dist/analyzer/service.js.map +1 -1
  43. package/dist/analyzer/sourceFile.d.ts +1 -6
  44. package/dist/analyzer/sourceFile.js +7 -26
  45. package/dist/analyzer/sourceFile.js.map +1 -1
  46. package/dist/analyzer/sourceMapper.js +1 -1
  47. package/dist/analyzer/sourceMapper.js.map +1 -1
  48. package/dist/analyzer/typeDocStringUtils.js +1 -1
  49. package/dist/analyzer/typeDocStringUtils.js.map +1 -1
  50. package/dist/analyzer/typeEvaluator.d.ts +2 -2
  51. package/dist/analyzer/typeEvaluator.js +134 -55
  52. package/dist/analyzer/typeEvaluator.js.map +1 -1
  53. package/dist/analyzer/typeEvaluatorTypes.d.ts +3 -2
  54. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  55. package/dist/analyzer/typeGuards.js +1 -0
  56. package/dist/analyzer/typeGuards.js.map +1 -1
  57. package/dist/analyzer/typePrinter.js +8 -1
  58. package/dist/analyzer/typePrinter.js.map +1 -1
  59. package/dist/analyzer/typeUtils.js +1 -1
  60. package/dist/analyzer/typeUtils.js.map +1 -1
  61. package/dist/analyzer/typeVarContext.js +2 -2
  62. package/dist/analyzer/typeVarContext.js.map +1 -1
  63. package/dist/analyzer/typedDicts.js +138 -41
  64. package/dist/analyzer/typedDicts.js.map +1 -1
  65. package/dist/analyzer/types.d.ts +7 -1
  66. package/dist/analyzer/types.js +19 -6
  67. package/dist/analyzer/types.js.map +1 -1
  68. package/dist/backgroundAnalysisBase.d.ts +25 -19
  69. package/dist/backgroundAnalysisBase.js +145 -115
  70. package/dist/backgroundAnalysisBase.js.map +1 -1
  71. package/dist/backgroundThreadBase.d.ts +1 -1
  72. package/dist/backgroundThreadBase.js +1 -1
  73. package/dist/backgroundThreadBase.js.map +1 -1
  74. package/dist/commands/dumpFileDebugInfoCommand.js +3 -3
  75. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  76. package/dist/common/configOptions.js +1 -1
  77. package/dist/common/configOptions.js.map +1 -1
  78. package/dist/common/extensibility.d.ts +2 -4
  79. package/dist/common/extensibility.js.map +1 -1
  80. package/dist/common/textRange.js +1 -1
  81. package/dist/common/textRange.js.map +1 -1
  82. package/dist/common/workspaceEditUtils.d.ts +1 -1
  83. package/dist/common/workspaceEditUtils.js +5 -7
  84. package/dist/common/workspaceEditUtils.js.map +1 -1
  85. package/dist/languageServerBase.js +2 -2
  86. package/dist/languageServerBase.js.map +1 -1
  87. package/dist/languageService/autoImporter.d.ts +3 -3
  88. package/dist/languageService/autoImporter.js +3 -3
  89. package/dist/languageService/autoImporter.js.map +1 -1
  90. package/dist/languageService/callHierarchyProvider.js +3 -2
  91. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  92. package/dist/languageService/completionProvider.d.ts +2 -2
  93. package/dist/languageService/completionProvider.js +37 -30
  94. package/dist/languageService/completionProvider.js.map +1 -1
  95. package/dist/languageService/documentSymbolCollector.js +9 -9
  96. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  97. package/dist/languageService/referencesProvider.js +1 -1
  98. package/dist/languageService/referencesProvider.js.map +1 -1
  99. package/dist/languageService/signatureHelpProvider.js +1 -1
  100. package/dist/languageService/signatureHelpProvider.js.map +1 -1
  101. package/dist/languageService/symbolIndexer.d.ts +0 -8
  102. package/dist/languageService/symbolIndexer.js.map +1 -1
  103. package/dist/localization/localize.d.ts +22 -3
  104. package/dist/localization/localize.js +12 -3
  105. package/dist/localization/localize.js.map +1 -1
  106. package/dist/localization/package.nls.en-us.json +14 -5
  107. package/dist/parser/parseNodes.d.ts +8 -8
  108. package/dist/parser/parseNodes.js +20 -10
  109. package/dist/parser/parseNodes.js.map +1 -1
  110. package/dist/parser/parser.d.ts +3 -3
  111. package/dist/parser/parser.js +133 -159
  112. package/dist/parser/parser.js.map +1 -1
  113. package/dist/parser/stringTokenUtils.d.ts +3 -13
  114. package/dist/parser/stringTokenUtils.js +8 -181
  115. package/dist/parser/stringTokenUtils.js.map +1 -1
  116. package/dist/parser/tokenizer.d.ts +3 -0
  117. package/dist/parser/tokenizer.js +211 -24
  118. package/dist/parser/tokenizer.js.map +1 -1
  119. package/dist/parser/tokenizerTypes.d.ts +31 -1
  120. package/dist/parser/tokenizerTypes.js +51 -1
  121. package/dist/parser/tokenizerTypes.js.map +1 -1
  122. package/dist/readonlyAugmentedFileSystem.js +1 -1
  123. package/dist/readonlyAugmentedFileSystem.js.map +1 -1
  124. package/dist/tests/harness/fourslash/testLanguageService.js +1 -1
  125. package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
  126. package/dist/tests/harness/fourslash/testState.js +2 -1
  127. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  128. package/dist/tests/importResolver.test.js +3 -3
  129. package/dist/tests/importResolver.test.js.map +1 -1
  130. package/dist/tests/textRange.test.d.ts +1 -0
  131. package/dist/tests/textRange.test.js +45 -0
  132. package/dist/tests/textRange.test.js.map +1 -0
  133. package/dist/tests/tokenizer.test.js +272 -58
  134. package/dist/tests/tokenizer.test.js.map +1 -1
  135. package/dist/tests/typeEvaluator2.test.js +4 -0
  136. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  137. package/dist/tests/typeEvaluator3.test.js +10 -0
  138. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  139. package/dist/tests/typeEvaluator4.test.js +7 -2
  140. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  141. package/dist/tests/typeEvaluator5.test.js +8 -0
  142. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  143. package/dist/workspaceFactory.js +3 -5
  144. package/dist/workspaceFactory.js.map +1 -1
  145. package/package.json +1 -1
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
34
34
  Object.defineProperty(exports, "__esModule", { value: true });
35
35
  exports.Checker = void 0;
36
36
  const vscode_languageserver_1 = require("vscode-languageserver");
37
+ const collectionUtils_1 = require("../common/collectionUtils");
37
38
  const debug_1 = require("../common/debug");
38
39
  const diagnostic_1 = require("../common/diagnostic");
39
40
  const diagnosticRules_1 = require("../common/diagnosticRules");
@@ -61,9 +62,9 @@ const SymbolNameUtils = __importStar(require("./symbolNameUtils"));
61
62
  const symbolUtils_1 = require("./symbolUtils");
62
63
  const typeEvaluator_1 = require("./typeEvaluator");
63
64
  const typeGuards_1 = require("./typeGuards");
64
- const types_1 = require("./types");
65
65
  const typeUtils_1 = require("./typeUtils");
66
66
  const typeVarContext_1 = require("./typeVarContext");
67
+ const types_1 = require("./types");
67
68
  const deprecatedAliases = new Map([
68
69
  ['Tuple', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.tuple', replacementText: 'tuple' }],
69
70
  ['List', { version: pythonVersion_1.PythonVersion.V3_9, fullName: 'builtins.list', replacementText: 'list' }],
@@ -829,28 +830,47 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
829
830
  return true;
830
831
  }
831
832
  visitStringList(node) {
833
+ // If this is Python 3.11 or older, there are several restrictions
834
+ // associated with f-strings that we need to validate. Determine whether
835
+ // we're within an f-string (or multiple f-strings if nesting is used).
836
+ const fStringContainers = [];
837
+ if (this._fileInfo.executionEnvironment.pythonVersion < pythonVersion_1.PythonVersion.V3_12) {
838
+ let curNode = node;
839
+ while (curNode) {
840
+ if (curNode.nodeType === 27 /* FormatString */) {
841
+ fStringContainers.push(curNode);
842
+ }
843
+ curNode = curNode.parent;
844
+ }
845
+ }
832
846
  for (const stringNode of node.strings) {
833
- if (stringNode.hasUnescapeErrors) {
834
- const unescapedResult = (0, stringTokenUtils_1.getUnescapedString)(stringNode.token);
847
+ const stringTokens = stringNode.nodeType === 49 /* String */ ? [stringNode.token] : stringNode.middleTokens;
848
+ stringTokens.forEach((token) => {
849
+ const unescapedResult = (0, stringTokenUtils_1.getUnescapedString)(token);
850
+ let start = token.start;
851
+ if (token.type === 5 /* String */) {
852
+ start += token.prefixLength + token.quoteMarkLength;
853
+ }
835
854
  unescapedResult.unescapeErrors.forEach((error) => {
836
- const start = stringNode.token.start +
837
- stringNode.token.prefixLength +
838
- stringNode.token.quoteMarkLength +
839
- error.offset;
840
- const textRange = { start, length: error.length };
841
855
  if (error.errorType === 0 /* InvalidEscapeSequence */) {
842
- this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportInvalidStringEscapeSequence, diagnosticRules_1.DiagnosticRule.reportInvalidStringEscapeSequence, localize_1.Localizer.Diagnostic.stringUnsupportedEscape(), textRange);
843
- }
844
- else if (error.errorType === 1 /* EscapeWithinFormatExpression */) {
845
- this._evaluator.addDiagnosticForTextRange(this._fileInfo, 'error', '', localize_1.Localizer.Diagnostic.formatStringEscape(), textRange);
846
- }
847
- else if (error.errorType === 2 /* SingleCloseBraceWithinFormatLiteral */) {
848
- this._evaluator.addDiagnosticForTextRange(this._fileInfo, 'error', '', localize_1.Localizer.Diagnostic.formatStringBrace(), textRange);
849
- }
850
- else if (error.errorType === 3 /* UnterminatedFormatExpression */) {
851
- this._evaluator.addDiagnosticForTextRange(this._fileInfo, 'error', '', localize_1.Localizer.Diagnostic.formatStringUnterminated(), textRange);
856
+ this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportInvalidStringEscapeSequence, diagnosticRules_1.DiagnosticRule.reportInvalidStringEscapeSequence, localize_1.Localizer.Diagnostic.stringUnsupportedEscape(), { start: start + error.offset, length: error.length });
852
857
  }
853
858
  });
859
+ // Prior to Python 3.12, it was not allowed to include a slash in an f-string.
860
+ if (fStringContainers.length > 0) {
861
+ const escapeOffset = token.escapedValue.indexOf('\\');
862
+ if (escapeOffset >= 0) {
863
+ this._evaluator.addDiagnosticForTextRange(this._fileInfo, 'error', '', localize_1.Localizer.Diagnostic.formatStringEscape(), { start, length: 1 });
864
+ }
865
+ }
866
+ });
867
+ // Prior to Python 3.12, it was not allowed to nest strings that
868
+ // used the same quote scheme within an f-string.
869
+ if (fStringContainers.length > 0) {
870
+ const quoteTypeMask = 1 /* SingleQuote */ | 2 /* DoubleQuote */ | 4 /* Triplicate */;
871
+ if (fStringContainers.some((fStringContainer) => (fStringContainer.token.flags & quoteTypeMask) === (stringNode.token.flags & quoteTypeMask))) {
872
+ this._evaluator.addError(localize_1.Localizer.Diagnostic.formatStringNestedQuote(), stringNode);
873
+ }
854
874
  }
855
875
  }
856
876
  if (node.typeAnnotation) {
@@ -862,8 +882,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
862
882
  return true;
863
883
  }
864
884
  visitFormatString(node) {
865
- node.expressions.forEach((formatExpr) => {
866
- this._evaluator.getType(formatExpr);
885
+ node.fieldExpressions.forEach((expr) => {
886
+ this._evaluator.getType(expr);
887
+ });
888
+ node.formatExpressions.forEach((expr) => {
889
+ this._evaluator.getType(expr);
867
890
  });
868
891
  return true;
869
892
  }
@@ -2737,7 +2760,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2737
2760
  const desc = {
2738
2761
  nameParts: moduleName.split('.'),
2739
2762
  leadingDots: 0,
2740
- importedSymbols: [],
2763
+ importedSymbols: new Set(),
2741
2764
  };
2742
2765
  const stdlibPath = this._importResolver.getTypeshedStdLibPath(this._fileInfo.executionEnvironment);
2743
2766
  if (stdlibPath &&
@@ -2783,7 +2806,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2783
2806
  const module = {
2784
2807
  nameParts,
2785
2808
  leadingDots: 0,
2786
- importedSymbols: [],
2809
+ importedSymbols: new Set(),
2787
2810
  };
2788
2811
  // Make sure the module is a potential stdlib one so we don't spend the time
2789
2812
  // searching for the definition.
@@ -3317,7 +3340,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3317
3340
  // variables. We need to make sure these are initialized.
3318
3341
  const abstractSymbols = new Map();
3319
3342
  if (types_1.ClassType.isFinal(classType)) {
3320
- (0, typeUtils_1.getProtocolSymbolsRecursive)(classType, abstractSymbols, 512 /* SupportsAbstractMethods */);
3343
+ (0, typeUtils_1.getProtocolSymbolsRecursive)(classType, abstractSymbols, 1024 /* SupportsAbstractMethods */);
3321
3344
  }
3322
3345
  classType.details.fields.forEach((localSymbol, name) => {
3323
3346
  abstractSymbols.delete(name);
@@ -3812,14 +3835,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3812
3835
  if (!firstOverride) {
3813
3836
  // If this is a method decorated with @override, validate that there
3814
3837
  // is a base class method of the same name.
3815
- this._validateOverrideDecoratorNotPresent(typeOfSymbol);
3838
+ this._validateOverrideDecoratorNotPresent(symbol, typeOfSymbol);
3816
3839
  }
3817
3840
  else {
3818
- this._validateOverrideDecoratorPresent(typeOfSymbol, firstOverride);
3841
+ this._validateOverrideDecoratorPresent(symbol, typeOfSymbol, firstOverride);
3819
3842
  }
3820
3843
  });
3821
3844
  }
3822
- _validateOverrideDecoratorPresent(overrideType, baseMember) {
3845
+ _validateOverrideDecoratorPresent(symbol, overrideType, baseMember) {
3823
3846
  var _a;
3824
3847
  // Skip this check if disabled.
3825
3848
  if (this._fileInfo.diagnosticRuleSet.reportImplicitOverride === 'none') {
@@ -3848,6 +3871,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3848
3871
  if (overrideFunction.details.name === '__init__' || overrideFunction.details.name === '__new__') {
3849
3872
  return;
3850
3873
  }
3874
+ // If the declaration for the override function is not the same as the
3875
+ // declaration for the symbol, the function was probably replaced by a decorator.
3876
+ if (!symbol.getDeclarations().some((decl) => decl === overrideFunction.details.declaration)) {
3877
+ return;
3878
+ }
3851
3879
  const funcNode = overrideFunction.details.declaration.node;
3852
3880
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportImplicitOverride, diagnosticRules_1.DiagnosticRule.reportImplicitOverride, localize_1.Localizer.Diagnostic.overrideDecoratorMissing().format({
3853
3881
  name: funcNode.name.value,
@@ -3857,7 +3885,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3857
3885
  // Determines whether the type is a function or overloaded function with an @override
3858
3886
  // decorator. In this case, an error is reported because no base class has declared
3859
3887
  // a method of the same name.
3860
- _validateOverrideDecoratorNotPresent(overrideType) {
3888
+ _validateOverrideDecoratorNotPresent(symbol, overrideType) {
3861
3889
  var _a;
3862
3890
  let overrideFunction;
3863
3891
  if ((0, types_1.isFunction)(overrideType)) {
@@ -3878,6 +3906,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3878
3906
  if (!(overrideFunction === null || overrideFunction === void 0 ? void 0 : overrideFunction.details.declaration) || !types_1.FunctionType.isOverridden(overrideFunction)) {
3879
3907
  return;
3880
3908
  }
3909
+ // If the declaration for the override function is not the same as the
3910
+ // declaration for the symbol, the function was probably replaced by a decorator.
3911
+ if (!symbol.getDeclarations().some((decl) => decl === overrideFunction.details.declaration)) {
3912
+ return;
3913
+ }
3881
3914
  const funcNode = overrideFunction.details.declaration.node;
3882
3915
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.overriddenMethodNotFound().format({ name: funcNode.name.value }), funcNode.name);
3883
3916
  }
@@ -4422,7 +4455,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4422
4455
  this._evaluator.addUnreachableCode(except, except.exceptSuite);
4423
4456
  }
4424
4457
  }
4425
- exceptionTypesSoFar.push(...typesOfThisExcept);
4458
+ (0, collectionUtils_1.appendArray)(exceptionTypesSoFar, typesOfThisExcept);
4426
4459
  });
4427
4460
  }
4428
4461
  _reportDuplicateImports() {