@zzzen/pyright-internal 1.2.0-dev.20240707 → 1.2.0-dev.20240721

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 (184) hide show
  1. package/dist/analyzer/analyzerNodeInfo.js +74 -46
  2. package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
  3. package/dist/analyzer/binder.js +506 -512
  4. package/dist/analyzer/binder.js.map +1 -1
  5. package/dist/analyzer/checker.js +672 -655
  6. package/dist/analyzer/checker.js.map +1 -1
  7. package/dist/analyzer/codeFlowEngine.d.ts +5 -3
  8. package/dist/analyzer/codeFlowEngine.js +112 -103
  9. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  10. package/dist/analyzer/codeFlowTypes.js +30 -28
  11. package/dist/analyzer/codeFlowTypes.js.map +1 -1
  12. package/dist/analyzer/constraintSolver.js +70 -66
  13. package/dist/analyzer/constraintSolver.js.map +1 -1
  14. package/dist/analyzer/constructorTransform.d.ts +1 -2
  15. package/dist/analyzer/constructorTransform.js +26 -27
  16. package/dist/analyzer/constructorTransform.js.map +1 -1
  17. package/dist/analyzer/constructors.d.ts +2 -2
  18. package/dist/analyzer/constructors.js +95 -190
  19. package/dist/analyzer/constructors.js.map +1 -1
  20. package/dist/analyzer/dataClasses.js +110 -179
  21. package/dist/analyzer/dataClasses.js.map +1 -1
  22. package/dist/analyzer/declarationUtils.js +14 -15
  23. package/dist/analyzer/declarationUtils.js.map +1 -1
  24. package/dist/analyzer/decorators.js +78 -79
  25. package/dist/analyzer/decorators.js.map +1 -1
  26. package/dist/analyzer/enums.js +70 -56
  27. package/dist/analyzer/enums.js.map +1 -1
  28. package/dist/analyzer/functionTransform.js +8 -18
  29. package/dist/analyzer/functionTransform.js.map +1 -1
  30. package/dist/analyzer/importResolver.d.ts +2 -1
  31. package/dist/analyzer/importResolver.js +40 -29
  32. package/dist/analyzer/importResolver.js.map +1 -1
  33. package/dist/analyzer/importStatementUtils.js +27 -27
  34. package/dist/analyzer/importStatementUtils.js.map +1 -1
  35. package/dist/analyzer/namedTuples.js +33 -59
  36. package/dist/analyzer/namedTuples.js.map +1 -1
  37. package/dist/analyzer/operations.js +194 -145
  38. package/dist/analyzer/operations.js.map +1 -1
  39. package/dist/analyzer/packageTypeVerifier.js +66 -62
  40. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  41. package/dist/analyzer/parameterUtils.d.ts +4 -4
  42. package/dist/analyzer/parameterUtils.js +30 -47
  43. package/dist/analyzer/parameterUtils.js.map +1 -1
  44. package/dist/analyzer/parseTreeUtils.d.ts +1 -0
  45. package/dist/analyzer/parseTreeUtils.js +294 -272
  46. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  47. package/dist/analyzer/parseTreeWalker.js +76 -76
  48. package/dist/analyzer/parseTreeWalker.js.map +1 -1
  49. package/dist/analyzer/patternMatching.js +178 -145
  50. package/dist/analyzer/patternMatching.js.map +1 -1
  51. package/dist/analyzer/program.js +1 -1
  52. package/dist/analyzer/program.js.map +1 -1
  53. package/dist/analyzer/properties.js +82 -147
  54. package/dist/analyzer/properties.js.map +1 -1
  55. package/dist/analyzer/protocols.js +29 -25
  56. package/dist/analyzer/protocols.js.map +1 -1
  57. package/dist/analyzer/sourceFile.js +3 -3
  58. package/dist/analyzer/sourceFile.js.map +1 -1
  59. package/dist/analyzer/sourceMapper.js +20 -19
  60. package/dist/analyzer/sourceMapper.js.map +1 -1
  61. package/dist/analyzer/staticExpressions.js +83 -84
  62. package/dist/analyzer/staticExpressions.js.map +1 -1
  63. package/dist/analyzer/testWalker.js +15 -3
  64. package/dist/analyzer/testWalker.js.map +1 -1
  65. package/dist/analyzer/tracePrinter.js +20 -20
  66. package/dist/analyzer/tracePrinter.js.map +1 -1
  67. package/dist/analyzer/typeDocStringUtils.js +25 -25
  68. package/dist/analyzer/typeDocStringUtils.js.map +1 -1
  69. package/dist/analyzer/typeEvaluator.js +2443 -2350
  70. package/dist/analyzer/typeEvaluator.js.map +1 -1
  71. package/dist/analyzer/typeEvaluatorTypes.d.ts +13 -9
  72. package/dist/analyzer/typeEvaluatorTypes.js +7 -1
  73. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  74. package/dist/analyzer/typeGuards.js +212 -215
  75. package/dist/analyzer/typeGuards.js.map +1 -1
  76. package/dist/analyzer/typePrinter.js +118 -115
  77. package/dist/analyzer/typePrinter.js.map +1 -1
  78. package/dist/analyzer/typeStubWriter.js +104 -103
  79. package/dist/analyzer/typeStubWriter.js.map +1 -1
  80. package/dist/analyzer/typeUtils.d.ts +30 -15
  81. package/dist/analyzer/typeUtils.js +534 -436
  82. package/dist/analyzer/typeUtils.js.map +1 -1
  83. package/dist/analyzer/typeVarContext.js +8 -8
  84. package/dist/analyzer/typeVarContext.js.map +1 -1
  85. package/dist/analyzer/typeWalker.js +13 -10
  86. package/dist/analyzer/typeWalker.js.map +1 -1
  87. package/dist/analyzer/typedDicts.js +97 -199
  88. package/dist/analyzer/typedDicts.js.map +1 -1
  89. package/dist/analyzer/types.d.ts +152 -106
  90. package/dist/analyzer/types.js +695 -496
  91. package/dist/analyzer/types.js.map +1 -1
  92. package/dist/commands/dumpFileDebugInfoCommand.js +34 -34
  93. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  94. package/dist/common/fileSystem.d.ts +1 -0
  95. package/dist/common/fileSystem.js.map +1 -1
  96. package/dist/common/fullAccessHost.js +6 -4
  97. package/dist/common/fullAccessHost.js.map +1 -1
  98. package/dist/common/realFileSystem.d.ts +1 -0
  99. package/dist/common/realFileSystem.js +4 -0
  100. package/dist/common/realFileSystem.js.map +1 -1
  101. package/dist/common/textEditTracker.js +14 -14
  102. package/dist/common/textEditTracker.js.map +1 -1
  103. package/dist/languageService/autoImporter.js +10 -10
  104. package/dist/languageService/autoImporter.js.map +1 -1
  105. package/dist/languageService/callHierarchyProvider.js +23 -23
  106. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  107. package/dist/languageService/completionProvider.js +153 -151
  108. package/dist/languageService/completionProvider.js.map +1 -1
  109. package/dist/languageService/definitionProvider.d.ts +1 -1
  110. package/dist/languageService/definitionProvider.js +3 -1
  111. package/dist/languageService/definitionProvider.js.map +1 -1
  112. package/dist/languageService/documentSymbolCollector.js +19 -19
  113. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  114. package/dist/languageService/hoverProvider.js +36 -27
  115. package/dist/languageService/hoverProvider.js.map +1 -1
  116. package/dist/languageService/importSorter.js +8 -8
  117. package/dist/languageService/importSorter.js.map +1 -1
  118. package/dist/languageService/referencesProvider.d.ts +10 -4
  119. package/dist/languageService/referencesProvider.js +30 -18
  120. package/dist/languageService/referencesProvider.js.map +1 -1
  121. package/dist/languageService/renameProvider.js +21 -4
  122. package/dist/languageService/renameProvider.js.map +1 -1
  123. package/dist/languageService/signatureHelpProvider.d.ts +1 -1
  124. package/dist/languageService/signatureHelpProvider.js +6 -6
  125. package/dist/languageService/signatureHelpProvider.js.map +1 -1
  126. package/dist/languageService/symbolIndexer.js +3 -3
  127. package/dist/languageService/symbolIndexer.js.map +1 -1
  128. package/dist/languageService/tooltipUtils.js +13 -13
  129. package/dist/languageService/tooltipUtils.js.map +1 -1
  130. package/dist/localization/localize.d.ts +4 -3
  131. package/dist/localization/localize.js +2 -1
  132. package/dist/localization/localize.js.map +1 -1
  133. package/dist/localization/package.nls.cs.json +0 -1
  134. package/dist/localization/package.nls.de.json +0 -1
  135. package/dist/localization/package.nls.en-us.json +2 -1
  136. package/dist/localization/package.nls.es.json +0 -1
  137. package/dist/localization/package.nls.fr.json +0 -1
  138. package/dist/localization/package.nls.it.json +0 -1
  139. package/dist/localization/package.nls.ja.json +0 -1
  140. package/dist/localization/package.nls.ko.json +0 -1
  141. package/dist/localization/package.nls.pl.json +0 -1
  142. package/dist/localization/package.nls.pt-br.json +0 -1
  143. package/dist/localization/package.nls.qps-ploc.json +0 -1
  144. package/dist/localization/package.nls.ru.json +0 -1
  145. package/dist/localization/package.nls.tr.json +0 -1
  146. package/dist/localization/package.nls.zh-cn.json +0 -1
  147. package/dist/localization/package.nls.zh-tw.json +0 -1
  148. package/dist/parser/parseNodes.d.ts +471 -402
  149. package/dist/parser/parseNodes.js +629 -356
  150. package/dist/parser/parseNodes.js.map +1 -1
  151. package/dist/parser/parser.d.ts +1 -0
  152. package/dist/parser/parser.js +345 -300
  153. package/dist/parser/parser.js.map +1 -1
  154. package/dist/tests/classDeclaration.test.js +14 -14
  155. package/dist/tests/classDeclaration.test.js.map +1 -1
  156. package/dist/tests/fourslash/rename.args.fourslash.d.ts +1 -0
  157. package/dist/tests/fourslash/rename.args.fourslash.js +71 -0
  158. package/dist/tests/fourslash/rename.args.fourslash.js.map +1 -0
  159. package/dist/tests/harness/vfs/filesystem.d.ts +3 -2
  160. package/dist/tests/harness/vfs/filesystem.js +6 -2
  161. package/dist/tests/harness/vfs/filesystem.js.map +1 -1
  162. package/dist/tests/importResolver.test.js +4 -3
  163. package/dist/tests/importResolver.test.js.map +1 -1
  164. package/dist/tests/parseTreeUtils.test.js +5 -5
  165. package/dist/tests/parseTreeUtils.test.js.map +1 -1
  166. package/dist/tests/parser.test.js +8 -8
  167. package/dist/tests/parser.test.js.map +1 -1
  168. package/dist/tests/sourceMapperUtils.test.js +7 -7
  169. package/dist/tests/sourceMapperUtils.test.js.map +1 -1
  170. package/dist/tests/typeEvaluator1.test.js +17 -0
  171. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  172. package/dist/tests/typeEvaluator2.test.js +4 -0
  173. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  174. package/dist/tests/typeEvaluator3.test.js +8 -3
  175. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  176. package/dist/tests/typeEvaluator4.test.js +10 -6
  177. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  178. package/dist/tests/typeEvaluator6.test.js +6 -2
  179. package/dist/tests/typeEvaluator6.test.js.map +1 -1
  180. package/dist/tests/typeEvaluator7.test.js +7 -3
  181. package/dist/tests/typeEvaluator7.test.js.map +1 -1
  182. package/dist/tests/typePrinter.test.js +14 -39
  183. package/dist/tests/typePrinter.test.js.map +1 -1
  184. package/package.json +1 -1
