@microsoft/powerquery-language-services 0.3.40 → 0.5.1

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 (239) hide show
  1. package/lib/powerquery-language-services/analysis/analysis.d.ts +17 -8
  2. package/lib/powerquery-language-services/analysis/analysisBase.d.ts +41 -26
  3. package/lib/powerquery-language-services/analysis/analysisBase.js +524 -173
  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/documentSymbols.d.ts +2 -2
  16. package/lib/powerquery-language-services/documentSymbols.js +10 -27
  17. package/lib/powerquery-language-services/documentSymbols.js.map +1 -1
  18. package/lib/powerquery-language-services/formatter.d.ts +1 -1
  19. package/lib/powerquery-language-services/formatter.js +2 -4
  20. package/lib/powerquery-language-services/formatter.js.map +1 -1
  21. package/lib/powerquery-language-services/index.d.ts +1 -4
  22. package/lib/powerquery-language-services/index.js +1 -11
  23. package/lib/powerquery-language-services/index.js.map +1 -1
  24. package/lib/powerquery-language-services/inspection/activeNode/activeNode.d.ts +5 -5
  25. package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.d.ts +5 -5
  26. package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js +78 -83
  27. package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js.map +1 -1
  28. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.d.ts +2 -2
  29. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js +37 -40
  30. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js.map +1 -1
  31. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.d.ts +7 -7
  32. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js +17 -17
  33. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js.map +1 -1
  34. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.d.ts +3 -3
  35. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js +43 -43
  36. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js.map +1 -1
  37. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js +7 -7
  38. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js.map +1 -1
  39. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js +7 -7
  40. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js.map +1 -1
  41. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js +4 -4
  42. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js.map +1 -1
  43. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js +20 -22
  44. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js.map +1 -1
  45. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js +4 -4
  46. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js.map +1 -1
  47. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js +9 -9
  48. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js.map +1 -1
  49. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.d.ts +1 -1
  50. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.js +5 -5
  51. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.js.map +1 -1
  52. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.js +4 -4
  53. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.js.map +1 -1
  54. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/commonTypes.d.ts +1 -1
  55. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.d.ts +2 -2
  56. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js +21 -26
  57. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js.map +1 -1
  58. package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.d.ts +2 -2
  59. package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js +21 -21
  60. package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js.map +1 -1
  61. package/lib/powerquery-language-services/inspection/autocomplete/commonTypes.d.ts +1 -1
  62. package/lib/powerquery-language-services/inspection/autocomplete/task.d.ts +2 -2
  63. package/lib/powerquery-language-services/inspection/autocomplete/task.js +12 -12
  64. package/lib/powerquery-language-services/inspection/autocomplete/task.js.map +1 -1
  65. package/lib/powerquery-language-services/inspection/commonTypes.d.ts +2 -2
  66. package/lib/powerquery-language-services/inspection/deferenceIdentifier.js +12 -13
  67. package/lib/powerquery-language-services/inspection/deferenceIdentifier.js.map +1 -1
  68. package/lib/powerquery-language-services/inspection/expectedType.d.ts +3 -3
  69. package/lib/powerquery-language-services/inspection/expectedType.js +8 -8
  70. package/lib/powerquery-language-services/inspection/expectedType.js.map +1 -1
  71. package/lib/powerquery-language-services/inspection/invokeExpression/common.d.ts +2 -2
  72. package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.d.ts +2 -2
  73. package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js +24 -24
  74. package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js.map +1 -1
  75. package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js +17 -18
  76. package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js.map +1 -1
  77. package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js +20 -22
  78. package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js.map +1 -1
  79. package/lib/powerquery-language-services/inspection/scope/scope.d.ts +2 -2
  80. package/lib/powerquery-language-services/inspection/scope/scopeInspection.js +47 -45
  81. package/lib/powerquery-language-services/inspection/scope/scopeInspection.js.map +1 -1
  82. package/lib/powerquery-language-services/inspection/scope/scopeUtils.d.ts +7 -7
  83. package/lib/powerquery-language-services/inspection/scope/scopeUtils.js +15 -15
  84. package/lib/powerquery-language-services/inspection/scope/scopeUtils.js.map +1 -1
  85. package/lib/powerquery-language-services/inspection/task.d.ts +4 -4
  86. package/lib/powerquery-language-services/inspection/task.js +17 -18
  87. package/lib/powerquery-language-services/inspection/task.js.map +1 -1
  88. package/lib/powerquery-language-services/inspection/type/inspectType/common.d.ts +7 -7
  89. package/lib/powerquery-language-services/inspection/type/inspectType/common.js +56 -59
  90. package/lib/powerquery-language-services/inspection/type/inspectType/common.js.map +1 -1
  91. package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.d.ts +1 -1
  92. package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js +4 -5
  93. package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js.map +1 -1
  94. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.d.ts +1 -1
  95. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js +4 -4
  96. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js.map +1 -1
  97. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.d.ts +1 -1
  98. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js +14 -12
  99. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js.map +1 -1
  100. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.d.ts +1 -1
  101. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js +13 -13
  102. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js.map +1 -1
  103. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.d.ts +1 -1
  104. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js +9 -9
  105. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js.map +1 -1
  106. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.d.ts +1 -1
  107. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js +13 -14
  108. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js.map +1 -1
  109. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.d.ts +1 -1
  110. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js +6 -6
  111. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js.map +1 -1
  112. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.d.ts +1 -1
  113. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js +8 -8
  114. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js.map +1 -1
  115. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.d.ts +1 -1
  116. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js +9 -9
  117. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js.map +1 -1
  118. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.d.ts +1 -1
  119. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js +5 -5
  120. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js.map +1 -1
  121. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.d.ts +1 -1
  122. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js +5 -5
  123. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js.map +1 -1
  124. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.d.ts +1 -1
  125. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.js +4 -4
  126. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.js.map +1 -1
  127. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.d.ts +1 -1
  128. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js +18 -18
  129. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js.map +1 -1
  130. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.d.ts +1 -1
  131. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js +4 -4
  132. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js.map +1 -1
  133. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.d.ts +1 -1
  134. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js +7 -7
  135. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js.map +1 -1
  136. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.d.ts +1 -1
  137. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js +2 -2
  138. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js.map +1 -1
  139. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.d.ts +1 -1
  140. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js +10 -10
  141. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js.map +1 -1
  142. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.d.ts +1 -1
  143. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js +6 -6
  144. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js.map +1 -1
  145. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.d.ts +1 -1
  146. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js +3 -3
  147. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js.map +1 -1
  148. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.d.ts +1 -1
  149. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js +10 -10
  150. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js.map +1 -1
  151. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.d.ts +1 -1
  152. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js +7 -6
  153. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js.map +1 -1
  154. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.d.ts +1 -1
  155. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js +6 -6
  156. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js.map +1 -1
  157. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.d.ts +1 -1
  158. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js +10 -10
  159. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js.map +1 -1
  160. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.d.ts +1 -1
  161. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js +35 -41
  162. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js.map +1 -1
  163. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.d.ts +1 -1
  164. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js +9 -9
  165. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js.map +1 -1
  166. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.d.ts +1 -1
  167. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js +10 -12
  168. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js.map +1 -1
  169. package/lib/powerquery-language-services/inspection/type/task.js +5 -5
  170. package/lib/powerquery-language-services/inspection/type/task.js.map +1 -1
  171. package/lib/powerquery-language-services/inspectionSettings.d.ts +1 -1
  172. package/lib/powerquery-language-services/inspectionUtils.d.ts +3 -6
  173. package/lib/powerquery-language-services/inspectionUtils.js +20 -75
  174. package/lib/powerquery-language-services/inspectionUtils.js.map +1 -1
  175. package/lib/powerquery-language-services/library/library.d.ts +1 -1
  176. package/lib/powerquery-language-services/library/libraryUtils.d.ts +9 -9
  177. package/lib/powerquery-language-services/library/libraryUtils.js +21 -21
  178. package/lib/powerquery-language-services/library/libraryUtils.js.map +1 -1
  179. package/lib/powerquery-language-services/localization/localization.d.ts +3 -3
  180. package/lib/powerquery-language-services/localization/localization.js +9 -9
  181. package/lib/powerquery-language-services/localization/localization.js.map +1 -1
  182. package/lib/powerquery-language-services/positionUtils.js +16 -17
  183. package/lib/powerquery-language-services/positionUtils.js.map +1 -1
  184. package/lib/powerquery-language-services/providers/commonTypes.d.ts +41 -13
  185. package/lib/powerquery-language-services/providers/index.d.ts +2 -2
  186. package/lib/powerquery-language-services/providers/index.js +4 -4
  187. package/lib/powerquery-language-services/providers/index.js.map +1 -1
  188. package/lib/powerquery-language-services/providers/languageCompletionItemProvider.d.ts +4 -4
  189. package/lib/powerquery-language-services/providers/languageCompletionItemProvider.js +22 -19
  190. package/lib/powerquery-language-services/providers/languageCompletionItemProvider.js.map +1 -1
  191. package/lib/powerquery-language-services/providers/libraryProvider.d.ts +17 -0
  192. package/lib/powerquery-language-services/providers/libraryProvider.js +129 -0
  193. package/lib/powerquery-language-services/providers/libraryProvider.js.map +1 -0
  194. package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.d.ts +4 -0
  195. package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js +51 -0
  196. package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js.map +1 -0
  197. package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.d.ts +18 -19
  198. package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js +131 -116
  199. package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js.map +1 -1
  200. package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js +45 -43
  201. package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js.map +1 -1
  202. package/lib/powerquery-language-services/providers/nullSymbolProvider.d.ts +11 -8
  203. package/lib/powerquery-language-services/providers/nullSymbolProvider.js +12 -5
  204. package/lib/powerquery-language-services/providers/nullSymbolProvider.js.map +1 -1
  205. package/lib/powerquery-language-services/traceUtils.d.ts +1 -1
  206. package/lib/powerquery-language-services/traceUtils.js +1 -1
  207. package/lib/powerquery-language-services/traceUtils.js.map +1 -1
  208. package/lib/powerquery-language-services/validate/validate.d.ts +2 -2
  209. package/lib/powerquery-language-services/validate/validate.js +19 -20
  210. package/lib/powerquery-language-services/validate/validate.js.map +1 -1
  211. package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.d.ts +2 -1
  212. package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js +24 -54
  213. package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js.map +1 -1
  214. package/lib/powerquery-language-services/validate/validateFunctionExpression.js +6 -6
  215. package/lib/powerquery-language-services/validate/validateFunctionExpression.js.map +1 -1
  216. package/lib/powerquery-language-services/validate/validateInvokeExpression.d.ts +1 -1
  217. package/lib/powerquery-language-services/validate/validateInvokeExpression.js +23 -23
  218. package/lib/powerquery-language-services/validate/validateInvokeExpression.js.map +1 -1
  219. package/lib/powerquery-language-services/validate/validateParse.d.ts +4 -0
  220. package/lib/powerquery-language-services/validate/validateParse.js +74 -0
  221. package/lib/powerquery-language-services/validate/validateParse.js.map +1 -0
  222. package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js +13 -14
  223. package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js.map +1 -1
  224. package/package.json +3 -3
  225. package/lib/powerquery-language-services/providers/librarySymbolProvider.d.ts +0 -15
  226. package/lib/powerquery-language-services/providers/librarySymbolProvider.js +0 -117
  227. package/lib/powerquery-language-services/providers/librarySymbolProvider.js.map +0 -1
  228. package/lib/powerquery-language-services/validate/validateLexAndParse.d.ts +0 -4
  229. package/lib/powerquery-language-services/validate/validateLexAndParse.js +0 -130
  230. package/lib/powerquery-language-services/validate/validateLexAndParse.js.map +0 -1
  231. package/lib/powerquery-language-services/workspaceCache/index.d.ts +0 -2
  232. package/lib/powerquery-language-services/workspaceCache/index.js +0 -6
  233. package/lib/powerquery-language-services/workspaceCache/index.js.map +0 -1
  234. package/lib/powerquery-language-services/workspaceCache/workspaceCache.d.ts +0 -9
  235. package/lib/powerquery-language-services/workspaceCache/workspaceCache.js +0 -5
  236. package/lib/powerquery-language-services/workspaceCache/workspaceCache.js.map +0 -1
  237. package/lib/powerquery-language-services/workspaceCache/workspaceCacheUtils.d.ts +0 -13
  238. package/lib/powerquery-language-services/workspaceCache/workspaceCacheUtils.js +0 -130
  239. package/lib/powerquery-language-services/workspaceCache/workspaceCacheUtils.js.map +0 -1
