@microsoft/powerquery-language-services 0.3.41 → 0.5.0

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 (232) hide show
  1. package/lib/powerquery-language-services/analysis/analysis.d.ts +17 -9
  2. package/lib/powerquery-language-services/analysis/analysisBase.d.ts +41 -27
  3. package/lib/powerquery-language-services/analysis/analysisBase.js +519 -179
  4. package/lib/powerquery-language-services/analysis/analysisBase.js.map +1 -1
  5. package/lib/powerquery-language-services/analysis/analysisSettings.d.ts +8 -11
  6. package/lib/powerquery-language-services/analysis/analysisUtils.d.ts +1 -2
  7. package/lib/powerquery-language-services/analysis/analysisUtils.js +20 -2
  8. package/lib/powerquery-language-services/analysis/analysisUtils.js.map +1 -1
  9. package/lib/powerquery-language-services/analysis/documentAnalysis.d.ts +4 -6
  10. package/lib/powerquery-language-services/analysis/documentAnalysis.js +4 -11
  11. package/lib/powerquery-language-services/analysis/documentAnalysis.js.map +1 -1
  12. package/lib/powerquery-language-services/analysis/memoizedAnalysis.d.ts +18 -0
  13. package/lib/powerquery-language-services/analysis/memoizedAnalysis.js +66 -0
  14. package/lib/powerquery-language-services/analysis/memoizedAnalysis.js.map +1 -0
  15. package/lib/powerquery-language-services/formatter.d.ts +1 -1
  16. package/lib/powerquery-language-services/formatter.js +2 -4
  17. package/lib/powerquery-language-services/formatter.js.map +1 -1
  18. package/lib/powerquery-language-services/index.d.ts +0 -1
  19. package/lib/powerquery-language-services/index.js +0 -1
  20. package/lib/powerquery-language-services/index.js.map +1 -1
  21. package/lib/powerquery-language-services/inspection/activeNode/activeNode.d.ts +5 -5
  22. package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.d.ts +5 -5
  23. package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js +78 -83
  24. package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js.map +1 -1
  25. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.d.ts +2 -2
  26. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js +37 -40
  27. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js.map +1 -1
  28. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.d.ts +7 -7
  29. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js +17 -17
  30. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js.map +1 -1
  31. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.d.ts +3 -3
  32. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js +43 -43
  33. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js.map +1 -1
  34. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js +7 -7
  35. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js.map +1 -1
  36. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js +7 -7
  37. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js.map +1 -1
  38. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js +4 -4
  39. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js.map +1 -1
  40. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js +20 -22
  41. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js.map +1 -1
  42. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js +4 -4
  43. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js.map +1 -1
  44. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js +9 -9
  45. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js.map +1 -1
  46. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.d.ts +1 -1
  47. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.js +5 -5
  48. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.js.map +1 -1
  49. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.js +4 -4
  50. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.js.map +1 -1
  51. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/commonTypes.d.ts +1 -1
  52. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.d.ts +2 -2
  53. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js +21 -26
  54. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js.map +1 -1
  55. package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.d.ts +2 -2
  56. package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js +21 -21
  57. package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js.map +1 -1
  58. package/lib/powerquery-language-services/inspection/autocomplete/commonTypes.d.ts +1 -1
  59. package/lib/powerquery-language-services/inspection/autocomplete/task.d.ts +2 -2
  60. package/lib/powerquery-language-services/inspection/autocomplete/task.js +12 -12
  61. package/lib/powerquery-language-services/inspection/autocomplete/task.js.map +1 -1
  62. package/lib/powerquery-language-services/inspection/commonTypes.d.ts +2 -2
  63. package/lib/powerquery-language-services/inspection/deferenceIdentifier.js +12 -13
  64. package/lib/powerquery-language-services/inspection/deferenceIdentifier.js.map +1 -1
  65. package/lib/powerquery-language-services/inspection/expectedType.d.ts +3 -3
  66. package/lib/powerquery-language-services/inspection/expectedType.js +8 -8
  67. package/lib/powerquery-language-services/inspection/expectedType.js.map +1 -1
  68. package/lib/powerquery-language-services/inspection/invokeExpression/common.d.ts +2 -2
  69. package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.d.ts +2 -2
  70. package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js +24 -24
  71. package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js.map +1 -1
  72. package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js +17 -18
  73. package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js.map +1 -1
  74. package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js +20 -22
  75. package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js.map +1 -1
  76. package/lib/powerquery-language-services/inspection/scope/scope.d.ts +2 -2
  77. package/lib/powerquery-language-services/inspection/scope/scopeInspection.js +47 -45
  78. package/lib/powerquery-language-services/inspection/scope/scopeInspection.js.map +1 -1
  79. package/lib/powerquery-language-services/inspection/scope/scopeUtils.d.ts +7 -7
  80. package/lib/powerquery-language-services/inspection/scope/scopeUtils.js +15 -15
  81. package/lib/powerquery-language-services/inspection/scope/scopeUtils.js.map +1 -1
  82. package/lib/powerquery-language-services/inspection/task.d.ts +4 -4
  83. package/lib/powerquery-language-services/inspection/task.js +17 -18
  84. package/lib/powerquery-language-services/inspection/task.js.map +1 -1
  85. package/lib/powerquery-language-services/inspection/type/inspectType/common.d.ts +7 -7
  86. package/lib/powerquery-language-services/inspection/type/inspectType/common.js +56 -59
  87. package/lib/powerquery-language-services/inspection/type/inspectType/common.js.map +1 -1
  88. package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.d.ts +1 -1
  89. package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js +4 -5
  90. package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js.map +1 -1
  91. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.d.ts +1 -1
  92. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js +4 -4
  93. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js.map +1 -1
  94. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.d.ts +1 -1
  95. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js +14 -12
  96. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js.map +1 -1
  97. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.d.ts +1 -1
  98. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js +13 -13
  99. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js.map +1 -1
  100. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.d.ts +1 -1
  101. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js +9 -9
  102. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js.map +1 -1
  103. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.d.ts +1 -1
  104. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js +13 -14
  105. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js.map +1 -1
  106. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.d.ts +1 -1
  107. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js +6 -6
  108. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js.map +1 -1
  109. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.d.ts +1 -1
  110. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js +8 -8
  111. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js.map +1 -1
  112. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.d.ts +1 -1
  113. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js +9 -9
  114. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js.map +1 -1
  115. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.d.ts +1 -1
  116. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js +5 -5
  117. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js.map +1 -1
  118. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.d.ts +1 -1
  119. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js +5 -5
  120. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js.map +1 -1
  121. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.d.ts +1 -1
  122. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.js +4 -4
  123. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.js.map +1 -1
  124. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.d.ts +1 -1
  125. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js +18 -18
  126. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js.map +1 -1
  127. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.d.ts +1 -1
  128. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js +4 -4
  129. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js.map +1 -1
  130. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.d.ts +1 -1
  131. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js +7 -7
  132. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js.map +1 -1
  133. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.d.ts +1 -1
  134. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js +2 -2
  135. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js.map +1 -1
  136. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.d.ts +1 -1
  137. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js +10 -10
  138. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js.map +1 -1
  139. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.d.ts +1 -1
  140. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js +6 -6
  141. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js.map +1 -1
  142. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.d.ts +1 -1
  143. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js +3 -3
  144. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js.map +1 -1
  145. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.d.ts +1 -1
  146. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js +10 -10
  147. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js.map +1 -1
  148. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.d.ts +1 -1
  149. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js +7 -6
  150. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js.map +1 -1
  151. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.d.ts +1 -1
  152. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js +6 -6
  153. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js.map +1 -1
  154. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.d.ts +1 -1
  155. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js +10 -10
  156. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js.map +1 -1
  157. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.d.ts +1 -1
  158. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js +35 -41
  159. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js.map +1 -1
  160. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.d.ts +1 -1
  161. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js +9 -9
  162. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js.map +1 -1
  163. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.d.ts +1 -1
  164. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js +10 -12
  165. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js.map +1 -1
  166. package/lib/powerquery-language-services/inspection/type/task.js +5 -5
  167. package/lib/powerquery-language-services/inspection/type/task.js.map +1 -1
  168. package/lib/powerquery-language-services/inspectionSettings.d.ts +1 -1
  169. package/lib/powerquery-language-services/inspectionUtils.d.ts +3 -6
  170. package/lib/powerquery-language-services/inspectionUtils.js +20 -75
  171. package/lib/powerquery-language-services/inspectionUtils.js.map +1 -1
  172. package/lib/powerquery-language-services/library/library.d.ts +1 -1
  173. package/lib/powerquery-language-services/library/libraryUtils.d.ts +9 -9
  174. package/lib/powerquery-language-services/library/libraryUtils.js +21 -21
  175. package/lib/powerquery-language-services/library/libraryUtils.js.map +1 -1
  176. package/lib/powerquery-language-services/localization/localization.d.ts +3 -3
  177. package/lib/powerquery-language-services/localization/localization.js +9 -9
  178. package/lib/powerquery-language-services/localization/localization.js.map +1 -1
  179. package/lib/powerquery-language-services/positionUtils.js +16 -17
  180. package/lib/powerquery-language-services/positionUtils.js.map +1 -1
  181. package/lib/powerquery-language-services/providers/commonTypes.d.ts +38 -13
  182. package/lib/powerquery-language-services/providers/index.d.ts +2 -2
  183. package/lib/powerquery-language-services/providers/index.js +4 -4
  184. package/lib/powerquery-language-services/providers/index.js.map +1 -1
  185. package/lib/powerquery-language-services/providers/languageCompletionItemProvider.d.ts +4 -4
  186. package/lib/powerquery-language-services/providers/languageCompletionItemProvider.js +22 -19
  187. package/lib/powerquery-language-services/providers/languageCompletionItemProvider.js.map +1 -1
  188. package/lib/powerquery-language-services/providers/libraryProvider.d.ts +17 -0
  189. package/lib/powerquery-language-services/providers/libraryProvider.js +129 -0
  190. package/lib/powerquery-language-services/providers/libraryProvider.js.map +1 -0
  191. package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js +3 -3
  192. package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js.map +1 -1
  193. package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.d.ts +18 -20
  194. package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js +127 -127
  195. package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js.map +1 -1
  196. package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js +45 -43
  197. package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js.map +1 -1
  198. package/lib/powerquery-language-services/providers/nullSymbolProvider.d.ts +10 -8
  199. package/lib/powerquery-language-services/providers/nullSymbolProvider.js +7 -6
  200. package/lib/powerquery-language-services/providers/nullSymbolProvider.js.map +1 -1
  201. package/lib/powerquery-language-services/traceUtils.d.ts +1 -1
  202. package/lib/powerquery-language-services/traceUtils.js +1 -1
  203. package/lib/powerquery-language-services/traceUtils.js.map +1 -1
  204. package/lib/powerquery-language-services/validate/validate.d.ts +2 -2
  205. package/lib/powerquery-language-services/validate/validate.js +19 -20
  206. package/lib/powerquery-language-services/validate/validate.js.map +1 -1
  207. package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.d.ts +2 -1
  208. package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js +24 -54
  209. package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js.map +1 -1
  210. package/lib/powerquery-language-services/validate/validateFunctionExpression.js +6 -6
  211. package/lib/powerquery-language-services/validate/validateFunctionExpression.js.map +1 -1
  212. package/lib/powerquery-language-services/validate/validateInvokeExpression.d.ts +1 -1
  213. package/lib/powerquery-language-services/validate/validateInvokeExpression.js +23 -23
  214. package/lib/powerquery-language-services/validate/validateInvokeExpression.js.map +1 -1
  215. package/lib/powerquery-language-services/validate/validateParse.d.ts +4 -0
  216. package/lib/powerquery-language-services/validate/validateParse.js +74 -0
  217. package/lib/powerquery-language-services/validate/validateParse.js.map +1 -0
  218. package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js +13 -14
  219. package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js.map +1 -1
  220. package/lib/powerquery-language-services/workspaceCache/workspaceCache.d.ts +2 -2
  221. package/lib/powerquery-language-services/workspaceCache/workspaceCacheUtils.js +31 -31
  222. package/lib/powerquery-language-services/workspaceCache/workspaceCacheUtils.js.map +1 -1
  223. package/package.json +3 -3
  224. package/lib/powerquery-language-services/documentSymbols.d.ts +0 -3
  225. package/lib/powerquery-language-services/documentSymbols.js +0 -100
  226. package/lib/powerquery-language-services/documentSymbols.js.map +0 -1
  227. package/lib/powerquery-language-services/providers/librarySymbolProvider.d.ts +0 -15
  228. package/lib/powerquery-language-services/providers/librarySymbolProvider.js +0 -117
  229. package/lib/powerquery-language-services/providers/librarySymbolProvider.js.map +0 -1
  230. package/lib/powerquery-language-services/validate/validateLexAndParse.d.ts +0 -4
  231. package/lib/powerquery-language-services/validate/validateLexAndParse.js +0 -130
  232. package/lib/powerquery-language-services/validate/validateLexAndParse.js.map +0 -1