@@ -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.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;
34
+ 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.getEnclosingClassOrFunctionSuite = 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;
36
36
  const AnalyzerNodeInfo = __importStar(require("../analyzer/analyzerNodeInfo"));
37
37
  const core_1 = require("../common/core");
38
38
  const debug_1 = require("../common/debug");
@@ -114,8 +114,8 @@ function findNodeByOffset(node, offset) {
114
114
  if (containingChild) {
115
115
  // For augmented assignments, prefer the dest expression, which is a clone
116
116
  // of the left expression but is used to hold the type of the operation result.
117
- if (node.nodeType === 5 /* ParseNodeType.AugmentedAssignment */ && containingChild === node.leftExpression) {
118
- return node.destExpression;
117
+ if (node.nodeType === 5 /* ParseNodeType.AugmentedAssignment */ && containingChild === node.d.leftExpr) {
118
+ return node.d.destExpr;
119
119
  }
120
120
  return containingChild;
121
121
  }
@@ -128,7 +128,13 @@ function isCompliantWithNodeRangeRules(node) {
128
128
  // 1. Children are all contained within the parent.
129
129
  // 2. Children have non-overlapping ranges.
130
130
  // 3. Children are listed in increasing order.
131
- return node.nodeType !== 3 /* ParseNodeType.Assignment */ && node.nodeType !== 48 /* ParseNodeType.StringList */;
131
+ if (node.nodeType === 3 /* ParseNodeType.Assignment */ || node.nodeType === 48 /* ParseNodeType.StringList */) {
132
+ return false;
133
+ }
134
+ if (node.nodeType === 1 /* ParseNodeType.Argument */ && node.d.isNameSameAsValue) {
135
+ return false;
136
+ }
137
+ return true;
132
138
  }
133
139
  exports.isCompliantWithNodeRangeRules = isCompliantWithNodeRangeRules;
134
140
  function getClassFullName(classNode, moduleName, className) {
@@ -138,7 +144,7 @@ function getClassFullName(classNode, moduleName, className) {
138
144
  while (curNode) {
139
145
  curNode = getEnclosingClass(curNode);
140
146
  if (curNode) {
141
- nameParts.push(curNode.name.value);
147
+ nameParts.push(curNode.d.name.d.value);
142
148
  }
143
149
  }
144
150
  nameParts.push(moduleName);
@@ -155,74 +161,76 @@ function getTypeSourceId(node) {
155
161
  exports.getTypeSourceId = getTypeSourceId;
156
162
  function printArgument(node, flags) {
157
163
  let argStr = '';
158
- if (node.argumentCategory === 1 /* ArgumentCategory.UnpackedList */) {
164
+ if (node.d.argCategory === 1 /* ArgumentCategory.UnpackedList */) {
159
165
  argStr = '*';
160
166
  }
161
- else if (node.argumentCategory === 2 /* ArgumentCategory.UnpackedDictionary */) {
167
+ else if (node.d.argCategory === 2 /* ArgumentCategory.UnpackedDictionary */) {
162
168
  argStr = '**';
163
169
  }
164
- if (node.name) {
165
- argStr += node.name.value + '=';
170
+ if (node.d.name) {
171
+ argStr += node.d.name.d.value + '=';
172
+ }
173
+ if (!node.d.isNameSameAsValue) {
174
+ argStr += printExpression(node.d.valueExpr, flags);
166
175
  }
167
- argStr += printExpression(node.valueExpression, flags);
168
176
  return argStr;
169
177
  }
170
178
  exports.printArgument = printArgument;
171
179
  function printExpression(node, flags = 0 /* PrintExpressionFlags.None */) {
172
180
  switch (node.nodeType) {
173
181
  case 38 /* ParseNodeType.Name */: {
174
- return node.value;
182
+ return node.d.value;
175
183
  }
176
184
  case 35 /* ParseNodeType.MemberAccess */: {
177
- return printExpression(node.leftExpression, flags) + '.' + node.memberName.value;
185
+ return printExpression(node.d.leftExpr, flags) + '.' + node.d.member.d.value;
178
186
  }
179
187
  case 9 /* ParseNodeType.Call */: {
180
- let lhs = printExpression(node.leftExpression, flags);
188
+ let lhs = printExpression(node.d.leftExpr, flags);
181
189
  // Some left-hand expressions must be parenthesized.
182
- if (node.leftExpression.nodeType !== 35 /* ParseNodeType.MemberAccess */ &&
183
- node.leftExpression.nodeType !== 38 /* ParseNodeType.Name */ &&
184
- node.leftExpression.nodeType !== 27 /* ParseNodeType.Index */ &&
185
- node.leftExpression.nodeType !== 9 /* ParseNodeType.Call */) {
190
+ if (node.d.leftExpr.nodeType !== 35 /* ParseNodeType.MemberAccess */ &&
191
+ node.d.leftExpr.nodeType !== 38 /* ParseNodeType.Name */ &&
192
+ node.d.leftExpr.nodeType !== 27 /* ParseNodeType.Index */ &&
193
+ node.d.leftExpr.nodeType !== 9 /* ParseNodeType.Call */) {
186
194
  lhs = `(${lhs})`;
187
195
  }
188
- return lhs + '(' + node.arguments.map((arg) => printArgument(arg, flags)).join(', ') + ')';
196
+ return lhs + '(' + node.d.args.map((arg) => printArgument(arg, flags)).join(', ') + ')';
189
197
  }
190
198
  case 27 /* ParseNodeType.Index */: {
191
- return (printExpression(node.baseExpression, flags) +
199
+ return (printExpression(node.d.leftExpr, flags) +
192
200
  '[' +
193
- node.items.map((item) => printArgument(item, flags)).join(', ') +
194
- (node.trailingComma ? ',' : '') +
201
+ node.d.items.map((item) => printArgument(item, flags)).join(', ') +
202
+ (node.d.trailingComma ? ',' : '') +
195
203
  ']');
196
204
  }
197
205
  case 55 /* ParseNodeType.UnaryOperation */: {
198
- const exprStr = printOperator(node.operator) + printExpression(node.expression, flags);
199
- return node.parenthesized ? `(${exprStr})` : exprStr;
206
+ const exprStr = printOperator(node.d.operator) + printExpression(node.d.expr, flags);
207
+ return node.d.hasParens ? `(${exprStr})` : exprStr;
200
208
  }
201
209
  case 7 /* ParseNodeType.BinaryOperation */: {
202
- const exprStr = printExpression(node.leftExpression, flags) +
210
+ const exprStr = printExpression(node.d.leftExpr, flags) +
203
211
  ' ' +
204
- printOperator(node.operator) +
212
+ printOperator(node.d.operator) +
205
213
  ' ' +
206
- printExpression(node.rightExpression, flags);
207
- return node.parenthesized ? `(${exprStr})` : exprStr;
214
+ printExpression(node.d.rightExpr, flags);
215
+ return node.d.hasParens ? `(${exprStr})` : exprStr;
208
216
  }
209
217
  case 40 /* ParseNodeType.Number */: {
210
- let value = node.value.toString();
218
+ let value = node.d.value.toString();
211
219
  // If it's stored as a bigint, strip off the "n".
212
220
  if (value.endsWith('n')) {
213
221
  value = value.substring(0, value.length - 1);
214
222
  }
215
- if (node.isImaginary) {
223
+ if (node.d.isImaginary) {
216
224
  value += 'j';
217
225
  }
218
226
  return value;
219
227
  }
220
228
  case 48 /* ParseNodeType.StringList */: {
221
- if (flags & 1 /* PrintExpressionFlags.ForwardDeclarations */ && node.typeAnnotation) {
222
- return printExpression(node.typeAnnotation, flags);
229
+ if (flags & 1 /* PrintExpressionFlags.ForwardDeclarations */ && node.d.annotation) {
230
+ return printExpression(node.d.annotation, flags);
223
231
  }
224
232
  else {
225
- return node.strings
233
+ return node.d.strings
226
234
  .map((str) => {
227
235
  return printExpression(str, flags);
228
236
  })
@@ -231,25 +239,25 @@ function printExpression(node, flags = 0 /* PrintExpressionFlags.None */) {
231
239
  }
232
240
  case 49 /* ParseNodeType.String */: {
233
241
  let exprString = '';
234
- if (node.token.flags & 8 /* StringTokenFlags.Raw */) {
242
+ if (node.d.token.flags & 8 /* StringTokenFlags.Raw */) {
235
243
  exprString += 'r';
236
244
  }
237
- if (node.token.flags & 16 /* StringTokenFlags.Unicode */) {
245
+ if (node.d.token.flags & 16 /* StringTokenFlags.Unicode */) {
238
246
  exprString += 'u';
239
247
  }
240
- if (node.token.flags & 32 /* StringTokenFlags.Bytes */) {
248
+ if (node.d.token.flags & 32 /* StringTokenFlags.Bytes */) {
241
249
  exprString += 'b';
242
250
  }
243
- if (node.token.flags & 64 /* StringTokenFlags.Format */) {
251
+ if (node.d.token.flags & 64 /* StringTokenFlags.Format */) {
244
252
  exprString += 'f';
245
253
  }
246
- let escapedString = node.token.escapedValue;
254
+ let escapedString = node.d.token.escapedValue;
247
255
  if ((flags & 2 /* PrintExpressionFlags.DoNotLimitStringLength */) === 0) {
248
256
  const maxStringLength = 32;
249
257
  escapedString = escapedString.slice(0, maxStringLength);
250
258
  }
251
- if (node.token.flags & 4 /* StringTokenFlags.Triplicate */) {
252
- if (node.token.flags & 1 /* StringTokenFlags.SingleQuote */) {
259
+ if (node.d.token.flags & 4 /* StringTokenFlags.Triplicate */) {
260
+ if (node.d.token.flags & 1 /* StringTokenFlags.SingleQuote */) {
253
261
  exprString += `'''${escapedString}'''`;
254
262
  }
255
263
  else {
@@ -257,7 +265,7 @@ function printExpression(node, flags = 0 /* PrintExpressionFlags.None */) {
257
265
  }
258
266
  }
259
267
  else {
260
- if (node.token.flags & 1 /* StringTokenFlags.SingleQuote */) {
268
+ if (node.d.token.flags & 1 /* StringTokenFlags.SingleQuote */) {
261
269
  exprString += `'${escapedString}'`;
262
270
  }
263
271
  else {
@@ -269,7 +277,7 @@ function printExpression(node, flags = 0 /* PrintExpressionFlags.None */) {
269
277
  case 30 /* ParseNodeType.FormatString */: {
270
278
  let exprString = 'f';
271
279
  let escapedString = '';
272
- const itemsToPrint = [...node.middleTokens, ...node.fieldExpressions].sort((a, b) => a.start - b.start);
280
+ const itemsToPrint = [...node.d.middleTokens, ...node.d.fieldExprs].sort((a, b) => a.start - b.start);
273
281
  while (itemsToPrint.length > 0) {
274
282
  const itemToPrint = itemsToPrint.shift();
275
283
  if ('nodeType' in itemToPrint) {
@@ -279,8 +287,8 @@ function printExpression(node, flags = 0 /* PrintExpressionFlags.None */) {
279
287
  escapedString += itemToPrint.escapedValue;
280
288
  }
281
289
  }
282
- if (node.token.flags & 4 /* StringTokenFlags.Triplicate */) {
283
- if (node.token.flags & 1 /* StringTokenFlags.SingleQuote */) {
290
+ if (node.d.token.flags & 4 /* StringTokenFlags.Triplicate */) {
291
+ if (node.d.token.flags & 1 /* StringTokenFlags.SingleQuote */) {
284
292
  exprString += `'''${escapedString}'''`;
285
293
  }
286
294
  else {
@@ -288,7 +296,7 @@ function printExpression(node, flags = 0 /* PrintExpressionFlags.None */) {
288
296
  }
289
297
  }
290
298
  else {
291
- if (node.token.flags & 1 /* StringTokenFlags.SingleQuote */) {
299
+ if (node.d.token.flags & 1 /* StringTokenFlags.SingleQuote */) {
292
300
  exprString += `'${escapedString}'`;
293
301
  }
294
302
  else {
@@ -298,43 +306,43 @@ function printExpression(node, flags = 0 /* PrintExpressionFlags.None */) {
298
306
  return exprString;
299
307
  }
300
308
  case 3 /* ParseNodeType.Assignment */: {
301
- return printExpression(node.leftExpression, flags) + ' = ' + printExpression(node.rightExpression, flags);
309
+ return printExpression(node.d.leftExpr, flags) + ' = ' + printExpression(node.d.rightExpr, flags);
302
310
  }
303
311
  case 4 /* ParseNodeType.AssignmentExpression */: {
304
- return printExpression(node.name, flags) + ' := ' + printExpression(node.rightExpression, flags);
312
+ return printExpression(node.d.name, flags) + ' := ' + printExpression(node.d.rightExpr, flags);
305
313
  }
306
314
  case 54 /* ParseNodeType.TypeAnnotation */: {
307
- return printExpression(node.valueExpression, flags) + ': ' + printExpression(node.typeAnnotation, flags);
315
+ return printExpression(node.d.valueExpr, flags) + ': ' + printExpression(node.d.annotation, flags);
308
316
  }
309
317
  case 5 /* ParseNodeType.AugmentedAssignment */: {
310
- return (printExpression(node.leftExpression, flags) +
318
+ return (printExpression(node.d.leftExpr, flags) +
311
319
  ' ' +
312
- printOperator(node.operator) +
320
+ printOperator(node.d.operator) +
313
321
  ' ' +
314
- printExpression(node.rightExpression, flags));
322
+ printExpression(node.d.rightExpr, flags));
315
323
  }
316
324
  case 6 /* ParseNodeType.Await */: {
317
- const exprStr = 'await ' + printExpression(node.expression, flags);
318
- return node.parenthesized ? `(${exprStr})` : exprStr;
325
+ const exprStr = 'await ' + printExpression(node.d.expr, flags);
326
+ return node.d.hasParens ? `(${exprStr})` : exprStr;
319
327
  }
320
328
  case 51 /* ParseNodeType.Ternary */: {
321
- return (printExpression(node.ifExpression, flags) +
329
+ return (printExpression(node.d.ifExpr, flags) +
322
330
  ' if ' +
323
- printExpression(node.testExpression, flags) +
331
+ printExpression(node.d.testExpr, flags) +
324
332
  ' else ' +
325
- printExpression(node.elseExpression, flags));
333
+ printExpression(node.d.elseExpr, flags));
326
334
  }
327
335
  case 34 /* ParseNodeType.List */: {
328
- const expressions = node.entries.map((expr) => {
336
+ const expressions = node.d.items.map((expr) => {
329
337
  return printExpression(expr, flags);
330
338
  });
331
339
  return `[${expressions.join(', ')}]`;
332
340
  }
333
341
  case 56 /* ParseNodeType.Unpack */: {
334
- return '*' + printExpression(node.expression, flags);
342
+ return '*' + printExpression(node.d.expr, flags);
335
343
  }
336
344
  case 52 /* ParseNodeType.Tuple */: {
337
- const expressions = node.expressions.map((expr) => {
345
+ const expressions = node.d.items.map((expr) => {
338
346
  return printExpression(expr, flags);
339
347
  });
340
348
  if (expressions.length === 1) {
@@ -343,57 +351,57 @@ function printExpression(node, flags = 0 /* PrintExpressionFlags.None */) {
343
351
  return `(${expressions.join(', ')})`;
344
352
  }
345
353
  case 60 /* ParseNodeType.Yield */: {
346
- if (node.expression) {
347
- return 'yield ' + printExpression(node.expression, flags);
354
+ if (node.d.expr) {
355
+ return 'yield ' + printExpression(node.d.expr, flags);
348
356
  }
349
357
  else {
350
358
  return 'yield';
351
359
  }
352
360
  }
353
361
  case 61 /* ParseNodeType.YieldFrom */: {
354
- return 'yield from ' + printExpression(node.expression, flags);
362
+ return 'yield from ' + printExpression(node.d.expr, flags);
355
363
  }
356
364
  case 21 /* ParseNodeType.Ellipsis */: {
357
365
  return '...';
358
366
  }
359
367
  case 11 /* ParseNodeType.Comprehension */: {
360
368
  let listStr = '<ListExpression>';
361
- if ((0, parseNodes_1.isExpressionNode)(node.expression)) {
362
- listStr = printExpression(node.expression, flags);
369
+ if ((0, parseNodes_1.isExpressionNode)(node.d.expr)) {
370
+ listStr = printExpression(node.d.expr, flags);
363
371
  }
364
- else if (node.expression.nodeType === 20 /* ParseNodeType.DictionaryKeyEntry */) {
365
- const keyStr = printExpression(node.expression.keyExpression, flags);
366
- const valueStr = printExpression(node.expression.valueExpression, flags);
372
+ else if (node.d.expr.nodeType === 20 /* ParseNodeType.DictionaryKeyEntry */) {
373
+ const keyStr = printExpression(node.d.expr.d.keyExpr, flags);
374
+ const valueStr = printExpression(node.d.expr.d.valueExpr, flags);
367
375
  listStr = `${keyStr}: ${valueStr}`;
368
376
  }
369
377
  listStr =
370
378
  listStr +
371
379
  ' ' +
372
- node.forIfNodes
380
+ node.d.forIfNodes
373
381
  .map((expr) => {
374
382
  if (expr.nodeType === 12 /* ParseNodeType.ComprehensionFor */) {
375
- return (`${expr.isAsync ? 'async ' : ''}for ` +
376
- printExpression(expr.targetExpression, flags) +
377
- ` in ${printExpression(expr.iterableExpression, flags)}`);
383
+ return (`${expr.d.isAsync ? 'async ' : ''}for ` +
384
+ printExpression(expr.d.targetExpr, flags) +
385
+ ` in ${printExpression(expr.d.iterableExpr, flags)}`);
378
386
  }
379
387
  else {
380
- return `if ${printExpression(expr.testExpression, flags)}`;
388
+ return `if ${printExpression(expr.d.testExpr, flags)}`;
381
389
  }
382
390
  })
383
391
  .join(' ');
384
- return node.isParenthesized ? `(${listStr})` : listStr;
392
+ return node.d.hasParens ? `(${listStr})` : listStr;
385
393
  }
386
394
  case 46 /* ParseNodeType.Slice */: {
387
395
  let result = '';
388
- if (node.startValue || node.endValue || node.stepValue) {
389
- if (node.startValue) {
390
- result += printExpression(node.startValue, flags);
396
+ if (node.d.startValue || node.d.endValue || node.d.stepValue) {
397
+ if (node.d.startValue) {
398
+ result += printExpression(node.d.startValue, flags);
391
399
  }
392
- if (node.endValue) {
393
- result += ': ' + printExpression(node.endValue, flags);
400
+ if (node.d.endValue) {
401
+ result += ': ' + printExpression(node.d.endValue, flags);
394
402
  }
395
- if (node.stepValue) {
396
- result += ': ' + printExpression(node.stepValue, flags);
403
+ if (node.d.stepValue) {
404
+ result += ': ' + printExpression(node.d.stepValue, flags);
397
405
  }
398
406
  }
399
407
  else {
@@ -403,53 +411,52 @@ function printExpression(node, flags = 0 /* PrintExpressionFlags.None */) {
403
411
  }
404
412
  case 33 /* ParseNodeType.Lambda */: {
405
413
  return ('lambda ' +
406
- node.parameters
414
+ node.d.params
407
415
  .map((param) => {
408
416
  let paramStr = '';
409
- if (param.category === 1 /* ParameterCategory.ArgsList */) {
417
+ if (param.d.category === 1 /* ParameterCategory.ArgsList */) {
410
418
  paramStr += '*';
411
419
  }
412
- else if (param.category === 2 /* ParameterCategory.KwargsDict */) {
420
+ else if (param.d.category === 2 /* ParameterCategory.KwargsDict */) {
413
421
  paramStr += '**';
414
422
  }
415
- if (param.name) {
416
- paramStr += param.name.value;
423
+ if (param.d.name) {
424
+ paramStr += param.d.name.d.value;
417
425
  }
418
- else if (param.category === 0 /* ParameterCategory.Simple */) {
426
+ else if (param.d.category === 0 /* ParameterCategory.Simple */) {
419
427
  paramStr += '/';
420
428
  }
421
- if (param.defaultValue) {
422
- paramStr += ' = ' + printExpression(param.defaultValue, flags);
429
+ if (param.d.defaultValue) {
430
+ paramStr += ' = ' + printExpression(param.d.defaultValue, flags);
423
431
  }
424
432
  return paramStr;
425
433
  })
426
434
  .join(', ') +
427
435
  ': ' +
428
- printExpression(node.expression, flags));
436
+ printExpression(node.d.expr, flags));
429
437
  }
430
438
  case 14 /* ParseNodeType.Constant */: {
431
- if (node.constType === 33 /* KeywordType.True */) {
439
+ if (node.d.constType === 33 /* KeywordType.True */) {
432
440
  return 'True';
433
441
  }
434
- else if (node.constType === 15 /* KeywordType.False */) {
442
+ else if (node.d.constType === 15 /* KeywordType.False */) {
435
443
  return 'False';
436
444
  }
437
- else if (node.constType === 9 /* KeywordType.Debug */) {
445
+ else if (node.d.constType === 9 /* KeywordType.Debug */) {
438
446
  return '__debug__';
439
447
  }
440
- else if (node.constType === 26 /* KeywordType.None */) {
448
+ else if (node.d.constType === 26 /* KeywordType.None */) {
441
449
  return 'None';
442
450
  }
443
451
  break;
444
452
  }
445
453
  case 18 /* ParseNodeType.Dictionary */: {
446
- const dictContents = `${node.entries.map((entry) => {
454
+ const dictContents = `${node.d.items.map((entry) => {
447
455
  if (entry.nodeType === 20 /* ParseNodeType.DictionaryKeyEntry */) {
448
- return (`${printExpression(entry.keyExpression, flags)}: ` +
449
- `${printExpression(entry.valueExpression, flags)}`);
456
+ return (`${printExpression(entry.d.keyExpr, flags)}: ` + `${printExpression(entry.d.valueExpr, flags)}`);
450
457
  }
451
458
  else if (entry.nodeType === 19 /* ParseNodeType.DictionaryExpandEntry */) {
452
- return `**${printExpression(entry.expandExpression, flags)}`;
459
+ return `**${printExpression(entry.d.expr, flags)}`;
453
460
  }
454
461
  else {
455
462
  return printExpression(entry, flags);
@@ -461,7 +468,7 @@ function printExpression(node, flags = 0 /* PrintExpressionFlags.None */) {
461
468
  return '{}';
462
469
  }
463
470
  case 45 /* ParseNodeType.Set */: {
464
- return node.entries.map((entry) => printExpression(entry, flags)).join(', ');
471
+ return node.d.items.map((entry) => printExpression(entry, flags)).join(', ');
465
472
  }
466
473
  case 0 /* ParseNodeType.Error */: {
467
474
  return '<Parse Error>';
@@ -528,13 +535,13 @@ exports.printOperator = printOperator;
528
535
  // name in the LHS of a call expression, returns the call node.
529
536
  function getCallForName(node) {
530
537
  var _a, _b, _c;
531
- if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 9 /* ParseNodeType.Call */ && node.parent.leftExpression === node) {
538
+ if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 9 /* ParseNodeType.Call */ && node.parent.d.leftExpr === node) {
532
539
  return node.parent;
533
540
  }
534
541
  if (((_b = node.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 35 /* ParseNodeType.MemberAccess */ &&
535
- node.parent.memberName === node &&
542
+ node.parent.d.member === node &&
536
543
  ((_c = node.parent.parent) === null || _c === void 0 ? void 0 : _c.nodeType) === 9 /* ParseNodeType.Call */ &&
537
- node.parent.parent.leftExpression === node.parent) {
544
+ node.parent.parent.d.leftExpr === node.parent) {
538
545
  return node.parent.parent;
539
546
  }
540
547
  return undefined;
@@ -542,13 +549,13 @@ function getCallForName(node) {
542
549
  exports.getCallForName = getCallForName;
543
550
  function getDecoratorForName(node) {
544
551
  var _a, _b, _c;
545
- if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 16 /* ParseNodeType.Decorator */ && node.parent.expression === node) {
552
+ if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 16 /* ParseNodeType.Decorator */ && node.parent.d.expr === node) {
546
553
  return node.parent;
547
554
  }
548
555
  if (((_b = node.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 35 /* ParseNodeType.MemberAccess */ &&
549
- node.parent.memberName === node &&
556
+ node.parent.d.member === node &&
550
557
  ((_c = node.parent.parent) === null || _c === void 0 ? void 0 : _c.nodeType) === 16 /* ParseNodeType.Decorator */ &&
551
- node.parent.parent.expression === node.parent) {
558
+ node.parent.parent.d.expr === node.parent) {
552
559
  return node.parent.parent;
553
560
  }
554
561
  return undefined;
@@ -621,7 +628,7 @@ function getEnclosingFunction(node) {
621
628
  while (curNode) {
622
629
  if (curNode.nodeType === 31 /* ParseNodeType.Function */) {
623
630
  // Don't treat a decorator as being "enclosed" in the function.
624
- if (!curNode.decorators.some((decorator) => decorator === prevNode)) {
631
+ if (!curNode.d.decorators.some((decorator) => decorator === prevNode)) {
625
632
  return curNode;
626
633
  }
627
634
  }
@@ -681,6 +688,21 @@ function getEnclosingClassOrFunction(node) {
681
688
  return undefined;
682
689
  }
683
690
  exports.getEnclosingClassOrFunction = getEnclosingClassOrFunction;
691
+ function getEnclosingClassOrFunctionSuite(node) {
692
+ var _a, _b;
693
+ let curNode = node.parent;
694
+ while (curNode) {
695
+ if (curNode.nodeType === 50 /* ParseNodeType.Suite */) {
696
+ if (((_a = curNode.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 31 /* ParseNodeType.Function */ ||
697
+ ((_b = curNode.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 10 /* ParseNodeType.Class */) {
698
+ return curNode;
699
+ }
700
+ }
701
+ curNode = curNode.parent;
702
+ }
703
+ return undefined;
704
+ }
705
+ exports.getEnclosingClassOrFunctionSuite = getEnclosingClassOrFunctionSuite;
684
706
  function getEnclosingSuiteOrModule(node, stopAtFunction = false, stopAtLambda = true) {
685
707
  let curNode = node.parent;
686
708
  while (curNode) {
@@ -740,11 +762,11 @@ function getEvaluationScopeNode(node) {
740
762
  let isParamDefaultNode = false;
741
763
  while (curNode) {
742
764
  if (curNode.nodeType === 41 /* ParseNodeType.Parameter */) {
743
- if (prevNode === curNode.name) {
765
+ if (prevNode === curNode.d.name) {
744
766
  // Note that we passed through a parameter name node.
745
767
  isParamNameNode = true;
746
768
  }
747
- else if (prevNode === curNode.defaultValue) {
769
+ else if (prevNode === curNode.d.defaultValue) {
748
770
  // Note that we passed through a parameter default value node.
749
771
  isParamDefaultNode = true;
750
772
  }
@@ -761,10 +783,10 @@ function getEvaluationScopeNode(node) {
761
783
  break;
762
784
  }
763
785
  // Decorators are always evaluated outside of the function scope.
764
- if (curNode.decorators.some((decorator) => decorator === prevNode)) {
786
+ if (curNode.d.decorators.some((decorator) => decorator === prevNode)) {
765
787
  break;
766
788
  }
767
- if (curNode.parameters.some((param) => param === prevNode)) {
789
+ if (curNode.d.params.some((param) => param === prevNode)) {
768
790
  // Default argument expressions are evaluated outside of the function scope.
769
791
  if (isParamDefaultNode) {
770
792
  break;
@@ -775,7 +797,7 @@ function getEvaluationScopeNode(node) {
775
797
  }
776
798
  }
777
799
  }
778
- if (prevNode === curNode.suite) {
800
+ if (prevNode === curNode.d.suite) {
779
801
  if ((0, analyzerNodeInfo_1.getScope)(curNode) !== undefined) {
780
802
  return { node: curNode };
781
803
  }
@@ -783,8 +805,8 @@ function getEvaluationScopeNode(node) {
783
805
  // All other nodes in the function are evaluated in the context
784
806
  // of the type parameter scope if it's present. Otherwise,
785
807
  // they are evaluated within the function's parent scope.
786
- if (curNode.typeParameters) {
787
- const scopeNode = curNode.typeParameters;
808
+ if (curNode.d.typeParams) {
809
+ const scopeNode = curNode.d.typeParams;
788
810
  if ((0, analyzerNodeInfo_1.getScope)(scopeNode) !== undefined) {
789
811
  return { node: scopeNode, useProxyScope: true };
790
812
  }
@@ -792,14 +814,14 @@ function getEvaluationScopeNode(node) {
792
814
  break;
793
815
  }
794
816
  case 33 /* ParseNodeType.Lambda */: {
795
- if (curNode.parameters.some((param) => param === prevNode)) {
817
+ if (curNode.d.params.some((param) => param === prevNode)) {
796
818
  if (isParamNameNode) {
797
819
  if ((0, analyzerNodeInfo_1.getScope)(curNode) !== undefined) {
798
820
  return { node: curNode };
799
821
  }
800
822
  }
801
823
  }
802
- else if (!prevNode || prevNode === curNode.expression) {
824
+ else if (!prevNode || prevNode === curNode.d.expr) {
803
825
  if ((0, analyzerNodeInfo_1.getScope)(curNode) !== undefined) {
804
826
  return { node: curNode };
805
827
  }
@@ -811,10 +833,10 @@ function getEvaluationScopeNode(node) {
811
833
  break;
812
834
  }
813
835
  // Decorators are always evaluated outside of the class scope.
814
- if (curNode.decorators.some((decorator) => decorator === prevNode)) {
836
+ if (curNode.d.decorators.some((decorator) => decorator === prevNode)) {
815
837
  break;
816
838
  }
817
- if (prevNode === curNode.suite) {
839
+ if (prevNode === curNode.d.suite) {
818
840
  if ((0, analyzerNodeInfo_1.getScope)(curNode) !== undefined) {
819
841
  return { node: curNode };
820
842
  }
@@ -822,8 +844,8 @@ function getEvaluationScopeNode(node) {
822
844
  // All other nodes in the class are evaluated in the context
823
845
  // of the type parameter scope if it's present. Otherwise,
824
846
  // they are evaluated within the class' parent scope.
825
- if (curNode.typeParameters) {
826
- const scopeNode = curNode.typeParameters;
847
+ if (curNode.d.typeParams) {
848
+ const scopeNode = curNode.d.typeParams;
827
849
  if ((0, analyzerNodeInfo_1.getScope)(scopeNode) !== undefined) {
828
850
  return { node: scopeNode, useProxyScope: true };
829
851
  }
@@ -834,9 +856,9 @@ function getEvaluationScopeNode(node) {
834
856
  if ((0, analyzerNodeInfo_1.getScope)(curNode) !== undefined) {
835
857
  // The iterable expression of the first subnode of a list comprehension
836
858
  // is evaluated within the scope of its parent.
837
- const isFirstIterableExpr = prevNode === curNode.forIfNodes[0] &&
838
- curNode.forIfNodes[0].nodeType === 12 /* ParseNodeType.ComprehensionFor */ &&
839
- curNode.forIfNodes[0].iterableExpression === prevPrevNode;
859
+ const isFirstIterableExpr = prevNode === curNode.d.forIfNodes[0] &&
860
+ curNode.d.forIfNodes[0].nodeType === 12 /* ParseNodeType.ComprehensionFor */ &&
861
+ curNode.d.forIfNodes[0].d.iterableExpr === prevPrevNode;
840
862
  if (!isFirstIterableExpr) {
841
863
  return { node: curNode };
842
864
  }
@@ -844,8 +866,8 @@ function getEvaluationScopeNode(node) {
844
866
  break;
845
867
  }
846
868
  case 77 /* ParseNodeType.TypeAlias */: {
847
- if (prevNode === curNode.expression && curNode.typeParameters) {
848
- const scopeNode = curNode.typeParameters;
869
+ if (prevNode === curNode.d.expr && curNode.d.typeParams) {
870
+ const scopeNode = curNode.d.typeParams;
849
871
  if ((0, analyzerNodeInfo_1.getScope)(scopeNode) !== undefined) {
850
872
  return { node: scopeNode };
851
873
  }
@@ -875,13 +897,13 @@ function getTypeVarScopeNode(node) {
875
897
  while (curNode) {
876
898
  switch (curNode.nodeType) {
877
899
  case 31 /* ParseNodeType.Function */: {
878
- if (!curNode.decorators.some((decorator) => decorator === prevNode)) {
900
+ if (!curNode.d.decorators.some((decorator) => decorator === prevNode)) {
879
901
  return curNode;
880
902
  }
881
903
  break;
882
904
  }
883
905
  case 10 /* ParseNodeType.Class */: {
884
- if (!curNode.decorators.some((decorator) => decorator === prevNode)) {
906
+ if (!curNode.d.decorators.some((decorator) => decorator === prevNode)) {
885
907
  return curNode;
886
908
  }
887
909
  break;
@@ -917,7 +939,7 @@ function getTypeAnnotationNode(node) {
917
939
  let curNode = node.parent;
918
940
  while (curNode) {
919
941
  if (curNode.nodeType === 54 /* ParseNodeType.TypeAnnotation */) {
920
- if (curNode.typeAnnotation === prevNode) {
942
+ if (curNode.d.annotation === prevNode) {
921
943
  return curNode;
922
944
  }
923
945
  break;
@@ -932,8 +954,8 @@ exports.getTypeAnnotationNode = getTypeAnnotationNode;
932
954
  // left-to-right order. There is one exception, however, when an unpacked
933
955
  // iterable is used after a keyword argument.
934
956
  function getArgumentsByRuntimeOrder(node) {
935
- const positionalArgs = node.arguments.filter((arg) => !arg.name && arg.argumentCategory !== 2 /* ArgumentCategory.UnpackedDictionary */);
936
- const keywordArgs = node.arguments.filter((arg) => !!arg.name || arg.argumentCategory === 2 /* ArgumentCategory.UnpackedDictionary */);
957
+ const positionalArgs = node.d.args.filter((arg) => !arg.d.name && arg.d.argCategory !== 2 /* ArgumentCategory.UnpackedDictionary */);
958
+ const keywordArgs = node.d.args.filter((arg) => !!arg.d.name || arg.d.argCategory === 2 /* ArgumentCategory.UnpackedDictionary */);
937
959
  return positionalArgs.concat(keywordArgs);
938
960
  }
939
961
  exports.getArgumentsByRuntimeOrder = getArgumentsByRuntimeOrder;
@@ -948,7 +970,7 @@ function isFinalAllowedForAssignmentTarget(targetNode) {
948
970
  // Member access expressions like "self.x" are permitted only
949
971
  // within __init__ methods.
950
972
  if (targetNode.nodeType === 35 /* ParseNodeType.MemberAccess */) {
951
- if (targetNode.leftExpression.nodeType !== 38 /* ParseNodeType.Name */) {
973
+ if (targetNode.d.leftExpr.nodeType !== 38 /* ParseNodeType.Name */) {
952
974
  return false;
953
975
  }
954
976
  const classNode = getEnclosingClass(targetNode);
@@ -959,7 +981,7 @@ function isFinalAllowedForAssignmentTarget(targetNode) {
959
981
  if (!methodNode) {
960
982
  return false;
961
983
  }
962
- if (methodNode.name.value !== '__init__') {
984
+ if (methodNode.d.name.d.value !== '__init__') {
963
985
  return false;
964
986
  }
965
987
  return true;
@@ -1012,31 +1034,31 @@ function getParentAnnotationNode(node) {
1012
1034
  let prevNode;
1013
1035
  while (curNode) {
1014
1036
  if (curNode.nodeType === 31 /* ParseNodeType.Function */) {
1015
- if (prevNode === curNode.returnTypeAnnotation) {
1037
+ if (prevNode === curNode.d.returnAnnotation) {
1016
1038
  return prevNode;
1017
1039
  }
1018
1040
  return undefined;
1019
1041
  }
1020
1042
  if (curNode.nodeType === 41 /* ParseNodeType.Parameter */) {
1021
- if (prevNode === curNode.typeAnnotation || prevNode === curNode.typeAnnotationComment) {
1043
+ if (prevNode === curNode.d.annotation || prevNode === curNode.d.annotationComment) {
1022
1044
  return prevNode;
1023
1045
  }
1024
1046
  return undefined;
1025
1047
  }
1026
1048
  if (curNode.nodeType === 3 /* ParseNodeType.Assignment */) {
1027
- if (prevNode === curNode.typeAnnotationComment) {
1049
+ if (prevNode === curNode.d.annotationComment) {
1028
1050
  return prevNode;
1029
1051
  }
1030
1052
  return undefined;
1031
1053
  }
1032
1054
  if (curNode.nodeType === 54 /* ParseNodeType.TypeAnnotation */) {
1033
- if (prevNode === curNode.typeAnnotation) {
1055
+ if (prevNode === curNode.d.annotation) {
1034
1056
  return prevNode;
1035
1057
  }
1036
1058
  return undefined;
1037
1059
  }
1038
1060
  if (curNode.nodeType === 62 /* ParseNodeType.FunctionAnnotation */) {
1039
- if (prevNode === curNode.returnTypeAnnotation || curNode.paramTypeAnnotations.some((p) => p === prevNode)) {
1061
+ if (prevNode === curNode.d.returnAnnotation || curNode.d.paramAnnotations.some((p) => p === prevNode)) {
1040
1062
  (0, debug_1.assert)(!prevNode || (0, parseNodes_1.isExpressionNode)(prevNode));
1041
1063
  return prevNode;
1042
1064
  }
@@ -1054,9 +1076,9 @@ function isNodeContainedWithinNodeType(node, containerType) {
1054
1076
  exports.isNodeContainedWithinNodeType = isNodeContainedWithinNodeType;
1055
1077
  function isSuiteEmpty(node) {
1056
1078
  let sawEllipsis = false;
1057
- for (const statement of node.statements) {
1079
+ for (const statement of node.d.statements) {
1058
1080
  if (statement.nodeType === 47 /* ParseNodeType.StatementList */) {
1059
- for (const substatement of statement.statements) {
1081
+ for (const substatement of statement.d.statements) {
1060
1082
  if (substatement.nodeType === 21 /* ParseNodeType.Ellipsis */) {
1061
1083
  // Allow an ellipsis
1062
1084
  sawEllipsis = true;
@@ -1092,60 +1114,60 @@ exports.containsAwaitNode = containsAwaitNode;
1092
1114
  function isMatchingExpression(reference, expression) {
1093
1115
  if (reference.nodeType === 38 /* ParseNodeType.Name */) {
1094
1116
  if (expression.nodeType === 38 /* ParseNodeType.Name */) {
1095
- return reference.value === expression.value;
1117
+ return reference.d.value === expression.d.value;
1096
1118
  }
1097
1119
  else if (expression.nodeType === 4 /* ParseNodeType.AssignmentExpression */) {
1098
- return reference.value === expression.name.value;
1120
+ return reference.d.value === expression.d.name.d.value;
1099
1121
  }
1100
1122
  return false;
1101
1123
  }
1102
1124
  else if (reference.nodeType === 35 /* ParseNodeType.MemberAccess */ &&
1103
1125
  expression.nodeType === 35 /* ParseNodeType.MemberAccess */) {
1104
- return (isMatchingExpression(reference.leftExpression, expression.leftExpression) &&
1105
- reference.memberName.value === expression.memberName.value);
1126
+ return (isMatchingExpression(reference.d.leftExpr, expression.d.leftExpr) &&
1127
+ reference.d.member.d.value === expression.d.member.d.value);
1106
1128
  }
1107
1129
  else if (reference.nodeType === 27 /* ParseNodeType.Index */ && expression.nodeType === 27 /* ParseNodeType.Index */) {
1108
- if (!isMatchingExpression(reference.baseExpression, expression.baseExpression)) {
1130
+ if (!isMatchingExpression(reference.d.leftExpr, expression.d.leftExpr)) {
1109
1131
  return false;
1110
1132
  }
1111
- if (expression.items.length !== 1 ||
1112
- expression.trailingComma ||
1113
- expression.items[0].name ||
1114
- expression.items[0].argumentCategory !== 0 /* ArgumentCategory.Simple */) {
1133
+ if (expression.d.items.length !== 1 ||
1134
+ expression.d.trailingComma ||
1135
+ expression.d.items[0].d.name ||
1136
+ expression.d.items[0].d.argCategory !== 0 /* ArgumentCategory.Simple */) {
1115
1137
  return false;
1116
1138
  }
1117
- const expr = reference.items[0].valueExpression;
1139
+ const expr = reference.d.items[0].d.valueExpr;
1118
1140
  if (expr.nodeType === 40 /* ParseNodeType.Number */) {
1119
- const subscriptNode = expression.items[0].valueExpression;
1141
+ const subscriptNode = expression.d.items[0].d.valueExpr;
1120
1142
  if (subscriptNode.nodeType !== 40 /* ParseNodeType.Number */ ||
1121
- subscriptNode.isImaginary ||
1122
- !subscriptNode.isInteger) {
1143
+ subscriptNode.d.isImaginary ||
1144
+ !subscriptNode.d.isInteger) {
1123
1145
  return false;
1124
1146
  }
1125
- return expr.value === subscriptNode.value;
1147
+ return expr.d.value === subscriptNode.d.value;
1126
1148
  }
1127
1149
  if (expr.nodeType === 55 /* ParseNodeType.UnaryOperation */ &&
1128
- expr.operator === 33 /* OperatorType.Subtract */ &&
1129
- expr.expression.nodeType === 40 /* ParseNodeType.Number */) {
1130
- const subscriptNode = expression.items[0].valueExpression;
1150
+ expr.d.operator === 33 /* OperatorType.Subtract */ &&
1151
+ expr.d.expr.nodeType === 40 /* ParseNodeType.Number */) {
1152
+ const subscriptNode = expression.d.items[0].d.valueExpr;
1131
1153
  if (subscriptNode.nodeType !== 55 /* ParseNodeType.UnaryOperation */ ||
1132
- subscriptNode.operator !== 33 /* OperatorType.Subtract */ ||
1133
- subscriptNode.expression.nodeType !== 40 /* ParseNodeType.Number */ ||
1134
- subscriptNode.expression.isImaginary ||
1135
- !subscriptNode.expression.isInteger) {
1154
+ subscriptNode.d.operator !== 33 /* OperatorType.Subtract */ ||
1155
+ subscriptNode.d.expr.nodeType !== 40 /* ParseNodeType.Number */ ||
1156
+ subscriptNode.d.expr.d.isImaginary ||
1157
+ !subscriptNode.d.expr.d.isInteger) {
1136
1158
  return false;
1137
1159
  }
1138
- return expr.expression.value === subscriptNode.expression.value;
1160
+ return expr.d.expr.d.value === subscriptNode.d.expr.d.value;
1139
1161
  }
1140
1162
  if (expr.nodeType === 48 /* ParseNodeType.StringList */) {
1141
1163
  const referenceStringListNode = expr;
1142
- const subscriptNode = expression.items[0].valueExpression;
1143
- if (referenceStringListNode.strings.length === 1 &&
1144
- referenceStringListNode.strings[0].nodeType === 49 /* ParseNodeType.String */ &&
1164
+ const subscriptNode = expression.d.items[0].d.valueExpr;
1165
+ if (referenceStringListNode.d.strings.length === 1 &&
1166
+ referenceStringListNode.d.strings[0].nodeType === 49 /* ParseNodeType.String */ &&
1145
1167
  subscriptNode.nodeType === 48 /* ParseNodeType.StringList */ &&
1146
- subscriptNode.strings.length === 1 &&
1147
- subscriptNode.strings[0].nodeType === 49 /* ParseNodeType.String */) {
1148
- return referenceStringListNode.strings[0].value === subscriptNode.strings[0].value;
1168
+ subscriptNode.d.strings.length === 1 &&
1169
+ subscriptNode.d.strings[0].nodeType === 49 /* ParseNodeType.String */) {
1170
+ return referenceStringListNode.d.strings[0].d.value === subscriptNode.d.strings[0].d.value;
1149
1171
  }
1150
1172
  }
1151
1173
  return false;
@@ -1155,12 +1177,12 @@ function isMatchingExpression(reference, expression) {
1155
1177
  exports.isMatchingExpression = isMatchingExpression;
1156
1178
  function isPartialMatchingExpression(reference, expression) {
1157
1179
  if (reference.nodeType === 35 /* ParseNodeType.MemberAccess */) {
1158
- return (isMatchingExpression(reference.leftExpression, expression) ||
1159
- isPartialMatchingExpression(reference.leftExpression, expression));
1180
+ return (isMatchingExpression(reference.d.leftExpr, expression) ||
1181
+ isPartialMatchingExpression(reference.d.leftExpr, expression));
1160
1182
  }
1161
1183
  else if (reference.nodeType === 27 /* ParseNodeType.Index */) {
1162
- return (isMatchingExpression(reference.baseExpression, expression) ||
1163
- isPartialMatchingExpression(reference.baseExpression, expression));
1184
+ return (isMatchingExpression(reference.d.leftExpr, expression) ||
1185
+ isPartialMatchingExpression(reference.d.leftExpr, expression));
1164
1186
  }
1165
1187
  return false;
1166
1188
  }
@@ -1169,7 +1191,7 @@ function isWithinDefaultParamInitializer(node) {
1169
1191
  let curNode = node;
1170
1192
  let prevNode;
1171
1193
  while (curNode) {
1172
- if (curNode.nodeType === 41 /* ParseNodeType.Parameter */ && prevNode === curNode.defaultValue) {
1194
+ if (curNode.nodeType === 41 /* ParseNodeType.Parameter */ && prevNode === curNode.d.defaultValue) {
1173
1195
  return true;
1174
1196
  }
1175
1197
  if (curNode.nodeType === 33 /* ParseNodeType.Lambda */ ||
@@ -1190,26 +1212,26 @@ function isWithinTypeAnnotation(node, requireQuotedAnnotation) {
1190
1212
  let isQuoted = false;
1191
1213
  while (curNode) {
1192
1214
  if (curNode.nodeType === 41 /* ParseNodeType.Parameter */ &&
1193
- (prevNode === curNode.typeAnnotation || prevNode === curNode.typeAnnotationComment)) {
1215
+ (prevNode === curNode.d.annotation || prevNode === curNode.d.annotationComment)) {
1194
1216
  return isQuoted || !requireQuotedAnnotation;
1195
1217
  }
1196
- if (curNode.nodeType === 31 /* ParseNodeType.Function */ && prevNode === curNode.returnTypeAnnotation) {
1218
+ if (curNode.nodeType === 31 /* ParseNodeType.Function */ && prevNode === curNode.d.returnAnnotation) {
1197
1219
  return isQuoted || !requireQuotedAnnotation;
1198
1220
  }
1199
- if (curNode.nodeType === 31 /* ParseNodeType.Function */ && prevNode === curNode.functionAnnotationComment) {
1221
+ if (curNode.nodeType === 31 /* ParseNodeType.Function */ && prevNode === curNode.d.funcAnnotationComment) {
1200
1222
  // Type comments are always considered forward declarations even though
1201
1223
  // they're not "quoted".
1202
1224
  return true;
1203
1225
  }
1204
- if (curNode.nodeType === 54 /* ParseNodeType.TypeAnnotation */ && prevNode === curNode.typeAnnotation) {
1226
+ if (curNode.nodeType === 54 /* ParseNodeType.TypeAnnotation */ && prevNode === curNode.d.annotation) {
1205
1227
  return isQuoted || !requireQuotedAnnotation;
1206
1228
  }
1207
- if (curNode.nodeType === 3 /* ParseNodeType.Assignment */ && prevNode === curNode.typeAnnotationComment) {
1229
+ if (curNode.nodeType === 3 /* ParseNodeType.Assignment */ && prevNode === curNode.d.annotationComment) {
1208
1230
  // Type comments are always considered forward declarations even though
1209
1231
  // they're not "quoted".
1210
1232
  return true;
1211
1233
  }
1212
- if (curNode.nodeType === 48 /* ParseNodeType.StringList */ && prevNode === curNode.typeAnnotation) {
1234
+ if (curNode.nodeType === 48 /* ParseNodeType.StringList */ && prevNode === curNode.d.annotation) {
1213
1235
  isQuoted = true;
1214
1236
  }
1215
1237
  if (curNode.nodeType === 33 /* ParseNodeType.Lambda */ ||
@@ -1228,12 +1250,12 @@ function isWithinAnnotationComment(node) {
1228
1250
  let curNode = node;
1229
1251
  let prevNode;
1230
1252
  while (curNode) {
1231
- if (curNode.nodeType === 31 /* ParseNodeType.Function */ && prevNode === curNode.functionAnnotationComment) {
1253
+ if (curNode.nodeType === 31 /* ParseNodeType.Function */ && prevNode === curNode.d.funcAnnotationComment) {
1232
1254
  // Type comments are always considered forward declarations even though
1233
1255
  // they're not "quoted".
1234
1256
  return true;
1235
1257
  }
1236
- if (curNode.nodeType === 3 /* ParseNodeType.Assignment */ && prevNode === curNode.typeAnnotationComment) {
1258
+ if (curNode.nodeType === 3 /* ParseNodeType.Assignment */ && prevNode === curNode.d.annotationComment) {
1237
1259
  // Type comments are always considered forward declarations even though
1238
1260
  // they're not "quoted".
1239
1261
  return true;
@@ -1273,7 +1295,7 @@ function isWithinAssertExpression(node) {
1273
1295
  while (curNode) {
1274
1296
  switch (curNode.nodeType) {
1275
1297
  case 2 /* ParseNodeType.Assert */: {
1276
- return curNode.testExpression === prevNode;
1298
+ return curNode.d.testExpr === prevNode;
1277
1299
  }
1278
1300
  }
1279
1301
  prevNode = curNode;
@@ -1294,21 +1316,22 @@ function getDocString(statements) {
1294
1316
  return undefined;
1295
1317
  }
1296
1318
  // It's up to the user to convert normalize/convert this as needed.
1297
- const strings = statements[0].statements[0].strings;
1319
+ const strings = statements[0].d.statements[0].d.strings;
1298
1320
  if (strings.length === 1) {
1299
- return strings[0].value;
1321
+ return strings[0].d.value;
1300
1322
  }
1301
- return strings.map((s) => s.value).join('');
1323
+ return strings.map((s) => s.d.value).join('');
1302
1324
  }
1303
1325
  exports.getDocString = getDocString;
1304
1326
  function isDocString(statementList) {
1305
1327
  // If the first statement in the suite isn't a StringNode,
1306
1328
  // assume there is no docString.
1307
- if (statementList.statements.length === 0 || statementList.statements[0].nodeType !== 48 /* ParseNodeType.StringList */) {
1329
+ if (statementList.d.statements.length === 0 ||
1330
+ statementList.d.statements[0].nodeType !== 48 /* ParseNodeType.StringList */) {
1308
1331
  return false;
1309
1332
  }
1310
1333
  // A docstring can consist of multiple joined strings in a single expression.
1311
- const strings = statementList.statements[0].strings;
1334
+ const strings = statementList.d.statements[0].d.strings;
1312
1335
  if (strings.length === 0) {
1313
1336
  return false;
1314
1337
  }
@@ -1330,44 +1353,44 @@ function isAssignmentToDefaultsFollowingNamedTuple(callNode) {
1330
1353
  if (callNode.nodeType !== 9 /* ParseNodeType.Call */ ||
1331
1354
  !callNode.parent ||
1332
1355
  callNode.parent.nodeType !== 3 /* ParseNodeType.Assignment */ ||
1333
- callNode.parent.leftExpression.nodeType !== 38 /* ParseNodeType.Name */ ||
1356
+ callNode.parent.d.leftExpr.nodeType !== 38 /* ParseNodeType.Name */ ||
1334
1357
  !callNode.parent.parent ||
1335
1358
  callNode.parent.parent.nodeType !== 47 /* ParseNodeType.StatementList */) {
1336
1359
  return false;
1337
1360
  }
1338
- const namedTupleAssignedName = callNode.parent.leftExpression.value;
1361
+ const namedTupleAssignedName = callNode.parent.d.leftExpr.d.value;
1339
1362
  const statementList = callNode.parent.parent;
1340
- if (statementList.statements[0] !== callNode.parent ||
1363
+ if (statementList.d.statements[0] !== callNode.parent ||
1341
1364
  !statementList.parent ||
1342
1365
  !(statementList.parent.nodeType === 36 /* ParseNodeType.Module */ ||
1343
1366
  statementList.parent.nodeType === 50 /* ParseNodeType.Suite */)) {
1344
1367
  return false;
1345
1368
  }
1346
1369
  const moduleOrSuite = statementList.parent;
1347
- let statementIndex = moduleOrSuite.statements.findIndex((s) => s === statementList);
1370
+ let statementIndex = moduleOrSuite.d.statements.findIndex((s) => s === statementList);
1348
1371
  if (statementIndex < 0) {
1349
1372
  return false;
1350
1373
  }
1351
1374
  statementIndex++;
1352
- while (statementIndex < moduleOrSuite.statements.length) {
1353
- const nextStatement = moduleOrSuite.statements[statementIndex];
1375
+ while (statementIndex < moduleOrSuite.d.statements.length) {
1376
+ const nextStatement = moduleOrSuite.d.statements[statementIndex];
1354
1377
  if (nextStatement.nodeType !== 47 /* ParseNodeType.StatementList */) {
1355
1378
  break;
1356
1379
  }
1357
- if (((_a = nextStatement.statements[0]) === null || _a === void 0 ? void 0 : _a.nodeType) === 48 /* ParseNodeType.StringList */) {
1380
+ if (((_a = nextStatement.d.statements[0]) === null || _a === void 0 ? void 0 : _a.nodeType) === 48 /* ParseNodeType.StringList */) {
1358
1381
  // Skip over comments
1359
1382
  statementIndex++;
1360
1383
  continue;
1361
1384
  }
1362
- if (((_b = nextStatement.statements[0]) === null || _b === void 0 ? void 0 : _b.nodeType) === 3 /* ParseNodeType.Assignment */) {
1363
- const assignNode = nextStatement.statements[0];
1364
- if (assignNode.leftExpression.nodeType === 35 /* ParseNodeType.MemberAccess */ &&
1365
- assignNode.leftExpression.memberName.value === '__defaults__') {
1366
- const defaultTarget = assignNode.leftExpression.leftExpression;
1385
+ if (((_b = nextStatement.d.statements[0]) === null || _b === void 0 ? void 0 : _b.nodeType) === 3 /* ParseNodeType.Assignment */) {
1386
+ const assignNode = nextStatement.d.statements[0];
1387
+ if (assignNode.d.leftExpr.nodeType === 35 /* ParseNodeType.MemberAccess */ &&
1388
+ assignNode.d.leftExpr.d.member.d.value === '__defaults__') {
1389
+ const defaultTarget = assignNode.d.leftExpr.d.leftExpr;
1367
1390
  if (defaultTarget.nodeType === 35 /* ParseNodeType.MemberAccess */ &&
1368
- defaultTarget.memberName.value === '__new__' &&
1369
- defaultTarget.leftExpression.nodeType === 38 /* ParseNodeType.Name */ &&
1370
- defaultTarget.leftExpression.value === namedTupleAssignedName) {
1391
+ defaultTarget.d.member.d.value === '__new__' &&
1392
+ defaultTarget.d.leftExpr.nodeType === 38 /* ParseNodeType.Name */ &&
1393
+ defaultTarget.d.leftExpr.d.value === namedTupleAssignedName) {
1371
1394
  return true;
1372
1395
  }
1373
1396
  }
@@ -1389,11 +1412,11 @@ class NameNodeWalker extends parseTreeWalker_1.ParseTreeWalker {
1389
1412
  return true;
1390
1413
  }
1391
1414
  visitIndex(node) {
1392
- this.walk(node.baseExpression);
1415
+ this.walk(node.d.leftExpr);
1393
1416
  const prevSubscriptIndex = this._subscriptIndex;
1394
1417
  const prevBaseExpression = this._baseExpression;
1395
- this._baseExpression = node.baseExpression;
1396
- node.items.forEach((item, index) => {
1418
+ this._baseExpression = node.d.leftExpr;
1419
+ node.d.items.forEach((item, index) => {
1397
1420
  this._subscriptIndex = index;
1398
1421
  this.walk(item);
1399
1422
  });
@@ -1442,7 +1465,7 @@ function getCallNodeAndActiveParameterIndex(node, insertionOffset, tokens) {
1442
1465
  }
1443
1466
  curNode = curNode.parent;
1444
1467
  }
1445
- if (!callNode || !callNode.arguments) {
1468
+ if (!callNode || !callNode.d.args) {
1446
1469
  return undefined;
1447
1470
  }
1448
1471
  const endPosition = textRange_1.TextRange.getEnd(callNode);
@@ -1456,7 +1479,7 @@ function getCallNodeAndActiveParameterIndex(node, insertionOffset, tokens) {
1456
1479
  let addedActive = false;
1457
1480
  let activeIndex = -1;
1458
1481
  let activeOrFake = false;
1459
- callNode.arguments.forEach((arg, index) => {
1482
+ callNode.d.args.forEach((arg, index) => {
1460
1483
  if (addedActive) {
1461
1484
  return;
1462
1485
  }
@@ -1491,7 +1514,7 @@ function getCallNodeAndActiveParameterIndex(node, insertionOffset, tokens) {
1491
1514
  }
1492
1515
  });
1493
1516
  if (!addedActive) {
1494
- activeIndex = callNode.arguments.length + 1;
1517
+ activeIndex = callNode.d.args.length + 1;
1495
1518
  }
1496
1519
  return {
1497
1520
  callNode,
@@ -1499,15 +1522,15 @@ function getCallNodeAndActiveParameterIndex(node, insertionOffset, tokens) {
1499
1522
  activeOrFake,
1500
1523
  };
1501
1524
  function isOffsetInsideCallArgs(tokens, node, offset) {
1502
- const argumentStart = node.leftExpression.length > 0 ? textRange_1.TextRange.getEnd(node.leftExpression) - 1 : node.leftExpression.start;
1525
+ const argumentStart = node.d.leftExpr.length > 0 ? textRange_1.TextRange.getEnd(node.d.leftExpr) - 1 : node.d.leftExpr.start;
1503
1526
  // Handle obvious case first.
1504
1527
  const callEndOffset = textRange_1.TextRange.getEnd(node);
1505
1528
  if (offset < argumentStart || callEndOffset < offset) {
1506
1529
  return false;
1507
1530
  }
1508
- if (node.arguments.length > 0) {
1509
- const start = node.arguments[0].start;
1510
- const end = textRange_1.TextRange.getEnd(node.arguments[node.arguments.length - 1]);
1531
+ if (node.d.args.length > 0) {
1532
+ const start = node.d.args[0].start;
1533
+ const end = textRange_1.TextRange.getEnd(node.d.args[node.d.args.length - 1]);
1511
1534
  if (start <= offset && offset < end) {
1512
1535
  return true;
1513
1536
  }
@@ -1786,44 +1809,44 @@ function isWriteAccess(node) {
1786
1809
  while (curNode) {
1787
1810
  switch (curNode.nodeType) {
1788
1811
  case 3 /* ParseNodeType.Assignment */: {
1789
- return prevNode === curNode.leftExpression;
1812
+ return prevNode === curNode.d.leftExpr;
1790
1813
  }
1791
1814
  case 5 /* ParseNodeType.AugmentedAssignment */: {
1792
- return prevNode === curNode.leftExpression;
1815
+ return prevNode === curNode.d.leftExpr;
1793
1816
  }
1794
1817
  case 4 /* ParseNodeType.AssignmentExpression */: {
1795
- return prevNode === curNode.name;
1818
+ return prevNode === curNode.d.name;
1796
1819
  }
1797
1820
  case 17 /* ParseNodeType.Del */: {
1798
1821
  return true;
1799
1822
  }
1800
1823
  case 29 /* ParseNodeType.For */: {
1801
- return prevNode === curNode.targetExpression;
1824
+ return prevNode === curNode.d.targetExpr;
1802
1825
  }
1803
1826
  case 24 /* ParseNodeType.ImportAs */: {
1804
- return (prevNode === curNode.alias ||
1805
- (curNode.module.nameParts.length > 0 && prevNode === curNode.module.nameParts[0]));
1827
+ return (prevNode === curNode.d.alias ||
1828
+ (curNode.d.module.d.nameParts.length > 0 && prevNode === curNode.d.module.d.nameParts[0]));
1806
1829
  }
1807
1830
  case 26 /* ParseNodeType.ImportFromAs */: {
1808
- return prevNode === curNode.alias || (!curNode.alias && prevNode === curNode.name);
1831
+ return prevNode === curNode.d.alias || (!curNode.d.alias && prevNode === curNode.d.name);
1809
1832
  }
1810
1833
  case 35 /* ParseNodeType.MemberAccess */: {
1811
- if (prevNode !== curNode.memberName) {
1834
+ if (prevNode !== curNode.d.member) {
1812
1835
  return false;
1813
1836
  }
1814
1837
  break;
1815
1838
  }
1816
1839
  case 28 /* ParseNodeType.Except */: {
1817
- return prevNode === curNode.name;
1840
+ return prevNode === curNode.d.name;
1818
1841
  }
1819
1842
  case 58 /* ParseNodeType.With */: {
1820
- return curNode.withItems.some((item) => item === prevNode);
1843
+ return curNode.d.withItems.some((item) => item === prevNode);
1821
1844
  }
1822
1845
  case 12 /* ParseNodeType.ComprehensionFor */: {
1823
- return prevNode === curNode.targetExpression;
1846
+ return prevNode === curNode.d.targetExpr;
1824
1847
  }
1825
1848
  case 54 /* ParseNodeType.TypeAnnotation */: {
1826
- if (prevNode === curNode.typeAnnotation) {
1849
+ if (prevNode === curNode.d.annotation) {
1827
1850
  return false;
1828
1851
  }
1829
1852
  break;
@@ -1855,12 +1878,12 @@ function getFileInfoFromNode(node) {
1855
1878
  exports.getFileInfoFromNode = getFileInfoFromNode;
1856
1879
  function isFunctionSuiteEmpty(node) {
1857
1880
  let isEmpty = true;
1858
- node.suite.statements.forEach((statement) => {
1881
+ node.d.suite.d.statements.forEach((statement) => {
1859
1882
  if (statement.nodeType === 0 /* ParseNodeType.Error */) {
1860
1883
  return;
1861
1884
  }
1862
1885
  else if (statement.nodeType === 47 /* ParseNodeType.StatementList */) {
1863
- statement.statements.forEach((subStatement) => {
1886
+ statement.d.statements.forEach((subStatement) => {
1864
1887
  // Allow docstrings, ellipsis, and pass statements.
1865
1888
  if (subStatement.nodeType !== 21 /* ParseNodeType.Ellipsis */ &&
1866
1889
  subStatement.nodeType !== 48 /* ParseNodeType.StringList */ &&
@@ -1877,22 +1900,22 @@ function isFunctionSuiteEmpty(node) {
1877
1900
  }
1878
1901
  exports.isFunctionSuiteEmpty = isFunctionSuiteEmpty;
1879
1902
  function getTypeAnnotationForParameter(node, paramIndex) {
1880
- if (paramIndex >= node.parameters.length) {
1903
+ if (paramIndex >= node.d.params.length) {
1881
1904
  return undefined;
1882
1905
  }
1883
- const param = node.parameters[paramIndex];
1884
- if (param.typeAnnotation) {
1885
- return param.typeAnnotation;
1906
+ const param = node.d.params[paramIndex];
1907
+ if (param.d.annotation) {
1908
+ return param.d.annotation;
1886
1909
  }
1887
- else if (param.typeAnnotationComment) {
1888
- return param.typeAnnotationComment;
1910
+ else if (param.d.annotationComment) {
1911
+ return param.d.annotationComment;
1889
1912
  }
1890
- if (!node.functionAnnotationComment || node.functionAnnotationComment.isParamListEllipsis) {
1913
+ if (!node.d.funcAnnotationComment || node.d.funcAnnotationComment.d.isEllipsis) {
1891
1914
  return undefined;
1892
1915
  }
1893
1916
  let firstCommentAnnotationIndex = 0;
1894
- const paramAnnotations = node.functionAnnotationComment.paramTypeAnnotations;
1895
- if (paramAnnotations.length < node.parameters.length) {
1917
+ const paramAnnotations = node.d.funcAnnotationComment.d.paramAnnotations;
1918
+ if (paramAnnotations.length < node.d.params.length) {
1896
1919
  firstCommentAnnotationIndex = 1;
1897
1920
  }
1898
1921
  const adjIndex = paramIndex - firstCommentAnnotationIndex;
@@ -1909,7 +1932,7 @@ function isImportModuleName(node) {
1909
1932
  exports.isImportModuleName = isImportModuleName;
1910
1933
  function isImportAlias(node) {
1911
1934
  var _a;
1912
- return ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 24 /* ParseNodeType.ImportAs */ && node.parent.alias === node;
1935
+ return ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 24 /* ParseNodeType.ImportAs */ && node.parent.d.alias === node;
1913
1936
  }
1914
1937
  exports.isImportAlias = isImportAlias;
1915
1938
  function isFromImportModuleName(node) {
@@ -1919,12 +1942,12 @@ function isFromImportModuleName(node) {
1919
1942
  exports.isFromImportModuleName = isFromImportModuleName;
1920
1943
  function isFromImportName(node) {
1921
1944
  var _a;
1922
- return ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 26 /* ParseNodeType.ImportFromAs */ && node.parent.name === node;
1945
+ return ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 26 /* ParseNodeType.ImportFromAs */ && node.parent.d.name === node;
1923
1946
  }
1924
1947
  exports.isFromImportName = isFromImportName;
1925
1948
  function isFromImportAlias(node) {
1926
1949
  var _a;
1927
- return ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 26 /* ParseNodeType.ImportFromAs */ && node.parent.alias === node;
1950
+ return ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 26 /* ParseNodeType.ImportFromAs */ && node.parent.d.alias === node;
1928
1951
  }
1929
1952
  exports.isFromImportAlias = isFromImportAlias;
1930
1953
  function isLastNameOfModuleName(node) {
@@ -1933,10 +1956,10 @@ function isLastNameOfModuleName(node) {
1933
1956
  return false;
1934
1957
  }
1935
1958
  const module = node.parent;
1936
- if (module.nameParts.length === 0) {
1959
+ if (module.d.nameParts.length === 0) {
1937
1960
  return false;
1938
1961
  }
1939
- return module.nameParts[module.nameParts.length - 1] === node;
1962
+ return module.d.nameParts[module.d.nameParts.length - 1] === node;
1940
1963
  }
1941
1964
  exports.isLastNameOfModuleName = isLastNameOfModuleName;
1942
1965
  function* getAncestorsIncludingSelf(node) {
@@ -1971,7 +1994,7 @@ function getDottedNameWithGivenNodeAsLastName(node) {
1971
1994
  if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) !== 35 /* ParseNodeType.MemberAccess */) {
1972
1995
  return node;
1973
1996
  }
1974
- if (node.parent.leftExpression === node) {
1997
+ if (node.parent.d.leftExpr === node) {
1975
1998
  return node;
1976
1999
  }
1977
2000
  return node.parent;
@@ -1989,14 +2012,14 @@ function getDecoratorName(decorator) {
1989
2012
  function getExpressionName(node) {
1990
2013
  var _a;
1991
2014
  if (node.nodeType === 38 /* ParseNodeType.Name */ || node.nodeType === 35 /* ParseNodeType.MemberAccess */) {
1992
- return (_a = getDottedName(node)) === null || _a === void 0 ? void 0 : _a.map((n) => n.value).join('.');
2015
+ return (_a = getDottedName(node)) === null || _a === void 0 ? void 0 : _a.map((n) => n.d.value).join('.');
1993
2016
  }
1994
2017
  if (node.nodeType === 9 /* ParseNodeType.Call */) {
1995
- return getExpressionName(node.leftExpression);
2018
+ return getExpressionName(node.d.leftExpr);
1996
2019
  }
1997
2020
  return undefined;
1998
2021
  }
1999
- return getExpressionName(decorator.expression);
2022
+ return getExpressionName(decorator.d.expr);
2000
2023
  }
2001
2024
  exports.getDecoratorName = getDecoratorName;
2002
2025
  function getDottedName(node) {
@@ -2016,10 +2039,10 @@ function getDottedName(node) {
2016
2039
  names.push(node);
2017
2040
  return true;
2018
2041
  }
2019
- names.push(node.memberName);
2020
- if (node.leftExpression.nodeType === 38 /* ParseNodeType.Name */ ||
2021
- node.leftExpression.nodeType === 35 /* ParseNodeType.MemberAccess */) {
2022
- return _getDottedName(node.leftExpression, names);
2042
+ names.push(node.d.member);
2043
+ if (node.d.leftExpr.nodeType === 38 /* ParseNodeType.Name */ ||
2044
+ node.d.leftExpr.nodeType === 35 /* ParseNodeType.MemberAccess */) {
2045
+ return _getDottedName(node.d.leftExpr, names);
2023
2046
  }
2024
2047
  return false;
2025
2048
  }
@@ -2030,9 +2053,8 @@ function getFirstNameOfDottedName(node) {
2030
2053
  if (node.nodeType === 38 /* ParseNodeType.Name */) {
2031
2054
  return node;
2032
2055
  }
2033
- if (node.leftExpression.nodeType === 38 /* ParseNodeType.Name */ ||
2034
- node.leftExpression.nodeType === 35 /* ParseNodeType.MemberAccess */) {
2035
- return getFirstNameOfDottedName(node.leftExpression);
2056
+ if (node.d.leftExpr.nodeType === 38 /* ParseNodeType.Name */ || node.d.leftExpr.nodeType === 35 /* ParseNodeType.MemberAccess */) {
2057
+ return getFirstNameOfDottedName(node.d.leftExpr);
2036
2058
  }
2037
2059
  return undefined;
2038
2060
  }
@@ -2043,7 +2065,7 @@ function isFirstNameOfDottedName(node) {
2043
2065
  if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) !== 35 /* ParseNodeType.MemberAccess */) {
2044
2066
  return true;
2045
2067
  }
2046
- if (node.parent.leftExpression === node) {
2068
+ if (node.parent.d.leftExpr === node) {
2047
2069
  return true;
2048
2070
  }
2049
2071
  return false;
@@ -2055,18 +2077,18 @@ function isLastNameOfDottedName(node) {
2055
2077
  if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) !== 35 /* ParseNodeType.MemberAccess */) {
2056
2078
  return true;
2057
2079
  }
2058
- if (node.parent.leftExpression.nodeType !== 38 /* ParseNodeType.Name */ &&
2059
- node.parent.leftExpression.nodeType !== 35 /* ParseNodeType.MemberAccess */) {
2080
+ if (node.parent.d.leftExpr.nodeType !== 38 /* ParseNodeType.Name */ &&
2081
+ node.parent.d.leftExpr.nodeType !== 35 /* ParseNodeType.MemberAccess */) {
2060
2082
  return false;
2061
2083
  }
2062
- if (node.parent.leftExpression === node) {
2084
+ if (node.parent.d.leftExpr === node) {
2063
2085
  return false;
2064
2086
  }
2065
2087
  return ((_b = node.parent.parent) === null || _b === void 0 ? void 0 : _b.nodeType) !== 35 /* ParseNodeType.MemberAccess */;
2066
2088
  }
2067
2089
  exports.isLastNameOfDottedName = isLastNameOfDottedName;
2068
2090
  function getStringNodeValueRange(node) {
2069
- return getStringValueRange(node.token);
2091
+ return getStringValueRange(node.d.token);
2070
2092
  }
2071
2093
  exports.getStringNodeValueRange = getStringNodeValueRange;
2072
2094
  function getStringValueRange(token) {
@@ -2111,8 +2133,8 @@ function isBlankLine(tokenizerOutput, text, line) {
2111
2133
  }
2112
2134
  exports.isBlankLine = isBlankLine;
2113
2135
  function isUnannotatedFunction(node) {
2114
- return (node.returnTypeAnnotation === undefined &&
2115
- node.parameters.every((param) => param.typeAnnotation === undefined && param.typeAnnotationComment === undefined));
2136
+ return (node.d.returnAnnotation === undefined &&
2137
+ node.d.params.every((param) => param.d.annotation === undefined && param.d.annotationComment === undefined));
2116
2138
  }
2117
2139
  exports.isUnannotatedFunction = isUnannotatedFunction;
2118
2140
  // Verifies that an import of the form "from __future__ import x"
@@ -2122,11 +2144,11 @@ function isValidLocationForFutureImport(node) {
2122
2144
  const module = getModuleNode(node);
2123
2145
  (0, debug_1.assert)(module);
2124
2146
  let sawDocString = false;
2125
- for (const statement of module.statements) {
2147
+ for (const statement of module.d.statements) {
2126
2148
  if (statement.nodeType !== 47 /* ParseNodeType.StatementList */) {
2127
2149
  return false;
2128
2150
  }
2129
- for (const simpleStatement of statement.statements) {
2151
+ for (const simpleStatement of statement.d.statements) {
2130
2152
  if (simpleStatement === node) {
2131
2153
  return true;
2132
2154
  }
@@ -2137,9 +2159,9 @@ function isValidLocationForFutureImport(node) {
2137
2159
  sawDocString = true;
2138
2160
  }
2139
2161
  else if (simpleStatement.nodeType === 25 /* ParseNodeType.ImportFrom */) {
2140
- if (simpleStatement.module.leadingDots !== 0 ||
2141
- simpleStatement.module.nameParts.length !== 1 ||
2142
- simpleStatement.module.nameParts[0].value !== '__future__') {
2162
+ if (simpleStatement.d.module.d.leadingDots !== 0 ||
2163
+ simpleStatement.d.module.d.nameParts.length !== 1 ||
2164
+ simpleStatement.d.module.d.nameParts[0].d.value !== '__future__') {
2143
2165
  return false;
2144
2166
  }
2145
2167
  }
@@ -2277,11 +2299,11 @@ function getVariableDocStringNode(node) {
2277
2299
  (suiteOrModule.nodeType !== 36 /* ParseNodeType.Module */ && suiteOrModule.nodeType !== 50 /* ParseNodeType.Suite */)) {
2278
2300
  return undefined;
2279
2301
  }
2280
- const assignmentIndex = suiteOrModule.statements.findIndex((node) => node === parentNode);
2281
- if (assignmentIndex < 0 || assignmentIndex === suiteOrModule.statements.length - 1) {
2302
+ const assignmentIndex = suiteOrModule.d.statements.findIndex((node) => node === parentNode);
2303
+ if (assignmentIndex < 0 || assignmentIndex === suiteOrModule.d.statements.length - 1) {
2282
2304
  return undefined;
2283
2305
  }
2284
- const nextStatement = suiteOrModule.statements[assignmentIndex + 1];
2306
+ const nextStatement = suiteOrModule.d.statements[assignmentIndex + 1];
2285
2307
  if (nextStatement.nodeType !== 47 /* ParseNodeType.StatementList */ || !isDocString(nextStatement)) {
2286
2308
  return undefined;
2287
2309
  }
@@ -2299,7 +2321,7 @@ function getVariableDocStringNode(node) {
2299
2321
  else {
2300
2322
  const func = getEnclosingFunction(parentNode);
2301
2323
  // If we're within an __init__ method, the attribute docstring is valid.
2302
- if (func && func.name.value === '__init__' && getEnclosingClass(func, /* stopAtFunction */ true)) {
2324
+ if (func && func.d.name.d.value === '__init__' && getEnclosingClass(func, /* stopAtFunction */ true)) {
2303
2325
  isValidContext = true;
2304
2326
  }
2305
2327
  }
@@ -2307,7 +2329,7 @@ function getVariableDocStringNode(node) {
2307
2329
  return undefined;
2308
2330
  }
2309
2331
  // A docstring can consist of multiple joined strings in a single expression.
2310
- return nextStatement.statements[0];
2332
+ return nextStatement.d.statements[0];
2311
2333
  }
2312
2334
  exports.getVariableDocStringNode = getVariableDocStringNode;
2313
2335
  // Creates an ID that identifies this parse node in a way that will
@@ -2316,10 +2338,10 @@ exports.getVariableDocStringNode = getVariableDocStringNode;
2316
2338
  function getScopeIdForNode(node) {
2317
2339
  let name = '';
2318
2340
  if (node.nodeType === 10 /* ParseNodeType.Class */) {
2319
- name = node.name.value;
2341
+ name = node.d.name.d.value;
2320
2342
  }
2321
2343
  else if (node.nodeType === 31 /* ParseNodeType.Function */) {
2322
- name = node.name.value;
2344
+ name = node.d.name.d.value;
2323
2345
  }
2324
2346
  const fileInfo = AnalyzerNodeInfo.getFileInfo(node);
2325
2347
  return `${fileInfo.fileUri.key}.${node.start.toString()}-${name}`;
@@ -2342,7 +2364,7 @@ function getTypeVarScopesForNode(node) {
2342
2364
  }
2343
2365
  exports.getTypeVarScopesForNode = getTypeVarScopesForNode;
2344
2366
  function checkDecorator(node, value) {
2345
- return node.expression.nodeType === 38 /* ParseNodeType.Name */ && node.expression.value === value;
2367
+ return node.d.expr.nodeType === 38 /* ParseNodeType.Name */ && node.d.expr.d.value === value;
2346
2368
  }
2347
2369
  exports.checkDecorator = checkDecorator;
2348
2370
  function isSimpleDefault(node) {
@@ -2352,13 +2374,13 @@ function isSimpleDefault(node) {
2352
2374
  case 35 /* ParseNodeType.MemberAccess */:
2353
2375
  return true;
2354
2376
  case 49 /* ParseNodeType.String */:
2355
- return (node.token.flags & 64 /* StringTokenFlags.Format */) === 0;
2377
+ return (node.d.token.flags & 64 /* StringTokenFlags.Format */) === 0;
2356
2378
  case 48 /* ParseNodeType.StringList */:
2357
- return node.strings.every(isSimpleDefault);
2379
+ return node.d.strings.every(isSimpleDefault);
2358
2380
  case 55 /* ParseNodeType.UnaryOperation */:
2359
- return isSimpleDefault(node.expression);
2381
+ return isSimpleDefault(node.d.expr);
2360
2382
  case 7 /* ParseNodeType.BinaryOperation */:
2361
- return isSimpleDefault(node.leftExpression) && isSimpleDefault(node.rightExpression);
2383
+ return isSimpleDefault(node.d.leftExpr) && isSimpleDefault(node.d.rightExpr);
2362
2384
  default:
2363
2385
  return false;
2364
2386
  }