@@ -12,145 +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
- getHover() {
84
- return __awaiter(this, void 0, void 0, function* () {
85
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getHover.name, this.analysisSettings.maybeInitialCorrelationId);
86
- const maybeIdentifierContext = yield this.getOnIdentifierProviderContext(trace.id);
87
- if (!maybeIdentifierContext) {
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) {
88
111
  trace.exit();
89
- return commonTypes_1.EmptyHover;
112
+ return undefined;
90
113
  }
91
- // Result priority is based on the order of the symbol providers
92
- const result = AnalysisBase.resolveProviders(AnalysisBase.createHoverCalls(maybeIdentifierContext, [this.localDocumentProvider, this.librarySymbolProvider], this.analysisSettings.symbolProviderTimeoutInMS), commonTypes_1.EmptyHover);
114
+ const result = yield this.localDocumentProvider.getFoldingRanges({
115
+ traceManager: this.analysisSettings.traceManager,
116
+ initialCorrelationId: trace.id,
117
+ cancellationToken,
118
+ nodeIdMapCollection: parseState.contextState.nodeIdMapCollection,
119
+ });
93
120
  trace.exit();
94
- return result;
121
+ if (powerquery_parser_1.ResultUtils.isError(result)) {
122
+ throw result.error;
123
+ }
124
+ return result.value;
125
+ }), this.analysisSettings.inspectionSettings.locale);
126
+ }
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) {
132
+ trace.exit();
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
+ }
151
+ }
152
+ trace.exit();
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;
95
169
  });
