@zzzen/pyright-internal 1.2.0-dev.20240421 → 1.2.0-dev.20240428

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 (112) hide show
  1. package/dist/analyzer/analyzerNodeInfo.d.ts +1 -4
  2. package/dist/analyzer/analyzerNodeInfo.js +1 -11
  3. package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
  4. package/dist/analyzer/binder.d.ts +0 -2
  5. package/dist/analyzer/binder.js +42 -66
  6. package/dist/analyzer/binder.js.map +1 -1
  7. package/dist/analyzer/checker.js +57 -17
  8. package/dist/analyzer/checker.js.map +1 -1
  9. package/dist/analyzer/constructors.js +31 -13
  10. package/dist/analyzer/constructors.js.map +1 -1
  11. package/dist/analyzer/dataClasses.d.ts +1 -1
  12. package/dist/analyzer/dataClasses.js +23 -11
  13. package/dist/analyzer/dataClasses.js.map +1 -1
  14. package/dist/analyzer/deprecatedSymbols.js +2 -4
  15. package/dist/analyzer/deprecatedSymbols.js.map +1 -1
  16. package/dist/analyzer/namedTuples.js +0 -8
  17. package/dist/analyzer/namedTuples.js.map +1 -1
  18. package/dist/analyzer/packageTypeVerifier.js +10 -10
  19. package/dist/analyzer/parseTreeUtils.d.ts +6 -3
  20. package/dist/analyzer/parseTreeUtils.js +75 -46
  21. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  22. package/dist/analyzer/protocols.js +32 -13
  23. package/dist/analyzer/protocols.js.map +1 -1
  24. package/dist/analyzer/scope.d.ts +14 -7
  25. package/dist/analyzer/scope.js +25 -16
  26. package/dist/analyzer/scope.js.map +1 -1
  27. package/dist/analyzer/scopeUtils.js +3 -3
  28. package/dist/analyzer/scopeUtils.js.map +1 -1
  29. package/dist/analyzer/typeEvaluator.js +232 -200
  30. package/dist/analyzer/typeEvaluator.js.map +1 -1
  31. package/dist/analyzer/typeEvaluatorTypes.d.ts +5 -1
  32. package/dist/analyzer/typeGuards.js +35 -110
  33. package/dist/analyzer/typeGuards.js.map +1 -1
  34. package/dist/analyzer/typeUtils.js +5 -3
  35. package/dist/analyzer/typeUtils.js.map +1 -1
  36. package/dist/analyzer/typedDicts.js +4 -6
  37. package/dist/analyzer/typedDicts.js.map +1 -1
  38. package/dist/analyzer/types.js +10 -0
  39. package/dist/analyzer/types.js.map +1 -1
  40. package/dist/common/console.d.ts +12 -1
  41. package/dist/common/console.js +22 -3
  42. package/dist/common/console.js.map +1 -1
  43. package/dist/common/diagnostic.d.ts +4 -0
  44. package/dist/common/diagnostic.js +10 -4
  45. package/dist/common/diagnostic.js.map +1 -1
  46. package/dist/common/envVarUtils.d.ts +2 -2
  47. package/dist/common/envVarUtils.js.map +1 -1
  48. package/dist/common/languageServerInterface.d.ts +6 -3
  49. package/dist/common/languageServerInterface.js +11 -0
  50. package/dist/common/languageServerInterface.js.map +1 -1
  51. package/dist/common/uri/uri.d.ts +2 -0
  52. package/dist/common/uri/uri.js +3 -1
  53. package/dist/common/uri/uri.js.map +1 -1
  54. package/dist/languageService/callHierarchyProvider.js +4 -1
  55. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  56. package/dist/languageService/completionProvider.js +12 -8
  57. package/dist/languageService/completionProvider.js.map +1 -1
  58. package/dist/languageService/documentSymbolCollector.js +1 -1
  59. package/dist/languageService/referencesProvider.js +3 -2
  60. package/dist/languageService/referencesProvider.js.map +1 -1
  61. package/dist/parser/parseNodes.d.ts +2 -2
  62. package/dist/tests/checker.test.js +8 -0
  63. package/dist/tests/checker.test.js.map +1 -1
  64. package/dist/tests/fourslash/{completions.importDunderNames.fourslash.js → completions.import.dunderNames.fourslash.js} +1 -1
  65. package/dist/tests/fourslash/completions.import.dunderNames.fourslash.js.map +1 -0
  66. package/dist/tests/fourslash/{completions.importsDuplicates.fourslash.js → completions.import.duplicates.fourslash.js} +1 -1
  67. package/dist/tests/fourslash/{completions.importsDuplicates.fourslash.js.map → completions.import.duplicates.fourslash.js.map} +1 -1
  68. package/dist/tests/fourslash/completions.import.exactMatch.fourslash.js +29 -0
  69. package/dist/tests/fourslash/completions.import.exactMatch.fourslash.js.map +1 -0
  70. package/dist/tests/fourslash/completions.import.excludeAlreadyImported.fourslash.js +14 -0
  71. package/dist/tests/fourslash/completions.import.excludeAlreadyImported.fourslash.js.map +1 -0
  72. package/dist/tests/fourslash/completions.import.interimFile.fourslash.disabled.d.ts +1 -0
  73. package/dist/tests/fourslash/{completions.importInterimFile.fourslash.disabled.js → completions.import.interimFile.fourslash.disabled.js} +1 -1
  74. package/dist/tests/fourslash/completions.import.interimFile.fourslash.disabled.js.map +1 -0
  75. package/dist/tests/fourslash/{completions.importPrivateNoPytyped.fourslash.js → completions.import.privateNoPytyped.fourslash.js} +1 -1
  76. package/dist/tests/fourslash/completions.import.privateNoPytyped.fourslash.js.map +1 -0
  77. package/dist/tests/fourslash/{completions.importPytyped.fourslash.js → completions.import.pytyped.fourslash.js} +1 -1
  78. package/dist/tests/fourslash/completions.import.pytyped.fourslash.js.map +1 -0
  79. package/dist/tests/fourslash/{completions.importPytypedLocal.fourslash.js → completions.import.pytypedLocal.fourslash.js} +1 -1
  80. package/dist/tests/fourslash/completions.import.pytypedLocal.fourslash.js.map +1 -0
  81. package/dist/tests/fourslash/completions.import.submodule.fourslash.d.ts +1 -0
  82. package/dist/tests/fourslash/{completions.importSubmodule.fourslash.js → completions.import.submodule.fourslash.js} +1 -1
  83. package/dist/tests/fourslash/completions.import.submodule.fourslash.js.map +1 -0
  84. package/dist/tests/harness/fourslash/testState.js +1 -1
  85. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  86. package/dist/tests/harness/vfs/pathValidation.js +2 -1
  87. package/dist/tests/harness/vfs/pathValidation.js.map +1 -1
  88. package/dist/tests/typeEvaluator1.test.js +1 -1
  89. package/dist/tests/typeEvaluator2.test.js +4 -0
  90. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  91. package/dist/tests/typeEvaluator3.test.js +1 -1
  92. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  93. package/dist/tests/typeEvaluator4.test.js +4 -0
  94. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  95. package/dist/tests/typeEvaluator5.test.js +2 -2
  96. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  97. package/dist/workspaceFactory.d.ts +3 -1
  98. package/dist/workspaceFactory.js.map +1 -1
  99. package/package.json +1 -1
  100. package/dist/tests/fourslash/completions.importDunderNames.fourslash.js.map +0 -1
  101. package/dist/tests/fourslash/completions.importInterimFile.fourslash.disabled.js.map +0 -1
  102. package/dist/tests/fourslash/completions.importPrivateNoPytyped.fourslash.js.map +0 -1
  103. package/dist/tests/fourslash/completions.importPytyped.fourslash.js.map +0 -1
  104. package/dist/tests/fourslash/completions.importPytypedLocal.fourslash.js.map +0 -1
  105. package/dist/tests/fourslash/completions.importSubmodule.fourslash.js.map +0 -1
  106. /package/dist/tests/fourslash/{completions.importDunderNames.fourslash.d.ts → completions.import.dunderNames.fourslash.d.ts} +0 -0
  107. /package/dist/tests/fourslash/{completions.importPrivateNoPytyped.fourslash.d.ts → completions.import.duplicates.fourslash.d.ts} +0 -0
  108. /package/dist/tests/fourslash/{completions.importInterimFile.fourslash.disabled.d.ts → completions.import.exactMatch.fourslash.d.ts} +0 -0
  109. /package/dist/tests/fourslash/{completions.importSubmodule.fourslash.d.ts → completions.import.excludeAlreadyImported.fourslash.d.ts} +0 -0
  110. /package/dist/tests/fourslash/{completions.importPytyped.fourslash.d.ts → completions.import.privateNoPytyped.fourslash.d.ts} +0 -0
  111. /package/dist/tests/fourslash/{completions.importPytypedLocal.fourslash.d.ts → completions.import.pytyped.fourslash.d.ts} +0 -0
  112. /package/dist/tests/fourslash/{completions.importsDuplicates.fourslash.d.ts → completions.import.pytypedLocal.fourslash.d.ts} +0 -0