@@ -12,156 +12,237 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.AnalysisBase = void 0;
15
+ const PQP = require("@microsoft/powerquery-parser/lib/powerquery-parser");
15
16
  const powerquery_parser_1 = require("@microsoft/powerquery-parser");
16
- const InspectionUtils = require("../inspectionUtils");
17
- const PositionUtils = require("../positionUtils");
17
+ const vscode_languageserver_types_1 = require("vscode-languageserver-types");
18
+ const parser_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/parser");
18
19
  const inspection_1 = require("../inspection");
19
20
  const __1 = require("..");
20
- const commonTypes_1 = require("../commonTypes");
21
21
  const scopeUtils_1 = require("../inspection/scope/scopeUtils");
22
22
  const providers_1 = require("../providers");
23
+ // Implementation of Analysis, subclass it as needed.
24
+ // Does not implement `dispose`.
23
25
  class AnalysisBase {
24
- constructor(uri, analysisSettings, promiseMaybeInspected) {
25
- this.uri = uri;
26
+ constructor(textDocument, analysisSettings) {
27
+ this.textDocument = textDocument;
26
28
  this.analysisSettings = analysisSettings;
27
- this.promiseMaybeInspected = promiseMaybeInspected;
28
- const library = analysisSettings.library;
29
- this.languageAutocompleteItemProvider =
30
- analysisSettings.maybeCreateLanguageAutocompleteItemProviderFn !== undefined
31
- ? analysisSettings.maybeCreateLanguageAutocompleteItemProviderFn()
32
- : new providers_1.LanguageAutocompleteItemProvider(promiseMaybeInspected);
33
- this.librarySymbolProvider =
34
- analysisSettings.maybeCreateLibrarySymbolProviderFn !== undefined
35
- ? analysisSettings.maybeCreateLibrarySymbolProviderFn(library)
36
- : new providers_1.LibrarySymbolProvider(library);
37
- this.localDocumentProvider =
38
- analysisSettings.maybeCreateLocalDocumentProviderFn !== undefined
39
- ? analysisSettings.maybeCreateLocalDocumentProviderFn(library, uri, promiseMaybeInspected, analysisSettings.createInspectionSettingsFn)
40
- : new providers_1.LocalDocumentProvider(library, uri, promiseMaybeInspected, analysisSettings.createInspectionSettingsFn);
29
+ this.cancellableTokensByAction = new Map();
30
+ // Shared across actions
31
+ this.parseError = undefined;
32
+ this.parseState = undefined;
33
+ this.triedLexParse = undefined;
34
+ this.typeCache = {
35
+ scopeById: new Map(),
36
+ typeById: new Map(),
37
+ };
38
+ this.languageAutocompleteItemProvider = analysisSettings.languageAutocompleteItemProviderFactory
39
+ ? analysisSettings.languageAutocompleteItemProviderFactory(analysisSettings.inspectionSettings.locale)
40
+ : new providers_1.LanguageAutocompleteItemProvider(analysisSettings.inspectionSettings.locale);
41
+ this.libraryProvider = analysisSettings.libraryProviderFactory
42
+ ? analysisSettings.libraryProviderFactory(analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale)
43
+ : new providers_1.LibraryProvider(analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale);
44
+ this.localDocumentProvider = analysisSettings.localDocumentProviderFactory
45
+ ? analysisSettings.localDocumentProviderFactory(textDocument.uri.toString(), this.typeCache, analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale)
46
+ : new providers_1.LocalDocumentProvider(this.textDocument.uri.toString(), this.typeCache, analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale);
47
+ void this.initializeState();
41
48
  }
42
- getAutocompleteItems() {
43
- return __awaiter(this, void 0, void 0, function* () {
44
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getAutocompleteItems.name, this.analysisSettings.maybeInitialCorrelationId);
45
- let context = {
46
- traceManager: this.analysisSettings.traceManager,
47
- maybeInitialCorrelationId: trace.id,
48
- };
49
- const maybeActiveLeafIdentifier = yield this.getActiveLeafIdentifier();
50
- if (maybeActiveLeafIdentifier !== undefined) {
51
- context = Object.assign(Object.assign({}, context), { range: __1.CommonTypesUtils.rangeFromTokenRange(maybeActiveLeafIdentifier.node.tokenRange), text: maybeActiveLeafIdentifier.normalizedLiteral, tokenKind: maybeActiveLeafIdentifier.node.kind });
49
+ getAutocompleteItems(position, cancellationToken) {
50
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
51
+ const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getAutocompleteItems.name, this.analysisSettings.initialCorrelationId);
52
+ const context = yield this.getAutocompleteItemProviderContext(position, trace.id, cancellationToken);
53
+ if (context === undefined) {
54
+ trace.exit();
55
+ return undefined;
52
56
  }
57
+ const autocompleteItemTasks = [
58
+ this.languageAutocompleteItemProvider.getAutocompleteItems(context),
59
+ this.libraryProvider.getAutocompleteItems(context),
60
+ this.localDocumentProvider.getAutocompleteItems(context),
61
+ ];
62
+ const autocompleteItems = [];
53
63
  // TODO: intellisense improvements
54
64
  // - honor expected data type
55
- // - only include current query name after @
56
- const [languageResponse, libraryResponse, localDocumentResponse] = yield Promise.all(AnalysisBase.createAutocompleteItemCalls(context, [this.languageAutocompleteItemProvider, this.librarySymbolProvider, this.localDocumentProvider], this.analysisSettings.symbolProviderTimeoutInMS));
57
- const partial = [];
58
- for (const collection of [localDocumentResponse, languageResponse, libraryResponse]) {
59
- for (const item of collection) {
60
- if (partial.find((partialItem) => partialItem.label === item.label) === undefined) {
61
- partial.push(item);
65
+ for (const result of yield Promise.all(autocompleteItemTasks)) {
66
+ if (powerquery_parser_1.ResultUtils.isOk(result) && result.value !== undefined) {
67
+ for (const item of result.value) {
68
+ autocompleteItems.push(item);
62
69
  }
63
70
  }
64
71
  }
65
- const result = partial.sort(inspection_1.AutocompleteItemUtils.compareFn);
66
72
  trace.exit();
67
- return result;
68
- });
73
+ return autocompleteItems;
74
+ }), this.analysisSettings.inspectionSettings.locale);
69
75
  }
70
- getDefinition() {
71
- return __awaiter(this, void 0, void 0, function* () {
72
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getDefinition.name, this.analysisSettings.maybeInitialCorrelationId);
73
- const maybeIdentifierContext = yield this.getOnIdentifierProviderContext(trace.id);
74
- if (!maybeIdentifierContext) {
76
+ getDefinition(position, cancellationToken) {
77
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
78
+ const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getDefinition.name, this.analysisSettings.initialCorrelationId);
79
+ const identifierContext = yield this.getDefinitionProviderContext(position, trace.id, cancellationToken);
80
+ if (!identifierContext) {
75
81
  trace.exit();
76
- return [];
82
+ return undefined;
77
83
  }
78
- const result = yield this.localDocumentProvider.getDefinition(maybeIdentifierContext);
84
+ const result = yield this.localDocumentProvider.getDefinition(identifierContext);
79
85
  trace.exit();
80
- return result !== null && result !== void 0 ? result : [];
81
- });
86
+ if (powerquery_parser_1.ResultUtils.isError(result)) {
87
+ throw result.error;
88
+ }
89
+ return result.value;
90
+ }), this.analysisSettings.inspectionSettings.locale);
82
91
  }