96
170
  }
97
- getPartialSemanticTokens() {
171
+ // Assumes that initializeState sets parseState to some value, which may include undefined.
172
+ getParseState() {
98
173
  return __awaiter(this, void 0, void 0, function* () {
99
- 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);
100
183
  const result = yield this.localDocumentProvider.getPartialSemanticTokens({
101
184
  traceManager: this.analysisSettings.traceManager,
102
- 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()),
103
189
  });
104
190
  trace.exit();
105
- return result;
106
- });
107
- }
108
- getSignatureHelp() {
109
- return __awaiter(this, void 0, void 0, function* () {
110
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getSignatureHelp.name, this.analysisSettings.maybeInitialCorrelationId);
111
- const maybeInspected = yield this.promiseMaybeInspected;
112
- if (maybeInspected === undefined) {
113
- trace.exit();
114
- return commonTypes_1.EmptySignatureHelp;
191
+ if (powerquery_parser_1.ResultUtils.isError(result)) {
192
+ throw result.error;
115
193
  }
116
- const maybeContext = yield InspectionUtils.getMaybeContextForSignatureProvider(maybeInspected, this.analysisSettings.traceManager, trace.id);
117
- 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) {
118
202
  trace.exit();
119
- return commonTypes_1.EmptySignatureHelp;
203
+ return undefined;
120
204
  }
121
- const context = maybeContext;
122
- if (context.functionName === undefined) {
123
- trace.exit();
124
- 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
+ }
125
214
  }
126
- // Result priority is based on the order of the symbol providers
127
- const result = AnalysisBase.resolveProviders(AnalysisBase.createSignatureHelpCalls(context, [this.localDocumentProvider, this.librarySymbolProvider], this.analysisSettings.symbolProviderTimeoutInMS), commonTypes_1.EmptySignatureHelp);
128
215
  trace.exit();
129
- return result;
130
- });
216
+ return undefined;
217
+ }), this.analysisSettings.inspectionSettings.locale);
131
218
  }