@@ -165,7 +165,7 @@ class PackageTypeVerifier {
165
165
  };
166
166
  const parseTree = sourceFile.getParserOutput().parseTree;
167
167
  const moduleScope = (0, scopeUtils_1.getScopeForNode)(parseTree);
168
- this._getPublicSymbolsInSymbolTable(publicSymbols, alternateSymbolNames, module, module.name, moduleScope.symbolTable, 3 /* ScopeType.Module */);
168
+ this._getPublicSymbolsInSymbolTable(publicSymbols, alternateSymbolNames, module, module.name, moduleScope.symbolTable, 4 /* ScopeType.Module */);
169
169
  }
170
170
  }
171
171
  }
@@ -185,7 +185,7 @@ class PackageTypeVerifier {
185
185
  const classDecl = typedDecls.find((decl) => decl.type === 6 /* DeclarationType.Class */);
186
186
  if (classDecl) {
187
187
  if ((0, types_1.isInstantiableClass)(symbolType)) {
188
- this._getPublicSymbolsInSymbolTable(publicSymbols, alternateSymbolNames, module, fullName, types_1.ClassType.getSymbolTable(symbolType), 2 /* ScopeType.Class */);
188
+ this._getPublicSymbolsInSymbolTable(publicSymbols, alternateSymbolNames, module, fullName, types_1.ClassType.getSymbolTable(symbolType), 3 /* ScopeType.Class */);
189
189
  }
190
190
  }
191
191
  }