83
- getFoldingRanges() {
84
- return __awaiter(this, void 0, void 0, function* () {
85
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getFoldingRanges.name, this.analysisSettings.maybeInitialCorrelationId);
92
+ getDocumentSymbols(cancellationToken) {
93
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
94
+ const parseState = yield this.getParseState();
95
+ if (parseState === undefined) {
96
+ return undefined;
97
+ }
98
+ const nodeIdMapCollection = parseState.contextState.nodeIdMapCollection;
99
+ const currentSymbols = [];
100
+ const parentSymbolById = new Map();
101
+ addIdentifierPairedExpressionSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken);
102
+ addRecordSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken);
103
+ return currentSymbols;
104
+ }), this.analysisSettings.inspectionSettings.locale);
105
+ }
106
+ getFoldingRanges(cancellationToken) {
107
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
108
+ const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getFoldingRanges.name, this.analysisSettings.initialCorrelationId);
109
+ const parseState = yield this.getParseState();
110
+ if (parseState === undefined) {
111
+ trace.exit();
112
+ return undefined;
113
+ }
86
114
  const result = yield this.localDocumentProvider.getFoldingRanges({
87
115
  traceManager: this.analysisSettings.traceManager,
88
- maybeInitialCorrelationId: trace.id,
116
+ initialCorrelationId: trace.id,
117
+ cancellationToken,
118
+ nodeIdMapCollection: parseState.contextState.nodeIdMapCollection,
89
119
  });
90
120
  trace.exit();
91
- return result;
92
- });
121
+ if (powerquery_parser_1.ResultUtils.isError(result)) {
122
+ throw result.error;
123
+ }
124
+ return result.value;
125
+ }), this.analysisSettings.inspectionSettings.locale);
93
126
  }