132
- getRenameEdits(newName) {
133
- return __awaiter(this, void 0, void 0, function* () {
134
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getRenameEdits.name, this.analysisSettings.maybeInitialCorrelationId);
135
- const maybeLeafIdentifier = yield this.getActiveLeafIdentifier();
136
- const maybeInspected = yield this.promiseMaybeInspected;
137
- const scopeById = maybeInspected === null || maybeInspected === void 0 ? void 0 : maybeInspected.typeCache.scopeById;
138
- 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) {
139
226
  trace.exit();
140
- return [];
227
+ return undefined;
141
228
  }
229
+ else {
230
+ leafIdentifier = activeNode.inclusiveIdentifierUnderPosition;
231
+ }
232
+ void (yield this.inspectNodeScope(activeNode, trace.id, cancellationToken));
233
+ const scopeById = this.typeCache.scopeById;
142
234
  const identifiersToBeEdited = [];
143
235
  let valueCreator = undefined;
144
- if (maybeLeafIdentifier.node.kind === "GeneralizedIdentifier" /* GeneralizedIdentifier */) {
145
- valueCreator = maybeLeafIdentifier.node;
236
+ if (leafIdentifier.node.kind === "GeneralizedIdentifier" /* GeneralizedIdentifier */) {
237
+ valueCreator = leafIdentifier.node;
146
238
  }
147
- else if ((maybeLeafIdentifier.node.kind === "Identifier" /* Identifier */ ||
148
- maybeLeafIdentifier.node.kind === "IdentifierExpression" /* IdentifierExpression */) &&
239
+ else if ((leafIdentifier.node.kind === "Identifier" /* Identifier */ ||
240
+ leafIdentifier.node.kind === "IdentifierExpression" /* IdentifierExpression */) &&
149
241
  scopeById) {
150
242
  // need to find this key value and modify all referring it
151
- const identifierExpression = maybeLeafIdentifier.node.kind === "IdentifierExpression" /* IdentifierExpression */
152
- ? maybeLeafIdentifier.node.identifier
153
- : maybeLeafIdentifier.node;
243
+ const identifierExpression = leafIdentifier.node.kind === "IdentifierExpression" /* IdentifierExpression */
244
+ ? leafIdentifier.node.identifier
245
+ : leafIdentifier.node;
154
246
  switch (identifierExpression.identifierContextKind) {
155
247
  case "Key" /* Key */:
156
248
  case "Parameter" /* Parameter */:
@@ -159,29 +251,29 @@ class AnalysisBase {
159
251
  break;
160
252
  case "Value" /* Value */: {
161
253
  // it is the identifier referring the value
162
- let nodeScope = maybeInspected.typeCache.scopeById.get(identifierExpression.id);
254
+ let nodeScope = scopeById.get(identifierExpression.id);
163
255
  // there might be a chance that its scope did not get populated yet, do another try
164
256
  if (!nodeScope) {
165
- yield maybeInspected.tryNodeScope(identifierExpression.id);
166
- 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);
167
259
  }
168
- const scopeItem = (0, scopeUtils_1.findScopeItemByLiteral)(nodeScope, maybeLeafIdentifier.normalizedLiteral);
260
+ const scopeItem = (0, scopeUtils_1.findScopeItemByLiteral)(nodeScope, leafIdentifier.normalizedLiteral);
169
261
  if (scopeItem) {
170
- const maybeValueCreator = (0, scopeUtils_1.maybeScopeCreatorIdentifier)(scopeItem);
171
- if ((maybeValueCreator === null || maybeValueCreator === void 0 ? void 0 : maybeValueCreator.kind) === "Identifier" /* Identifier */) {
172
- if (maybeValueCreator.identifierContextKind === "Key" /* Key */ ||
173
- maybeValueCreator.identifierContextKind === "Parameter" /* Parameter */) {
174
- 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;
175
267
  }
176
268
  else {
177
- identifiersToBeEdited.push(maybeValueCreator);
269
+ identifiersToBeEdited.push(valueCreatorSearch);
178
270
  }
179
271
  }
180
- else if ((maybeValueCreator === null || maybeValueCreator === void 0 ? void 0 : maybeValueCreator.kind) === "GeneralizedIdentifier" /* GeneralizedIdentifier */) {
181
- valueCreator = maybeValueCreator;
272
+ else if ((valueCreatorSearch === null || valueCreatorSearch === void 0 ? void 0 : valueCreatorSearch.kind) === "GeneralizedIdentifier" /* GeneralizedIdentifier */) {
273
+ valueCreator = valueCreatorSearch;
182
274
  }
183
- else if (maybeValueCreator) {
184
- identifiersToBeEdited.push(maybeValueCreator);
275
+ else if (valueCreatorSearch) {
276
+ identifiersToBeEdited.push(valueCreatorSearch);
185
277
  }
186
278
  }
187
279
  break;
@@ -195,58 +287,31 @@ class AnalysisBase {
195
287
  }
196
288
  if (valueCreator) {
197
289
  // need to populate the other identifiers referring it
198
- identifiersToBeEdited.push(...(yield maybeInspected.collectAllIdentifiersBeneath(valueCreator)));
290
+ identifiersToBeEdited.push(...(yield this.collectAllIdentifiersBeneath(powerquery_parser_1.Assert.asDefined(yield this.getParseState()).contextState.nodeIdMapCollection, valueCreator)));
199
291
  }
200
- // if none found, directly put maybeInclusiveIdentifierUnderPosition in if it exists
201
- if (identifiersToBeEdited.length === 0 && maybeLeafIdentifier) {
202
- identifiersToBeEdited.push(maybeLeafIdentifier.node.kind === "IdentifierExpression" /* IdentifierExpression */
203
- ? maybeLeafIdentifier.node.identifier
204
- : 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);
205
297
  }
206
298
  const result = identifiersToBeEdited.map((one) => ({
207
- range: PositionUtils.createRangeFromTokenRange(one.tokenRange),
299
+ range: __1.PositionUtils.createRangeFromTokenRange(one.tokenRange),
208
300
  newText: newName,
209
301
  }));
210
302
  trace.exit();
211
303
  return result;
212
- });
304
+ }), this.analysisSettings.inspectionSettings.locale);
213
305
  }
214
- static promiseWithTimeout(valueFn, timeoutReturnValue, timeoutInMS) {
215
- if (timeoutInMS !== undefined) {
216
- // TODO: Enabling trace entry when timeout occurs
217
- return Promise.race([
218
- valueFn(),
219
- new Promise((resolve) => setTimeout(() => {
220
- resolve(timeoutReturnValue);
221
- }, timeoutInMS)),
222
- ]);
306
+ dispose() {
307
+ this.typeCache.scopeById.clear();
308
+ this.typeCache.typeById.clear();
309
+ for (const token of this.cancellableTokensByAction.values()) {
310
+ token.cancel();
223
311
  }
224
- return valueFn();
225
- }
226
- static resolveProviders(calls, defaultReturnValue) {
227
- return __awaiter(this, void 0, void 0, function* () {
228
- const results = yield Promise.all(calls);
229
- for (let i = 0; i < results.length; i += 1) {
230
- const result = results[i];
231
- if (result !== null) {
232
- return result;
233
- }
234
- }
235
- return defaultReturnValue;
236
- });
237
- }
238
- static createAutocompleteItemCalls(context, providers, timeoutInMS) {
239
- // TODO: add tracing to the catch case
240
- return providers.map((provider) => this.promiseWithTimeout(() => provider.getAutocompleteItems(context), [], timeoutInMS));
241
- }
242
- static createHoverCalls(context, providers, timeoutInMS) {
243
- // TODO: add tracing to the catch case
244
- return providers.map((provider) => this.promiseWithTimeout(() => provider.getHover(context), null, timeoutInMS));
245
- }
246
- static createSignatureHelpCalls(context, providers, timeoutInMS) {
247
- // TODO: add tracing to the catch case
248
- return providers.map((provider) => this.promiseWithTimeout(() => provider.getSignatureHelp(context), null, timeoutInMS));
312
+ this.cancellableTokensByAction.clear();
249
313
  }
314
+ // protected abstract getText(range?: Range): string;
250
315
  static isValidHoverIdentifier(activeNode) {
251
316
  var _a;
252
317
  const ancestry = activeNode.ancestry;
@@ -265,52 +330,338 @@ class AnalysisBase {
265
330
  "GeneralizedIdentifierPairedExpression" /* GeneralizedIdentifierPairedExpression */,
266
331
  "IdentifierPairedExpression" /* IdentifierPairedExpression */,
267
332
  ].includes(followingNode.node.kind) &&
268
- [undefined, 1].includes(powerquery_parser_1.Assert.asDefined(leaf.node.maybeAttributeIndex))) {
333
+ [undefined, 1].includes(powerquery_parser_1.Assert.asDefined(leaf.node.attributeIndex))) {
269
334
  return false;
270
335
  }
271
336
  return true;
272
337
  }
273
- getOnIdentifierProviderContext(correlationId) {
338
+ getAutocompleteItemProviderContext(position, correlationId, newCancellationToken) {
339
+ return __awaiter(this, void 0, void 0, function* () {
340
+ const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getAutocompleteItemProviderContext.name, correlationId);
341
+ const activeNode = yield this.getActiveNode(position);
342
+ if (activeNode === undefined) {
343
+ trace.exit();
344
+ return undefined;
345
+ }
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;
396
+ const context = {
397
+ traceManager: this.analysisSettings.traceManager,
398
+ range: __1.CommonTypesUtils.rangeFromTokenRange(identifier.tokenRange),
399
+ identifier,
400
+ cancellationToken,
401
+ initialCorrelationId: trace.id,
402
+ triedNodeScope: powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id, cancellationToken)),
403
+ };
404
+ trace.exit();
405
+ return context;
406
+ });
407
+ }
408
+ getHoverProviderContext(position, correlationId, cancellationToken) {
274
409
  return __awaiter(this, void 0, void 0, function* () {
275
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getDefinition.name, correlationId);
276
- const maybeActiveNode = yield this.getActiveNode();
277
- const maybeIdentifierUnderPosition = maybeActiveNode === null || maybeActiveNode === void 0 ? void 0 : maybeActiveNode.maybeExclusiveIdentifierUnderPosition;
278
- if (maybeActiveNode === undefined ||
279
- maybeIdentifierUnderPosition === undefined ||
280
- !AnalysisBase.isValidHoverIdentifier(maybeActiveNode)) {
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();
414
+ return undefined;
415
+ }
416
+ const identifierUnderPosition = activeNode.exclusiveIdentifierUnderPosition;
417
+ if (identifierUnderPosition === undefined || !AnalysisBase.isValidHoverIdentifier(activeNode)) {
281
418
  trace.exit();
282
419
  return undefined;
283
420
  }
284
- const identifier = maybeIdentifierUnderPosition.node.kind === "IdentifierExpression" /* IdentifierExpression */
285
- ? maybeIdentifierUnderPosition.node.identifier
286
- : maybeIdentifierUnderPosition.node;
421
+ const identifier = identifierUnderPosition.node.kind === "IdentifierExpression" /* IdentifierExpression */
422
+ ? identifierUnderPosition.node.identifier
423
+ : identifierUnderPosition.node;
287
424
  const context = {
288
425
  traceManager: this.analysisSettings.traceManager,
289
426
  range: __1.CommonTypesUtils.rangeFromTokenRange(identifier.tokenRange),
290
427
  identifier,
291
- maybeInitialCorrelationId: trace.id,
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)),
292
435
  };
293
436
  trace.exit();
294
437
  return context;
295
438
  });
296
439
  }
297
- getActiveNode() {
440
+ getSignatureProviderContext(position, correlationId, newCancellationToken) {
298
441
  return __awaiter(this, void 0, void 0, function* () {
299
- const maybeInspected = yield this.promiseMaybeInspected;
300
- if (maybeInspected === undefined) {
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();
301
448
  return undefined;
302
449
  }
303
- return __1.Inspection.ActiveNodeUtils.isPositionInBounds(maybeInspected.maybeActiveNode)
304
- ? maybeInspected.maybeActiveNode
305
- : undefined;
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;
306
469
  });
307
470
  }
308
- getActiveLeafIdentifier() {
309
- var _a;
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() {
310
534
  return __awaiter(this, void 0, void 0, function* () {
311
- return (_a = (yield this.getActiveNode())) === null || _a === void 0 ? void 0 : _a.maybeInclusiveIdentifierUnderPosition;
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) {
582
+ return __awaiter(this, void 0, void 0, function* () {
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);
312
597
  });
313
598
  }
314
599
  }
315
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
+ }
316
667
  //# sourceMappingURL=analysisBase.js.map