@@ -235,7 +235,7 @@ class PackageTypeVerifier {
235
235
  if (sourceFile) {
236
236
  const parseTree = sourceFile.getParserOutput().parseTree;
237
237
  const moduleScope = (0, scopeUtils_1.getScopeForNode)(parseTree);
238
- this._getTypeKnownStatusForSymbolTable(report, module.name, moduleScope.symbolTable, 3 /* ScopeType.Module */, publicSymbols);
238
+ this._getTypeKnownStatusForSymbolTable(report, module.name, moduleScope.symbolTable, 4 /* ScopeType.Module */, publicSymbols);
239
239
  }
240
240
  else {
241
241
  report.generalDiagnostics.push(new diagnostic_1.Diagnostic(0 /* DiagnosticCategory.Error */, `Could not bind file "${modulePath}"`, (0, textRange_1.getEmptyRange)()));
@@ -590,7 +590,7 @@ class PackageTypeVerifier {
590
590
  // Allow params (like "self" and "cls") to skip declarations because
591
591
  // we're able to synthesize these.
592
592
  const isSynthesized = index === 0 &&
593
- (symbolInfo === null || symbolInfo === void 0 ? void 0 : symbolInfo.scopeType) === 2 /* ScopeType.Class */ &&
593
+ (symbolInfo === null || symbolInfo === void 0 ? void 0 : symbolInfo.scopeType) === 3 /* ScopeType.Class */ &&
594
594
  (types_1.FunctionType.isClassMethod(type) ||
595
595
  types_1.FunctionType.isInstanceMethod(type) ||
596
596
  types_1.FunctionType.isConstructorMethod(type));
@@ -682,12 +682,12 @@ class PackageTypeVerifier {
682
682
  typeKnownStatus: 0 /* TypeKnownStatus.Known */,
683
683
  referenceCount: 1,
684
684
  diagnostics: [],
685
- scopeType: 2 /* ScopeType.Class */,
685
+ scopeType: 3 /* ScopeType.Class */,
686
686
  };
687
687
  this._addSymbol(report, symbolInfo);
688
688
  // Determine whether the class has a proper doc string.
689
689
  this._reportMissingClassDocstring(symbolInfo, type, report);
690
- const symbolTableTypeKnownStatus = this._getTypeKnownStatusForSymbolTable(report, type.details.fullName, types_1.ClassType.getSymbolTable(type), 2 /* ScopeType.Class */, publicSymbols, (name, symbol) => {
690
+ const symbolTableTypeKnownStatus = this._getTypeKnownStatusForSymbolTable(report, type.details.fullName, types_1.ClassType.getSymbolTable(type), 3 /* ScopeType.Class */, publicSymbols, (name, symbol) => {
691
691
  // If the symbol within this class is lacking a type declaration,
692
692
  // see if we can find a same-named symbol in a parent class with
693
693
  // a type declaration.
@@ -758,13 +758,13 @@ class PackageTypeVerifier {
758
758
  typeKnownStatus: 0 /* TypeKnownStatus.Known */,
759
759
  referenceCount: 1,
760
760
  diagnostics: [],
761
- scopeType: 3 /* ScopeType.Module */,
761
+ scopeType: 4 /* ScopeType.Module */,
762
762
  };
763
763
  // Add the symbol for the module if the name isn't relative.
764
764
  if (!type.moduleName.startsWith('.')) {
765
765
  this._addSymbol(report, symbolInfo);
766
766
  }
767
- const symbolTableTypeKnownStatus = this._getTypeKnownStatusForSymbolTable(report, type.moduleName, type.fields, 3 /* ScopeType.Module */, publicSymbols);
767
+ const symbolTableTypeKnownStatus = this._getTypeKnownStatusForSymbolTable(report, type.moduleName, type.fields, 4 /* ScopeType.Module */, publicSymbols);
768
768
  symbolInfo.typeKnownStatus = this._updateKnownStatusIfWorse(symbolInfo.typeKnownStatus, symbolTableTypeKnownStatus);
769
769
  return symbolInfo;
770
770
  }
@@ -920,7 +920,7 @@ class PackageTypeVerifier {
920
920
  return undefined;
921
921
  }
922
922
  _isSymbolTypeImplied(scopeType, name) {
923
- if (scopeType === 2 /* ScopeType.Class */) {
923
+ if (scopeType === 3 /* ScopeType.Class */) {
924
924
  const knownClassSymbols = [
925
925
  '__class__',
926
926
  '__dict__',
@@ -933,7 +933,7 @@ class PackageTypeVerifier {
933
933
  ];
934
934
  return knownClassSymbols.some((sym) => sym === name);
935
935
  }
936
- else if (scopeType === 3 /* ScopeType.Module */) {
936
+ else if (scopeType === 4 /* ScopeType.Module */) {
937
937
  const knownModuleSymbols = [
938
938
  '__all__',
939
939
  '__author__',
@@ -11,6 +11,10 @@ export declare const enum PrintExpressionFlags {
11
11
  ForwardDeclarations = 1,
12
12
  DoNotLimitStringLength = 2
13
13
  }
14
+ export interface EvaluationScopeInfo {
15
+ node: EvaluationScopeNode;
16
+ useProxyScope?: boolean;
17
+ }
14
18
  export declare function getNodeDepth(node: ParseNode): number;
15
19
  export declare function findNodeByPosition(node: ParseNode, position: Position, lines: TextRangeCollection<TextRange>): ParseNode | undefined;
16
20
  export declare function findNodeByOffset(node: ParseNode, offset: number): ParseNode | undefined;
@@ -32,8 +36,8 @@ export declare function getEnclosingLambda(node: ParseNode): LambdaNode | undefi
32
36
  export declare function getEnclosingClassOrFunction(node: ParseNode): FunctionNode | ClassNode | undefined;
33
37
  export declare function getEnclosingSuiteOrModule(node: ParseNode, stopAtFunction?: boolean, stopAtLambda?: boolean): SuiteNode | ModuleNode | undefined;
34
38
  export declare function getEvaluationNodeForAssignmentExpression(node: AssignmentExpressionNode): LambdaNode | FunctionNode | ModuleNode | ClassNode | undefined;
35
- export declare function getEvaluationScopeNode(node: ParseNode): EvaluationScopeNode;
36
- export declare function getTypeVarScopeNode(node: ParseNode): TypeParameterScopeNode;
39
+ export declare function getEvaluationScopeNode(node: ParseNode): EvaluationScopeInfo;
40
+ export declare function getTypeVarScopeNode(node: ParseNode): TypeParameterScopeNode | undefined;
37
41
  export declare function getExecutionScopeNode(node: ParseNode): ExecutionScopeNode;
38
42
  export declare function getTypeAnnotationNode(node: ParseNode): TypeAnnotationNode | undefined;
39
43
  export declare function getArgumentsByRuntimeOrder(node: CallNode): ArgumentNode[];
@@ -52,7 +56,6 @@ export declare function isWithinDefaultParamInitializer(node: ParseNode): boolea
52
56
  export declare function isWithinTypeAnnotation(node: ParseNode, requireQuotedAnnotation: boolean): boolean;
53
57
  export declare function isWithinAnnotationComment(node: ParseNode): boolean;
54
58
  export declare function isWithinLoop(node: ParseNode): boolean;
55
- export declare function isWithinTryBlock(node: ParseNode, treatWithAsTryBlock?: boolean): boolean;
56
59
  export declare function isWithinAssertExpression(node: ParseNode): boolean;
57
60
  export declare function getDocString(statements: StatementNode[]): string | undefined;
58
61
  export declare function isDocString(statementList: StatementListNode): boolean;
@@ -31,8 +31,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
31
31
  return result;
32
32
  };
33
33
  Object.defineProperty(exports, "__esModule", { value: true });
34
- exports.getEnclosingParameter = exports.CallNodeWalker = exports.NameNodeWalker = exports.isAssignmentToDefaultsFollowingNamedTuple = exports.isDocString = exports.getDocString = exports.isWithinAssertExpression = exports.isWithinTryBlock = exports.isWithinLoop = exports.isWithinAnnotationComment = exports.isWithinTypeAnnotation = exports.isWithinDefaultParamInitializer = exports.isPartialMatchingExpression = exports.isMatchingExpression = exports.containsAwaitNode = exports.isSuiteEmpty = exports.isNodeContainedWithinNodeType = exports.getParentAnnotationNode = exports.getParentNodeOfType = exports.isNodeContainedWithin = exports.isRequiredAllowedForAssignmentTarget = exports.isClassVarAllowedForAssignmentTarget = exports.isFinalAllowedForAssignmentTarget = exports.getArgumentsByRuntimeOrder = exports.getTypeAnnotationNode = exports.getExecutionScopeNode = exports.getTypeVarScopeNode = exports.getEvaluationScopeNode = exports.getEvaluationNodeForAssignmentExpression = exports.getEnclosingSuiteOrModule = exports.getEnclosingClassOrFunction = exports.getEnclosingLambda = exports.getEnclosingFunctionEvaluationScope = exports.getEnclosingFunction = exports.getEnclosingClassOrModule = exports.getEnclosingModule = exports.getEnclosingClass = exports.getEnclosingSuite = exports.getDecoratorForName = exports.getCallForName = exports.printOperator = exports.printExpression = exports.printArgument = exports.getTypeSourceId = exports.getClassFullName = exports.isCompliantWithNodeRangeRules = exports.findNodeByOffset = exports.findNodeByPosition = exports.getNodeDepth = exports.PrintExpressionFlags = void 0;
35
- exports.isSimpleDefault = exports.checkDecorator = exports.getTypeVarScopesForNode = exports.getScopeIdForNode = exports.getVariableDocStringNode = exports.operatorSupportsChaining = exports.isValidLocationForFutureImport = exports.isUnannotatedFunction = exports.isBlankLine = exports.getFullStatementRange = exports.getStringValueRange = exports.getStringNodeValueRange = exports.isLastNameOfDottedName = exports.isFirstNameOfDottedName = exports.getFirstNameOfDottedName = exports.getDottedName = exports.getDecoratorName = exports.getDottedNameWithGivenNodeAsLastName = exports.getFirstAncestorOrSelf = exports.getFirstAncestorOrSelfOfKind = exports.getAncestorsIncludingSelf = exports.isLastNameOfModuleName = exports.isFromImportAlias = exports.isFromImportName = exports.isFromImportModuleName = exports.isImportAlias = exports.isImportModuleName = exports.getTypeAnnotationForParameter = exports.isFunctionSuiteEmpty = exports.getFileInfoFromNode = exports.getModuleNode = exports.isWriteAccess = exports.printParseNodeType = exports.getCommentsAtTokenIndex = exports.findTokenAfter = exports.getIndexOfTokenOverlapping = exports.getTokenOverlapping = exports.getTokenAt = exports.getTokenAtIndex = exports.isWhitespace = exports.getTokenAtLeft = exports.getTokenIndexAtLeft = exports.getCallNodeAndActiveParameterIndex = void 0;
34
+ exports.getCallNodeAndActiveParameterIndex = exports.getEnclosingParameter = exports.CallNodeWalker = exports.NameNodeWalker = exports.isAssignmentToDefaultsFollowingNamedTuple = exports.isDocString = exports.getDocString = exports.isWithinAssertExpression = exports.isWithinLoop = exports.isWithinAnnotationComment = exports.isWithinTypeAnnotation = exports.isWithinDefaultParamInitializer = exports.isPartialMatchingExpression = exports.isMatchingExpression = exports.containsAwaitNode = exports.isSuiteEmpty = exports.isNodeContainedWithinNodeType = exports.getParentAnnotationNode = exports.getParentNodeOfType = exports.isNodeContainedWithin = exports.isRequiredAllowedForAssignmentTarget = exports.isClassVarAllowedForAssignmentTarget = exports.isFinalAllowedForAssignmentTarget = exports.getArgumentsByRuntimeOrder = exports.getTypeAnnotationNode = exports.getExecutionScopeNode = exports.getTypeVarScopeNode = exports.getEvaluationScopeNode = exports.getEvaluationNodeForAssignmentExpression = exports.getEnclosingSuiteOrModule = exports.getEnclosingClassOrFunction = exports.getEnclosingLambda = exports.getEnclosingFunctionEvaluationScope = exports.getEnclosingFunction = exports.getEnclosingClassOrModule = exports.getEnclosingModule = exports.getEnclosingClass = exports.getEnclosingSuite = exports.getDecoratorForName = exports.getCallForName = exports.printOperator = exports.printExpression = exports.printArgument = exports.getTypeSourceId = exports.getClassFullName = exports.isCompliantWithNodeRangeRules = exports.findNodeByOffset = exports.findNodeByPosition = exports.getNodeDepth = exports.PrintExpressionFlags = void 0;
35
+ exports.isSimpleDefault = exports.checkDecorator = exports.getTypeVarScopesForNode = exports.getScopeIdForNode = exports.getVariableDocStringNode = exports.operatorSupportsChaining = exports.isValidLocationForFutureImport = exports.isUnannotatedFunction = exports.isBlankLine = exports.getFullStatementRange = exports.getStringValueRange = exports.getStringNodeValueRange = exports.isLastNameOfDottedName = exports.isFirstNameOfDottedName = exports.getFirstNameOfDottedName = exports.getDottedName = exports.getDecoratorName = exports.getDottedNameWithGivenNodeAsLastName = exports.getFirstAncestorOrSelf = exports.getFirstAncestorOrSelfOfKind = exports.getAncestorsIncludingSelf = exports.isLastNameOfModuleName = exports.isFromImportAlias = exports.isFromImportName = exports.isFromImportModuleName = exports.isImportAlias = exports.isImportModuleName = exports.getTypeAnnotationForParameter = exports.isFunctionSuiteEmpty = exports.getFileInfoFromNode = exports.getModuleNode = exports.isWriteAccess = exports.printParseNodeType = exports.getCommentsAtTokenIndex = exports.findTokenAfter = exports.getIndexOfTokenOverlapping = exports.getTokenOverlapping = exports.getTokenAt = exports.getTokenAtIndex = exports.isWhitespace = exports.getTokenAtLeft = exports.getTokenIndexAtLeft = void 0;
36
36
  const AnalyzerNodeInfo = __importStar(require("../analyzer/analyzerNodeInfo"));
37
37
  const core_1 = require("../common/core");
38
38
  const debug_1 = require("../common/debug");
@@ -624,7 +624,7 @@ exports.getEnclosingFunction = getEnclosingFunction;
624
624
  // (for example), it will be considered part of its parent node rather than
625
625
  // the class node.
626
626
  function getEnclosingFunctionEvaluationScope(node) {
627
- let curNode = getEvaluationScopeNode(node);
627
+ let curNode = getEvaluationScopeNode(node).node;
628
628
  while (curNode) {
629
629
  if (curNode.nodeType === 28 /* ParseNodeType.Function */) {
630
630
  return curNode;
@@ -632,7 +632,7 @@ function getEnclosingFunctionEvaluationScope(node) {
632
632
  if (curNode.nodeType === 10 /* ParseNodeType.Class */ || !curNode.parent) {
633
633
  return undefined;
634
634
  }
635
- curNode = getEvaluationScopeNode(curNode.parent);
635
+ curNode = getEvaluationScopeNode(curNode.parent).node;
636
636
  }
637
637
  return undefined;
638
638
  }
@@ -694,7 +694,7 @@ function getEvaluationNodeForAssignmentExpression(node) {
694
694
  // target within a list comprehension is contained within a lambda,
695
695
  // function or module, but not a class.
696
696
  let sawListComprehension = false;
697
- let curNode = getEvaluationScopeNode(node);
697
+ let curNode = getEvaluationScopeNode(node).node;
698
698
  while (curNode !== undefined) {
699
699
  switch (curNode.nodeType) {
700
700
  case 28 /* ParseNodeType.Function */:
@@ -705,7 +705,7 @@ function getEvaluationNodeForAssignmentExpression(node) {
705
705
  return sawListComprehension ? undefined : curNode;
706
706
  case 32 /* ParseNodeType.ListComprehension */:
707
707
  sawListComprehension = true;
708
- curNode = getEvaluationScopeNode(curNode.parent);
708
+ curNode = getEvaluationScopeNode(curNode.parent).node;
709
709
  break;
710
710
  default:
711
711
  return undefined;
@@ -721,26 +721,56 @@ function getEvaluationScopeNode(node) {
721
721
  let prevPrevNode;
722
722
  let curNode = node;
723
723
  let isParamNameNode = false;
724
+ let isParamDefaultNode = false;
724
725
  while (curNode) {
725
- if (curNode.nodeType === 41 /* ParseNodeType.Parameter */ && prevNode === curNode.name) {
726
- // Note that we passed through a parameter name node.
727
- isParamNameNode = true;
726
+ if (curNode.nodeType === 41 /* ParseNodeType.Parameter */) {
727
+ if (prevNode === curNode.name) {
728
+ // Note that we passed through a parameter name node.
729
+ isParamNameNode = true;
730
+ }
731
+ else if (prevNode === curNode.defaultValue) {
732
+ // Note that we passed through a parameter default value node.
733
+ isParamDefaultNode = true;
734
+ }
728
735
  }
729
736
  // We found a scope associated with this node. In most cases,
730
737
  // we'll return this scope, but in a few cases we need to return
731
738
  // the enclosing scope instead.
732
739
  switch (curNode.nodeType) {
740
+ case 76 /* ParseNodeType.TypeParameterList */: {
741
+ return { node: curNode, useProxyScope: true };
742
+ }
733
743
  case 28 /* ParseNodeType.Function */: {
744
+ if (!prevNode) {
745
+ break;
746
+ }
747
+ // Decorators are always evaluated outside of the function scope.
748
+ if (curNode.decorators.some((decorator) => decorator === prevNode)) {
749
+ break;
750
+ }
734
751
  if (curNode.parameters.some((param) => param === prevNode)) {
752
+ // Default argument expressions are evaluated outside of the function scope.
753
+ if (isParamDefaultNode) {
754
+ break;
755
+ }
735
756
  if (isParamNameNode) {
736
757
  if ((0, analyzerNodeInfo_1.getScope)(curNode) !== undefined) {
737
- return curNode;
758
+ return { node: curNode };
738
759
  }
739
760
  }
740
761
  }
741
- else if (prevNode === curNode.suite) {
762
+ if (prevNode === curNode.suite) {
742
763
  if ((0, analyzerNodeInfo_1.getScope)(curNode) !== undefined) {
743
- return curNode;
764
+ return { node: curNode };
765
+ }
766
+ }
767
+ // All other nodes in the function are evaluated in the context
768
+ // of the type parameter scope if it's present. Otherwise,
769
+ // they are evaluated within the function's parent scope.
770
+ if (curNode.typeParameters) {
771
+ const scopeNode = curNode.typeParameters;
772
+ if ((0, analyzerNodeInfo_1.getScope)(scopeNode) !== undefined) {
773
+ return { node: scopeNode, useProxyScope: true };
744
774
  }
745
775
  }
746
776
  break;
@@ -749,21 +779,37 @@ function getEvaluationScopeNode(node) {
749
779
  if (curNode.parameters.some((param) => param === prevNode)) {
750
780
  if (isParamNameNode) {
751
781
  if ((0, analyzerNodeInfo_1.getScope)(curNode) !== undefined) {
752
- return curNode;
782
+ return { node: curNode };
753
783
  }
754
784
  }
755
785
  }
756
786
  else if (!prevNode || prevNode === curNode.expression) {
757
787
  if ((0, analyzerNodeInfo_1.getScope)(curNode) !== undefined) {
758
- return curNode;
788
+ return { node: curNode };
759
789
  }
760
790
  }
761
791
  break;
762
792
  }
763
793
  case 10 /* ParseNodeType.Class */: {
794
+ if (!prevNode) {
795
+ break;
796
+ }
797
+ // Decorators are always evaluated outside of the class scope.
798
+ if (curNode.decorators.some((decorator) => decorator === prevNode)) {
799
+ break;
800
+ }
764
801
  if (prevNode === curNode.suite) {
765
802
  if ((0, analyzerNodeInfo_1.getScope)(curNode) !== undefined) {
766
- return curNode;
803
+ return { node: curNode };
804
+ }
805
+ }
806
+ // All other nodes in the class are evaluated in the context
807
+ // of the type parameter scope if it's present. Otherwise,
808
+ // they are evaluated within the class' parent scope.
809
+ if (curNode.typeParameters) {
810
+ const scopeNode = curNode.typeParameters;
811
+ if ((0, analyzerNodeInfo_1.getScope)(scopeNode) !== undefined) {
812
+ return { node: scopeNode, useProxyScope: true };
767
813
  }
768
814
  }
769
815
  break;
@@ -776,14 +822,23 @@ function getEvaluationScopeNode(node) {
776
822
  curNode.forIfNodes[0].nodeType === 33 /* ParseNodeType.ListComprehensionFor */ &&
777
823
  curNode.forIfNodes[0].iterableExpression === prevPrevNode;
778
824
  if (!isFirstIterableExpr) {
779
- return curNode;
825
+ return { node: curNode };
826
+ }
827
+ }
828
+ break;
829
+ }
830
+ case 77 /* ParseNodeType.TypeAlias */: {
831
+ if (prevNode === curNode.expression && curNode.typeParameters) {
832
+ const scopeNode = curNode.typeParameters;
833
+ if ((0, analyzerNodeInfo_1.getScope)(scopeNode) !== undefined) {
834
+ return { node: scopeNode };
780
835
  }
781
836
  }
782
837
  break;
783
838
  }
784
839
  case 36 /* ParseNodeType.Module */: {
785
840
  if ((0, analyzerNodeInfo_1.getScope)(curNode) !== undefined) {
786
- return curNode;
841
+ return { node: curNode };
787
842
  }
788
843
  break;
789
844
  }
@@ -797,7 +852,7 @@ function getEvaluationScopeNode(node) {
797
852
  }
798
853
  exports.getEvaluationScopeNode = getEvaluationScopeNode;
799
854
  // Returns the parse node corresponding to the function, class, or type alias
800
- // that contains the specified typeVar reference.
855
+ // that potentially provides the scope for a type parameter.
801
856
  function getTypeVarScopeNode(node) {
802
857
  let prevNode;
803
858
  let curNode = node;
@@ -828,13 +883,13 @@ exports.getTypeVarScopeNode = getTypeVarScopeNode;
828
883
  // Returns the parse node corresponding to the scope that is used
829
884
  // for executing the code referenced in the specified node.
830
885
  function getExecutionScopeNode(node) {
831
- let evaluationScope = getEvaluationScopeNode(node);
886
+ let evaluationScope = getEvaluationScopeNode(node).node;
832
887
  // Classes are not considered execution scope because they are executed
833
888
  // within the context of their containing module or function. Likewise, list
834
889
  // comprehensions are executed within their container.
835
890
  while (evaluationScope.nodeType === 10 /* ParseNodeType.Class */ ||
836
891
  evaluationScope.nodeType === 32 /* ParseNodeType.ListComprehension */) {
837
- evaluationScope = getEvaluationScopeNode(evaluationScope.parent);
892
+ evaluationScope = getEvaluationScopeNode(evaluationScope.parent).node;
838
893
  }
839
894
  return evaluationScope;
840
895
  }
@@ -1196,32 +1251,6 @@ function isWithinLoop(node) {
1196
1251
  return false;
1197
1252
  }
1198
1253
  exports.isWithinLoop = isWithinLoop;
1199
- function isWithinTryBlock(node, treatWithAsTryBlock = false) {
1200
- let curNode = node;
1201
- let prevNode;
1202
- while (curNode) {
1203
- switch (curNode.nodeType) {
1204
- case 53 /* ParseNodeType.Try */: {
1205
- return curNode.trySuite === prevNode;
1206
- }
1207
- case 58 /* ParseNodeType.With */: {
1208
- if (treatWithAsTryBlock && curNode.suite === prevNode) {
1209
- return true;
1210
- }
1211
- break;
1212
- }
1213
- case 28 /* ParseNodeType.Function */:
1214
- case 36 /* ParseNodeType.Module */:
1215
- case 10 /* ParseNodeType.Class */: {
1216
- return false;
1217
- }
1218
- }
1219
- prevNode = curNode;
1220
- curNode = curNode.parent;
1221
- }
1222
- return false;
1223
- }
1224
- exports.isWithinTryBlock = isWithinTryBlock;
1225
1254
  function isWithinAssertExpression(node) {
1226
1255
  let curNode = node;
1227
1256
  let prevNode;