94
- getHover() {
95
- return __awaiter(this, void 0, void 0, function* () {
96
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getHover.name, this.analysisSettings.maybeInitialCorrelationId);
97
- const maybeIdentifierContext = yield this.getOnIdentifierProviderContext(trace.id);
98
- if (!maybeIdentifierContext) {
127
+ getHover(position, cancellationToken) {
128
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
129
+ const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getHover.name, this.analysisSettings.initialCorrelationId);
130
+ const hoverProviderContext = yield this.getHoverProviderContext(position, trace.id, cancellationToken);
131
+ if (!hoverProviderContext) {
99
132
  trace.exit();
100
- return commonTypes_1.EmptyHover;
133
+ return undefined;
134
+ }
135
+ const triedHovers = yield Promise.all([
136
+ this.localDocumentProvider.getHover(hoverProviderContext),
137
+ this.libraryProvider.getHover(hoverProviderContext),
138
+ ]);
139
+ // Keep track if any error was thrown, prioritized by the order of the providers
140
+ let firstError;
141
+ for (const triedHover of triedHovers) {
142
+ if (powerquery_parser_1.ResultUtils.isOk(triedHover)) {
143
+ if (triedHover.value !== undefined) {
144
+ trace.exit();
145
+ return triedHover.value;
146
+ }
147
+ }
148
+ else if (firstError === undefined) {
149
+ firstError = triedHover.error;
150
+ }
101
151
  }
102
- // Result priority is based on the order of the symbol providers
103
- const result = AnalysisBase.resolveProviders(AnalysisBase.createHoverCalls(maybeIdentifierContext, [this.localDocumentProvider, this.librarySymbolProvider], this.analysisSettings.symbolProviderTimeoutInMS), commonTypes_1.EmptyHover);
104
152
  trace.exit();
105
- return result;
153
+ if (firstError !== undefined) {
154
+ // This is safe as the ensureResultAsync function catch the error.
155
+ throw firstError;
156
+ }
157
+ else {
158
+ return undefined;
159
+ }
160
+ }), this.analysisSettings.inspectionSettings.locale);
161
+ }
162
+ // Assumes that initializeState sets parseError to some value, which may include undefined.
163
+ getParseError() {
164
+ return __awaiter(this, void 0, void 0, function* () {
165
+ if (this.triedLexParse === undefined) {
166
+ yield this.initializeState();
167
+ }
168
+ return this.parseError;
106
169
  });
107
170
  }
108
- getPartialSemanticTokens() {
171
+ // Assumes that initializeState sets parseState to some value, which may include undefined.
172
+ getParseState() {
109
173
  return __awaiter(this, void 0, void 0, function* () {
110
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getPartialSemanticTokens.name, this.analysisSettings.maybeInitialCorrelationId);
174
+ if (this.triedLexParse === undefined) {
175
+ yield this.initializeState();
176
+ }
177
+ return this.parseState;
178
+ });
179
+ }
180
+ getPartialSemanticTokens(cancellationToken) {
181
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
182
+ const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getPartialSemanticTokens.name, this.analysisSettings.initialCorrelationId);
111
183
  const result = yield this.localDocumentProvider.getPartialSemanticTokens({
112
184
  traceManager: this.analysisSettings.traceManager,
113
- maybeInitialCorrelationId: trace.id,
185
+ initialCorrelationId: trace.id,
186
+ cancellationToken,
187
+ library: this.analysisSettings.inspectionSettings.library,
188
+ parseState: powerquery_parser_1.Assert.asDefined(yield this.getParseState()),
114
189
  });
115
190
  trace.exit();
116
- return result;
117
- });
118
- }
119
- getSignatureHelp() {
120
- return __awaiter(this, void 0, void 0, function* () {
121
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getSignatureHelp.name, this.analysisSettings.maybeInitialCorrelationId);
122
- const maybeInspected = yield this.promiseMaybeInspected;
123
- if (maybeInspected === undefined) {
124
- trace.exit();
125
- return commonTypes_1.EmptySignatureHelp;
191
+ if (powerquery_parser_1.ResultUtils.isError(result)) {
192
+ throw result.error;
126
193
  }
127
- const maybeContext = yield InspectionUtils.getMaybeContextForSignatureProvider(maybeInspected, this.analysisSettings.traceManager, trace.id);
128
- if (maybeContext === undefined) {
194
+ return result.value;
195
+ }), this.analysisSettings.inspectionSettings.locale);
196
+ }
197
+ getSignatureHelp(position, cancellationToken) {
198
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
199
+ const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getSignatureHelp.name, this.analysisSettings.initialCorrelationId);
200
+ const signatureProviderContext = yield this.getSignatureProviderContext(position, trace.id, cancellationToken);
201
+ if (signatureProviderContext === undefined) {
129
202
  trace.exit();
130
- return commonTypes_1.EmptySignatureHelp;
203
+ return undefined;
131
204
  }
132
- const context = maybeContext;
133
- if (context.functionName === undefined) {
134
- trace.exit();
135
- return commonTypes_1.EmptySignatureHelp;
205
+ const signatureTasks = yield Promise.all([
206
+ this.localDocumentProvider.getSignatureHelp(signatureProviderContext),
207
+ this.libraryProvider.getSignatureHelp(signatureProviderContext),
208
+ ]);
209
+ for (const task of signatureTasks) {
210
+ if (powerquery_parser_1.ResultUtils.isOk(task) && task.value !== undefined) {
211
+ trace.exit();
212
+ return task.value;
213
+ }
136
214
  }
137
- // Result priority is based on the order of the symbol providers
138
- const result = AnalysisBase.resolveProviders(AnalysisBase.createSignatureHelpCalls(context, [this.localDocumentProvider, this.librarySymbolProvider], this.analysisSettings.symbolProviderTimeoutInMS), commonTypes_1.EmptySignatureHelp);
139
215
  trace.exit();
140
- return result;
141
- });
216
+ return undefined;
217
+ }), this.analysisSettings.inspectionSettings.locale);
142
218
  }
143
- getRenameEdits(newName) {
144
- return __awaiter(this, void 0, void 0, function* () {
145
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getRenameEdits.name, this.analysisSettings.maybeInitialCorrelationId);
146
- const maybeLeafIdentifier = yield this.getActiveLeafIdentifier();
147
- const maybeInspected = yield this.promiseMaybeInspected;
148
- const scopeById = maybeInspected === null || maybeInspected === void 0 ? void 0 : maybeInspected.typeCache.scopeById;
149
- if (maybeInspected === undefined || maybeLeafIdentifier === undefined) {
219
+ getRenameEdits(position, newName, cancellationToken) {
220
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
221
+ const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getRenameEdits.name, this.analysisSettings.initialCorrelationId);
222
+ const activeNode = powerquery_parser_1.Assert.asDefined(yield this.getActiveNode(position));
223
+ let leafIdentifier;
224
+ if (!inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode) ||
225
+ activeNode.inclusiveIdentifierUnderPosition === undefined) {
150
226
  trace.exit();
151
- return [];
227
+ return undefined;
228
+ }
229
+ else {
230
+ leafIdentifier = activeNode.inclusiveIdentifierUnderPosition;
152
231
  }
232
+ void (yield this.inspectNodeScope(activeNode, trace.id, cancellationToken));
233
+ const scopeById = this.typeCache.scopeById;
153
234
  const identifiersToBeEdited = [];
154
235
  let valueCreator = undefined;
155
- if (maybeLeafIdentifier.node.kind === "GeneralizedIdentifier" /* GeneralizedIdentifier */) {
156
- valueCreator = maybeLeafIdentifier.node;
236
+ if (leafIdentifier.node.kind === "GeneralizedIdentifier" /* GeneralizedIdentifier */) {
237
+ valueCreator = leafIdentifier.node;
157
238
  }
158
- else if ((maybeLeafIdentifier.node.kind === "Identifier" /* Identifier */ ||
159
- maybeLeafIdentifier.node.kind === "IdentifierExpression" /* IdentifierExpression */) &&
239
+ else if ((leafIdentifier.node.kind === "Identifier" /* Identifier */ ||
240
+ leafIdentifier.node.kind === "IdentifierExpression" /* IdentifierExpression */) &&
160
241
  scopeById) {
161
242
  // need to find this key value and modify all referring it
162
- const identifierExpression = maybeLeafIdentifier.node.kind === "IdentifierExpression" /* IdentifierExpression */
163
- ? maybeLeafIdentifier.node.identifier
164
- : maybeLeafIdentifier.node;
243
+ const identifierExpression = leafIdentifier.node.kind === "IdentifierExpression" /* IdentifierExpression */
244
+ ? leafIdentifier.node.identifier
245
+ : leafIdentifier.node;
165
246
  switch (identifierExpression.identifierContextKind) {
166
247
  case "Key" /* Key */:
167
248
  case "Parameter" /* Parameter */:
@@ -170,29 +251,29 @@ class AnalysisBase {
170
251
  break;
171
252
  case "Value" /* Value */: {
172
253
  // it is the identifier referring the value
173
- let nodeScope = maybeInspected.typeCache.scopeById.get(identifierExpression.id);
254
+ let nodeScope = scopeById.get(identifierExpression.id);
174
255
  // there might be a chance that its scope did not get populated yet, do another try
175
256
  if (!nodeScope) {
176
- yield maybeInspected.tryNodeScope(identifierExpression.id);
177
- nodeScope = maybeInspected.typeCache.scopeById.get(identifierExpression.id);
257
+ void (yield __1.Inspection.tryNodeScope(this.analysisSettings.inspectionSettings, powerquery_parser_1.Assert.asDefined(yield this.getParseState()).contextState.nodeIdMapCollection, identifierExpression.id, scopeById));
258
+ nodeScope = scopeById.get(identifierExpression.id);
178
259
  }
179
- const scopeItem = (0, scopeUtils_1.findScopeItemByLiteral)(nodeScope, maybeLeafIdentifier.normalizedLiteral);
260
+ const scopeItem = (0, scopeUtils_1.findScopeItemByLiteral)(nodeScope, leafIdentifier.normalizedLiteral);
180
261
  if (scopeItem) {
181
- const maybeValueCreator = (0, scopeUtils_1.maybeScopeCreatorIdentifier)(scopeItem);
182
- if ((maybeValueCreator === null || maybeValueCreator === void 0 ? void 0 : maybeValueCreator.kind) === "Identifier" /* Identifier */) {
183
- if (maybeValueCreator.identifierContextKind === "Key" /* Key */ ||
184
- maybeValueCreator.identifierContextKind === "Parameter" /* Parameter */) {
185
- valueCreator = maybeValueCreator;
262
+ const valueCreatorSearch = (0, scopeUtils_1.scopeCreatorIdentifier)(scopeItem);
263
+ if ((valueCreatorSearch === null || valueCreatorSearch === void 0 ? void 0 : valueCreatorSearch.kind) === "Identifier" /* Identifier */) {
264
+ if (valueCreatorSearch.identifierContextKind === "Key" /* Key */ ||
265
+ valueCreatorSearch.identifierContextKind === "Parameter" /* Parameter */) {
266
+ valueCreator = valueCreatorSearch;
186
267
  }
187
268
  else {
188
- identifiersToBeEdited.push(maybeValueCreator);
269
+ identifiersToBeEdited.push(valueCreatorSearch);
189
270
  }
190
271
  }
191
- else if ((maybeValueCreator === null || maybeValueCreator === void 0 ? void 0 : maybeValueCreator.kind) === "GeneralizedIdentifier" /* GeneralizedIdentifier */) {
192
- valueCreator = maybeValueCreator;
272
+ else if ((valueCreatorSearch === null || valueCreatorSearch === void 0 ? void 0 : valueCreatorSearch.kind) === "GeneralizedIdentifier" /* GeneralizedIdentifier */) {
273
+ valueCreator = valueCreatorSearch;
193
274
  }
194
- else if (maybeValueCreator) {
195
- identifiersToBeEdited.push(maybeValueCreator);
275
+ else if (valueCreatorSearch) {
276
+ identifiersToBeEdited.push(valueCreatorSearch);
196
277
  }
197
278
  }
198
279
  break;
@@ -206,58 +287,31 @@ class AnalysisBase {
206
287
  }
207
288
  if (valueCreator) {
208
289
  // need to populate the other identifiers referring it
209
- identifiersToBeEdited.push(...(yield maybeInspected.collectAllIdentifiersBeneath(valueCreator)));
290
+ identifiersToBeEdited.push(...(yield this.collectAllIdentifiersBeneath(powerquery_parser_1.Assert.asDefined(yield this.getParseState()).contextState.nodeIdMapCollection, valueCreator)));
210
291
  }
211
- // if none found, directly put maybeInclusiveIdentifierUnderPosition in if it exists
212
- if (identifiersToBeEdited.length === 0 && maybeLeafIdentifier) {
213
- identifiersToBeEdited.push(maybeLeafIdentifier.node.kind === "IdentifierExpression" /* IdentifierExpression */
214
- ? maybeLeafIdentifier.node.identifier
215
- : maybeLeafIdentifier.node);
292
+ // if none found, directly put inclusiveIdentifierUnderPosition in if it exists
293
+ if (identifiersToBeEdited.length === 0 && leafIdentifier) {
294
+ identifiersToBeEdited.push(leafIdentifier.node.kind === "IdentifierExpression" /* IdentifierExpression */
295
+ ? leafIdentifier.node.identifier
296
+ : leafIdentifier.node);
216
297
  }
217
298
  const result = identifiersToBeEdited.map((one) => ({
218
- range: PositionUtils.createRangeFromTokenRange(one.tokenRange),
299
+ range: __1.PositionUtils.createRangeFromTokenRange(one.tokenRange),
219
300
  newText: newName,
220
301
  }));
221
302
  trace.exit();
222
303
  return result;
223
- });
304
+ }), this.analysisSettings.inspectionSettings.locale);
224
305
  }
225
- static promiseWithTimeout(valueFn, timeoutReturnValue, timeoutInMS) {
226
- if (timeoutInMS !== undefined) {
227
- // TODO: Enabling trace entry when timeout occurs
228
- return Promise.race([
229
- valueFn(),
230
- new Promise((resolve) => setTimeout(() => {
231
- resolve(timeoutReturnValue);
232
- }, timeoutInMS)),
233
- ]);
306
+ dispose() {
307
+ this.typeCache.scopeById.clear();
308
+ this.typeCache.typeById.clear();
309
+ for (const token of this.cancellableTokensByAction.values()) {
310
+ token.cancel();
234
311
  }
235
- return valueFn();
236
- }
237
- static resolveProviders(calls, defaultReturnValue) {
238
- return __awaiter(this, void 0, void 0, function* () {
239
- const results = yield Promise.all(calls);
240
- for (let i = 0; i < results.length; i += 1) {
241
- const result = results[i];
242
- if (result !== null) {
243
- return result;
244
- }
245
- }
246
- return defaultReturnValue;
247
- });
248
- }
249
- static createAutocompleteItemCalls(context, providers, timeoutInMS) {
250
- // TODO: add tracing to the catch case
251
- return providers.map((provider) => this.promiseWithTimeout(() => provider.getAutocompleteItems(context), [], timeoutInMS));
252
- }
253
- static createHoverCalls(context, providers, timeoutInMS) {
254
- // TODO: add tracing to the catch case
255
- return providers.map((provider) => this.promiseWithTimeout(() => provider.getHover(context), null, timeoutInMS));
256
- }
257
- static createSignatureHelpCalls(context, providers, timeoutInMS) {
258
- // TODO: add tracing to the catch case
259
- return providers.map((provider) => this.promiseWithTimeout(() => provider.getSignatureHelp(context), null, timeoutInMS));
312
+ this.cancellableTokensByAction.clear();
260
313
  }
314
+ // protected abstract getText(range?: Range): string;
261
315
  static isValidHoverIdentifier(activeNode) {
262
316
  var _a;
263
317
  const ancestry = activeNode.ancestry;
@@ -276,52 +330,338 @@ class AnalysisBase {
276
330
  "GeneralizedIdentifierPairedExpression" /* GeneralizedIdentifierPairedExpression */,
277
331
  "IdentifierPairedExpression" /* IdentifierPairedExpression */,
278
332
  ].includes(followingNode.node.kind) &&
279
- [undefined, 1].includes(powerquery_parser_1.Assert.asDefined(leaf.node.maybeAttributeIndex))) {
333
+ [undefined, 1].includes(powerquery_parser_1.Assert.asDefined(leaf.node.attributeIndex))) {
280
334
  return false;
281
335
  }
282
336
  return true;
283
337
  }
284
- getOnIdentifierProviderContext(correlationId) {
338
+ getAutocompleteItemProviderContext(position, correlationId, newCancellationToken) {
285
339
  return __awaiter(this, void 0, void 0, function* () {
286
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getDefinition.name, correlationId);
287
- const maybeActiveNode = yield this.getActiveNode();
288
- const maybeIdentifierUnderPosition = maybeActiveNode === null || maybeActiveNode === void 0 ? void 0 : maybeActiveNode.maybeExclusiveIdentifierUnderPosition;
289
- if (maybeActiveNode === undefined ||
290
- maybeIdentifierUnderPosition === undefined ||
291
- !AnalysisBase.isValidHoverIdentifier(maybeActiveNode)) {
340
+ const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getAutocompleteItemProviderContext.name, correlationId);
341
+ const activeNode = yield this.getActiveNode(position);
342
+ if (activeNode === undefined) {
292
343
  trace.exit();
293
344
  return undefined;
294
345
  }
295
- const identifier = maybeIdentifierUnderPosition.node.kind === "IdentifierExpression" /* IdentifierExpression */
296
- ? maybeIdentifierUnderPosition.node.identifier
297
- : maybeIdentifierUnderPosition.node;
346
+ const autocomplete = powerquery_parser_1.Assert.asDefined(yield this.inspectAutocomplete(activeNode, trace.id, newCancellationToken));
347
+ const triedNodeScope = powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id, newCancellationToken));
348
+ const triedScopeType = powerquery_parser_1.Assert.asDefined(yield this.inspectScopeType(activeNode, trace.id, newCancellationToken));
349
+ const activeLeafIdentifier = inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)
350
+ ? activeNode.inclusiveIdentifierUnderPosition
351
+ : undefined;
352
+ let result;
353
+ if (activeLeafIdentifier !== undefined) {
354
+ result = {
355
+ autocomplete,
356
+ triedNodeScope,
357
+ triedScopeType,
358
+ traceManager: this.analysisSettings.traceManager,
359
+ cancellationToken: newCancellationToken,
360
+ initialCorrelationId: trace.id,
361
+ range: __1.CommonTypesUtils.rangeFromTokenRange(activeLeafIdentifier.node.tokenRange),
362
+ text: activeLeafIdentifier.normalizedLiteral,
363
+ tokenKind: activeLeafIdentifier.node.kind,
364
+ };
365
+ }
366
+ else {
367
+ result = {
368
+ autocomplete,
369
+ triedNodeScope,
370
+ triedScopeType,
371
+ traceManager: this.analysisSettings.traceManager,
372
+ cancellationToken: newCancellationToken,
373
+ initialCorrelationId: trace.id,
374
+ };
375
+ }
376
+ trace.exit();
377
+ return result;
378
+ });
379
+ }
380
+ getDefinitionProviderContext(position, correlationId, cancellationToken) {
381
+ return __awaiter(this, void 0, void 0, function* () {
382
+ const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getDefinitionProviderContext.name, correlationId);
383
+ const activeNode = yield this.getActiveNode(position);
384
+ if (activeNode === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
385
+ trace.exit();
386
+ return undefined;
387
+ }
388
+ const identifierUnderPosition = activeNode.exclusiveIdentifierUnderPosition;
389
+ if (identifierUnderPosition === undefined || !AnalysisBase.isValidHoverIdentifier(activeNode)) {
390
+ trace.exit();
391
+ return undefined;
392
+ }
393
+ const identifier = identifierUnderPosition.node.kind === "IdentifierExpression" /* IdentifierExpression */
394
+ ? identifierUnderPosition.node.identifier
395
+ : identifierUnderPosition.node;
298
396
  const context = {
299
397
  traceManager: this.analysisSettings.traceManager,
300
398
  range: __1.CommonTypesUtils.rangeFromTokenRange(identifier.tokenRange),
301
399
  identifier,
302
- maybeInitialCorrelationId: trace.id,
400
+ cancellationToken,
401
+ initialCorrelationId: trace.id,
402
+ triedNodeScope: powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id, cancellationToken)),
303
403
  };
304
404
  trace.exit();
305
405
  return context;
306
406
  });
307
407
  }
308
- getActiveNode() {
408
+ getHoverProviderContext(position, correlationId, cancellationToken) {
309
409
  return __awaiter(this, void 0, void 0, function* () {
310
- const maybeInspected = yield this.promiseMaybeInspected;
311
- if (maybeInspected === undefined) {
410
+ const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getHoverProviderContext.name, correlationId);
411
+ const activeNode = yield this.getActiveNode(position);
412
+ if (activeNode === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
413
+ trace.exit();
312
414
  return undefined;
313
415
  }
314
- return __1.Inspection.ActiveNodeUtils.isPositionInBounds(maybeInspected.maybeActiveNode)
315
- ? maybeInspected.maybeActiveNode
316
- : undefined;
416
+ const identifierUnderPosition = activeNode.exclusiveIdentifierUnderPosition;
417
+ if (identifierUnderPosition === undefined || !AnalysisBase.isValidHoverIdentifier(activeNode)) {
418
+ trace.exit();
419
+ return undefined;
420
+ }
421
+ const identifier = identifierUnderPosition.node.kind === "IdentifierExpression" /* IdentifierExpression */
422
+ ? identifierUnderPosition.node.identifier
423
+ : identifierUnderPosition.node;
424
+ const context = {
425
+ traceManager: this.analysisSettings.traceManager,
426
+ range: __1.CommonTypesUtils.rangeFromTokenRange(identifier.tokenRange),
427
+ identifier,
428
+ cancellationToken,
429
+ initialCorrelationId: trace.id,
430
+ activeNode,
431
+ inspectionSettings: Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }),
432
+ parseState: powerquery_parser_1.Assert.asDefined(yield this.getParseState()),
433
+ triedNodeScope: powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id, cancellationToken)),
434
+ triedScopeType: powerquery_parser_1.Assert.asDefined(yield this.inspectScopeType(activeNode, trace.id, cancellationToken)),
435
+ };
436
+ trace.exit();
437
+ return context;
317
438
  });
318
439
  }
319
- getActiveLeafIdentifier() {
320
- var _a;
440
+ getSignatureProviderContext(position, correlationId, newCancellationToken) {
441
+ return __awaiter(this, void 0, void 0, function* () {
442
+ const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getSignatureProviderContext.name, correlationId);
443
+ const triedCurrentInvokeExpression = yield this.inspectCurrentInvokeExpression(position, trace.id, newCancellationToken);
444
+ if (triedCurrentInvokeExpression === undefined ||
445
+ powerquery_parser_1.ResultUtils.isError(triedCurrentInvokeExpression) ||
446
+ triedCurrentInvokeExpression.value === undefined) {
447
+ trace.exit();
448
+ return undefined;
449
+ }
450
+ const invokeExpression = triedCurrentInvokeExpression.value;
451
+ const functionName = invokeExpression.name !== undefined ? invokeExpression.name : undefined;
452
+ const argumentOrdinal = invokeExpression.arguments !== undefined ? invokeExpression.arguments.argumentOrdinal : undefined;
453
+ if (functionName === undefined || argumentOrdinal === undefined) {
454
+ trace.exit();
455
+ return undefined;
456
+ }
457
+ const result = {
458
+ argumentOrdinal,
459
+ functionName,
460
+ isNameInLocalScope: invokeExpression.isNameInLocalScope,
461
+ functionType: invokeExpression.functionType,
462
+ traceManager: this.analysisSettings.traceManager,
463
+ cancellationToken: newCancellationToken,
464
+ initialCorrelationId: trace.id,
465
+ triedCurrentInvokeExpression: yield __1.Inspection.tryCurrentInvokeExpression(Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken: newCancellationToken, initialCorrelationId: trace.id }), powerquery_parser_1.Assert.asDefined(yield this.getParseState()).contextState.nodeIdMapCollection, powerquery_parser_1.Assert.asDefined(yield this.getActiveNode(position)), this.typeCache),
466
+ };
467
+ trace.exit();
468
+ return result;
469
+ });
470
+ }
471
+ getTypeCache() {
472
+ return this.typeCache;
473
+ }
474
+ collectAllIdentifiersBeneath(nodeIdMapCollection, valueCreator) {
475
+ var _a, _b, _c, _d, _e;
476
+ return __awaiter(this, void 0, void 0, function* () {
477
+ const astNodeById = nodeIdMapCollection.astNodeById;
478
+ const childIdsById = nodeIdMapCollection.childIdsById;
479
+ const originLiteral = valueCreator.literal;
480
+ const entry = (0, scopeUtils_1.findDirectUpperScopeExpression)(nodeIdMapCollection, valueCreator.id);
481
+ if (entry) {
482
+ const allIdentifierIdSet = (_a = nodeIdMapCollection.idsByNodeKind.get("Identifier" /* Identifier */)) !== null && _a !== void 0 ? _a : new Set();
483
+ const allGeneralizedIdentifierIdSet = (_b = nodeIdMapCollection.idsByNodeKind.get("GeneralizedIdentifier" /* GeneralizedIdentifier */)) !== null && _b !== void 0 ? _b : new Set();
484
+ const current = entry;
485
+ const idsByTiers = [];
486
+ let currentTier = ((_c = childIdsById.get(current.id)) !== null && _c !== void 0 ? _c : []).slice();
487
+ while (currentTier.length) {
488
+ const toBePushed = currentTier.filter((one) => allIdentifierIdSet.has(one) || allGeneralizedIdentifierIdSet.has(one));
489
+ toBePushed.length && idsByTiers.push(toBePushed);
490
+ currentTier = currentTier.slice();
491
+ let nextTier = [];
492
+ while (currentTier.length) {
493
+ const oneNode = (_d = currentTier.shift()) !== null && _d !== void 0 ? _d : -1;
494
+ const childrenOfTheNode = ((_e = childIdsById.get(oneNode)) !== null && _e !== void 0 ? _e : []).slice();
495
+ nextTier = nextTier.concat(childrenOfTheNode);
496
+ }
497
+ currentTier = nextTier;
498
+ }
499
+ // filter literal names
500
+ const completeIdentifierNodes = idsByTiers
501
+ .flat(1)
502
+ .map((one) => astNodeById.get(one))
503
+ .filter(Boolean);
504
+ let filteredIdentifierNodes = completeIdentifierNodes.filter((one) => one.literal === originLiteral);
505
+ // populate the scope items for each
506
+ yield Promise.all(filteredIdentifierNodes
507
+ .filter((oneIdentifier) => oneIdentifier.kind === "GeneralizedIdentifier" /* GeneralizedIdentifier */ ||
508
+ oneIdentifier.identifierContextKind === "Value" /* Value */)
509
+ .map((oneIdentifier) => __1.Inspection.tryNodeScope(this.analysisSettings.inspectionSettings, nodeIdMapCollection, oneIdentifier.id, this.typeCache.scopeById)));
510
+ filteredIdentifierNodes = filteredIdentifierNodes.filter((oneIdentifierNode) => {
511
+ if (oneIdentifierNode.kind === "GeneralizedIdentifier" /* GeneralizedIdentifier */) {
512
+ return oneIdentifierNode.id === valueCreator.id;
513
+ }
514
+ else if (oneIdentifierNode.identifierContextKind === "Value" /* Value */) {
515
+ const theScope = this.typeCache.scopeById.get(oneIdentifierNode.id);
516
+ const theScopeItem = (0, scopeUtils_1.findScopeItemByLiteral)(theScope, originLiteral);
517
+ const theCreatorIdentifier = (0, scopeUtils_1.scopeCreatorIdentifier)(theScopeItem);
518
+ return theCreatorIdentifier && theCreatorIdentifier.id === valueCreator.id;
519
+ }
520
+ else if (oneIdentifierNode.identifierContextKind === "Key" /* Key */ ||
521
+ oneIdentifierNode.identifierContextKind === "Parameter" /* Parameter */) {
522
+ return oneIdentifierNode.id === valueCreator.id;
523
+ }
524
+ return false;
525
+ });
526
+ return filteredIdentifierNodes;
527
+ }
528
+ return [];
529
+ });
530
+ }
531
+ // Performs a lex + parse of the document, then caches the results into local variables.
532
+ // Any code which operates on the parse state should use this method to ensure that the parse state is initialized.
533
+ initializeState() {
534
+ return __awaiter(this, void 0, void 0, function* () {
535
+ const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.initializeState.name, this.analysisSettings.initialCorrelationId);
536
+ const updatedSettings = Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { initialCorrelationId: trace.id });
537
+ const triedLexParse = yield PQP.TaskUtils.tryLexParse(updatedSettings, this.textDocument.getText());
538
+ this.triedLexParse = triedLexParse;
539
+ if (PQP.TaskUtils.isLexStageError(triedLexParse) || PQP.TaskUtils.isParseStageCommonError(triedLexParse)) {
540
+ trace.exit({ ["IsError" /* IsError */]: true });
541
+ }
542
+ else if (PQP.TaskUtils.isParseStageError(triedLexParse)) {
543
+ this.parseState = triedLexParse.parseState;
544
+ this.parseError = triedLexParse.error;
545
+ }
546
+ else {
547
+ this.parseState = triedLexParse.parseState;
548
+ }
549
+ trace.exit();
550
+ });
551
+ }
552
+ // We should only get an undefined for an activeNode iff a parse pass hasn't been done.
553
+ getActiveNode(position) {
554
+ return __awaiter(this, void 0, void 0, function* () {
555
+ const parseState = yield this.getParseState();
556
+ if (parseState === undefined) {
557
+ return undefined;
558
+ }
559
+ return inspection_1.ActiveNodeUtils.activeNode(parseState.contextState.nodeIdMapCollection, position);
560
+ });
561
+ }
562
+ inspectAutocomplete(activeNode, correlationId, cancellationToken) {
563
+ return __awaiter(this, void 0, void 0, function* () {
564
+ const parseState = yield this.getParseState();
565
+ if (parseState === undefined) {
566
+ return undefined;
567
+ }
568
+ return yield __1.Inspection.autocomplete(Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }), parseState, this.typeCache, activeNode, yield this.getParseError());
569
+ });
570
+ }
571
+ inspectCurrentInvokeExpression(position, correlationId, cancellationToken) {
572
+ return __awaiter(this, void 0, void 0, function* () {
573
+ const activeNode = yield this.getActiveNode(position);
574
+ const parseState = yield this.getParseState();
575
+ if (activeNode === undefined || parseState === undefined) {
576
+ return undefined;
577
+ }
578
+ return yield __1.Inspection.tryCurrentInvokeExpression(Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }), parseState.contextState.nodeIdMapCollection, activeNode, this.typeCache);
579
+ });
580
+ }
581
+ inspectNodeScope(activeNode, correlationId, cancellationToken) {
321
582
  return __awaiter(this, void 0, void 0, function* () {
322
- return (_a = (yield this.getActiveNode())) === null || _a === void 0 ? void 0 : _a.maybeInclusiveIdentifierUnderPosition;
583
+ const parseState = yield this.getParseState();
584
+ if (parseState === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
585
+ return undefined;
586
+ }
587
+ return yield __1.Inspection.tryNodeScope(Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }), parseState.contextState.nodeIdMapCollection, inspection_1.ActiveNodeUtils.assertGetLeaf(activeNode).node.id, this.typeCache.scopeById);
588
+ });
589
+ }
590
+ inspectScopeType(activeNode, correlationId, cancellationToken) {
591
+ return __awaiter(this, void 0, void 0, function* () {
592
+ const parseState = yield this.getParseState();
593
+ if (parseState === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
594
+ return undefined;
595
+ }
596
+ return yield __1.Inspection.tryScopeType(Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }), parseState.contextState.nodeIdMapCollection, inspection_1.ActiveNodeUtils.assertGetLeaf(activeNode).node.id, this.typeCache);
323
597
  });
324
598
  }
325
599
  }
326
600
  exports.AnalysisBase = AnalysisBase;
601
+ function addIdentifierPairedExpressionSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken) {
602
+ var _a;
603
+ const identifierPairedExpressionIds = (_a = nodeIdMapCollection.idsByNodeKind.get("IdentifierPairedExpression" /* IdentifierPairedExpression */)) !== null && _a !== void 0 ? _a : new Set();
604
+ for (const nodeId of identifierPairedExpressionIds) {
605
+ cancellationToken.throwIfCancelled();
606
+ const xorNode = parser_1.NodeIdMapUtils.assertGetXorChecked(nodeIdMapCollection, nodeId, "IdentifierPairedExpression" /* IdentifierPairedExpression */);
607
+ if (!parser_1.XorNodeUtils.isAstXor(xorNode)) {
608
+ continue;
609
+ }
610
+ const astNode = xorNode.node;
611
+ const documentSymbol = __1.InspectionUtils.getSymbolForIdentifierPairedExpression(astNode);
612
+ addDocumentSymbols(nodeIdMapCollection, parentSymbolById, nodeId, currentSymbols, documentSymbol);
613
+ parentSymbolById.set(nodeId, documentSymbol);
614
+ }
615
+ }
616
+ function addRecordSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken) {
617
+ var _a, _b;
618
+ const recordIdCollections = [
619
+ (_a = nodeIdMapCollection.idsByNodeKind.get("RecordExpression" /* RecordExpression */)) !== null && _a !== void 0 ? _a : new Set(),
620
+ (_b = nodeIdMapCollection.idsByNodeKind.get("RecordLiteral" /* RecordLiteral */)) !== null && _b !== void 0 ? _b : new Set(),
621
+ ];
622
+ for (const collection of recordIdCollections) {
623
+ for (const nodeId of collection) {
624
+ cancellationToken.throwIfCancelled();
625
+ const xorNode = parser_1.NodeIdMapUtils.assertGetXorChecked(nodeIdMapCollection, nodeId, ["RecordExpression" /* RecordExpression */, "RecordLiteral" /* RecordLiteral */]);
626
+ if (!parser_1.XorNodeUtils.isAstXor(xorNode)) {
627
+ continue;
628
+ }
629
+ const astNode = xorNode.node;
630
+ // Process the record if the immediate parent is a Struct
631
+ const parentId = nodeIdMapCollection.parentIdById.get(astNode.id);
632
+ const parentSymbol = parentId ? parentSymbolById.get(parentId) : undefined;
633
+ if (parentSymbol && parentSymbol.kind === vscode_languageserver_types_1.SymbolKind.Struct) {
634
+ const fieldSymbols = __1.InspectionUtils.getSymbolsForRecord(astNode);
635
+ if (fieldSymbols.length > 0) {
636
+ addDocumentSymbols(nodeIdMapCollection, parentSymbolById, astNode.id, currentSymbols, ...fieldSymbols);
637
+ }
638
+ }
639
+ }
640
+ }
641
+ }
642
+ function addDocumentSymbols(nodeIdMapCollection, parentSymbolById, nodeId, currentSymbols, ...newSymbols) {
643
+ const parentSymbol = findParentSymbol(nodeIdMapCollection, parentSymbolById, nodeId);
644
+ if (parentSymbol) {
645
+ if (!parentSymbol.children) {
646
+ parentSymbol.children = [];
647
+ }
648
+ parentSymbol.children.push(...newSymbols);
649
+ return;
650
+ }
651
+ // Add to the top level
652
+ currentSymbols.push(...newSymbols);
653
+ }
654
+ function findParentSymbol(nodeIdMapCollection, parentSymbolById, nodeId) {
655
+ // Get parent for current node
656
+ const parentNodeId = nodeIdMapCollection.parentIdById.get(nodeId);
657
+ if (!parentNodeId) {
658
+ // No more parents to check
659
+ return undefined;
660
+ }
661
+ let parentSymbol = parentSymbolById.get(parentNodeId);
662
+ if (!parentSymbol) {
663
+ parentSymbol = findParentSymbol(nodeIdMapCollection, parentSymbolById, parentNodeId);
664
+ }
665
+ return parentSymbol;
666
+ }
327
667
  //# sourceMappingURL=analysisBase.js.map