@microsoft/powerquery-language-services 0.10.6 → 0.11.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 (419) hide show
  1. package/lib/powerquery-language-services/analysis/analysis.d.ts +21 -21
  2. package/lib/powerquery-language-services/analysis/analysis.js +4 -4
  3. package/lib/powerquery-language-services/analysis/analysisBase.d.ts +53 -53
  4. package/lib/powerquery-language-services/analysis/analysisBase.js +741 -710
  5. package/lib/powerquery-language-services/analysis/analysisBase.js.map +1 -1
  6. package/lib/powerquery-language-services/analysis/analysisSettings.d.ts +14 -14
  7. package/lib/powerquery-language-services/analysis/analysisSettings.js +4 -4
  8. package/lib/powerquery-language-services/analysis/analysisUtils.d.ts +4 -4
  9. package/lib/powerquery-language-services/analysis/analysisUtils.js +26 -28
  10. package/lib/powerquery-language-services/analysis/analysisUtils.js.map +1 -1
  11. package/lib/powerquery-language-services/analysis/documentAnalysis.d.ts +8 -8
  12. package/lib/powerquery-language-services/analysis/documentAnalysis.js +15 -15
  13. package/lib/powerquery-language-services/analysis/index.d.ts +5 -5
  14. package/lib/powerquery-language-services/analysis/index.js +43 -10
  15. package/lib/powerquery-language-services/analysis/index.js.map +1 -1
  16. package/lib/powerquery-language-services/analysis/memoizedAnalysis.d.ts +18 -18
  17. package/lib/powerquery-language-services/analysis/memoizedAnalysis.js +51 -65
  18. package/lib/powerquery-language-services/analysis/memoizedAnalysis.js.map +1 -1
  19. package/lib/powerquery-language-services/commonTypes.d.ts +8 -8
  20. package/lib/powerquery-language-services/commonTypes.js +33 -33
  21. package/lib/powerquery-language-services/commonTypesUtils.d.ts +4 -4
  22. package/lib/powerquery-language-services/commonTypesUtils.js +18 -19
  23. package/lib/powerquery-language-services/commonTypesUtils.js.map +1 -1
  24. package/lib/powerquery-language-services/diagnosticErrorCode.d.ts +8 -8
  25. package/lib/powerquery-language-services/diagnosticErrorCode.js +14 -14
  26. package/lib/powerquery-language-services/diagnosticErrorCode.js.map +1 -1
  27. package/lib/powerquery-language-services/documentSymbols.d.ts +3 -3
  28. package/lib/powerquery-language-services/documentSymbols.js +80 -83
  29. package/lib/powerquery-language-services/documentSymbols.js.map +1 -1
  30. package/lib/powerquery-language-services/externalType/externalType.d.ts +21 -21
  31. package/lib/powerquery-language-services/externalType/externalType.js +16 -16
  32. package/lib/powerquery-language-services/externalType/externalType.js.map +1 -1
  33. package/lib/powerquery-language-services/externalType/externalTypeUtils.d.ts +5 -5
  34. package/lib/powerquery-language-services/externalType/externalTypeUtils.js +32 -33
  35. package/lib/powerquery-language-services/externalType/externalTypeUtils.js.map +1 -1
  36. package/lib/powerquery-language-services/externalType/index.d.ts +2 -2
  37. package/lib/powerquery-language-services/externalType/index.js +40 -7
  38. package/lib/powerquery-language-services/externalType/index.js.map +1 -1
  39. package/lib/powerquery-language-services/formatter.d.ts +5 -5
  40. package/lib/powerquery-language-services/formatter.js +72 -46
  41. package/lib/powerquery-language-services/formatter.js.map +1 -1
  42. package/lib/powerquery-language-services/index.d.ts +20 -20
  43. package/lib/powerquery-language-services/index.js +64 -42
  44. package/lib/powerquery-language-services/index.js.map +1 -1
  45. package/lib/powerquery-language-services/inspection/activeNode/activeNode.d.ts +43 -43
  46. package/lib/powerquery-language-services/inspection/activeNode/activeNode.js +17 -17
  47. package/lib/powerquery-language-services/inspection/activeNode/activeNode.js.map +1 -1
  48. package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.d.ts +11 -11
  49. package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js +351 -351
  50. package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js.map +1 -1
  51. package/lib/powerquery-language-services/inspection/activeNode/index.d.ts +3 -3
  52. package/lib/powerquery-language-services/inspection/activeNode/index.js +44 -22
  53. package/lib/powerquery-language-services/inspection/activeNode/index.js.map +1 -1
  54. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.d.ts +8 -8
  55. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js +281 -258
  56. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js.map +1 -1
  57. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItem.d.ts +6 -6
  58. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItem.js +4 -4
  59. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.d.ts +8 -8
  60. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js +78 -79
  61. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js.map +1 -1
  62. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/index.d.ts +2 -2
  63. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/index.js +43 -21
  64. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/index.js.map +1 -1
  65. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.d.ts +8 -8
  66. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js +217 -197
  67. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js.map +1 -1
  68. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.d.ts +3 -3
  69. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js +86 -87
  70. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js.map +1 -1
  71. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.d.ts +3 -3
  72. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js +53 -54
  73. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js.map +1 -1
  74. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.d.ts +3 -3
  75. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js +29 -30
  76. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js.map +1 -1
  77. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.d.ts +3 -3
  78. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js +58 -70
  79. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js.map +1 -1
  80. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.d.ts +3 -3
  81. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js +38 -39
  82. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js.map +1 -1
  83. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.d.ts +3 -3
  84. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js +40 -41
  85. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js.map +1 -1
  86. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.d.ts +3 -3
  87. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.js +63 -31
  88. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.js.map +1 -1
  89. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.d.ts +3 -3
  90. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.js +30 -39
  91. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.js.map +1 -1
  92. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/commonTypes.d.ts +11 -11
  93. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/commonTypes.js +4 -4
  94. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/index.d.ts +1 -1
  95. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/index.js +7 -7
  96. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.d.ts +6 -6
  97. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js +190 -188
  98. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js.map +1 -1
  99. package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.d.ts +6 -6
  100. package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js +334 -335
  101. package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js.map +1 -1
  102. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteUtils.d.ts +2 -2
  103. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteUtils.js +19 -20
  104. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteUtils.js.map +1 -1
  105. package/lib/powerquery-language-services/inspection/autocomplete/commonTypes.d.ts +27 -27
  106. package/lib/powerquery-language-services/inspection/autocomplete/commonTypes.js +4 -4
  107. package/lib/powerquery-language-services/inspection/autocomplete/index.d.ts +6 -6
  108. package/lib/powerquery-language-services/inspection/autocomplete/index.js +47 -25
  109. package/lib/powerquery-language-services/inspection/autocomplete/index.js.map +1 -1
  110. package/lib/powerquery-language-services/inspection/autocomplete/task.d.ts +6 -6
  111. package/lib/powerquery-language-services/inspection/autocomplete/task.js +68 -44
  112. package/lib/powerquery-language-services/inspection/autocomplete/task.js.map +1 -1
  113. package/lib/powerquery-language-services/inspection/autocomplete/trailingToken.d.ts +7 -7
  114. package/lib/powerquery-language-services/inspection/autocomplete/trailingToken.js +4 -4
  115. package/lib/powerquery-language-services/inspection/autocomplete/trailingTokenUtils.d.ts +4 -4
  116. package/lib/powerquery-language-services/inspection/autocomplete/trailingTokenUtils.js +20 -18
  117. package/lib/powerquery-language-services/inspection/autocomplete/trailingTokenUtils.js.map +1 -1
  118. package/lib/powerquery-language-services/inspection/commonTypes.d.ts +20 -20
  119. package/lib/powerquery-language-services/inspection/commonTypes.js +4 -4
  120. package/lib/powerquery-language-services/inspection/dereferencedIdentifier/dereferencedIdentifier.d.ts +37 -37
  121. package/lib/powerquery-language-services/inspection/dereferencedIdentifier/dereferencedIdentifier.js +13 -13
  122. package/lib/powerquery-language-services/inspection/dereferencedIdentifier/dereferencedIdentifier.js.map +1 -1
  123. package/lib/powerquery-language-services/inspection/dereferencedIdentifier/dereferencedIdentifierUtils.d.ts +6 -6
  124. package/lib/powerquery-language-services/inspection/dereferencedIdentifier/dereferencedIdentifierUtils.js +244 -221
  125. package/lib/powerquery-language-services/inspection/dereferencedIdentifier/dereferencedIdentifierUtils.js.map +1 -1
  126. package/lib/powerquery-language-services/inspection/dereferencedIdentifier/index.d.ts +2 -2
  127. package/lib/powerquery-language-services/inspection/dereferencedIdentifier/index.js +41 -19
  128. package/lib/powerquery-language-services/inspection/dereferencedIdentifier/index.js.map +1 -1
  129. package/lib/powerquery-language-services/inspection/expectedType.d.ts +8 -8
  130. package/lib/powerquery-language-services/inspection/expectedType.js +420 -388
  131. package/lib/powerquery-language-services/inspection/expectedType.js.map +1 -1
  132. package/lib/powerquery-language-services/inspection/index.d.ts +9 -9
  133. package/lib/powerquery-language-services/inspection/index.js +27 -27
  134. package/lib/powerquery-language-services/inspection/invokeExpression/common.d.ts +16 -16
  135. package/lib/powerquery-language-services/inspection/invokeExpression/common.js +4 -4
  136. package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.d.ts +12 -12
  137. package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js +137 -106
  138. package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js.map +1 -1
  139. package/lib/powerquery-language-services/inspection/invokeExpression/index.d.ts +3 -3
  140. package/lib/powerquery-language-services/inspection/invokeExpression/index.js +20 -20
  141. package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.d.ts +8 -8
  142. package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js +141 -119
  143. package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js.map +1 -1
  144. package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.d.ts +11 -11
  145. package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js +57 -58
  146. package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js.map +1 -1
  147. package/lib/powerquery-language-services/inspection/scope/index.d.ts +3 -3
  148. package/lib/powerquery-language-services/inspection/scope/index.js +44 -22
  149. package/lib/powerquery-language-services/inspection/scope/index.js.map +1 -1
  150. package/lib/powerquery-language-services/inspection/scope/scope.d.ts +46 -46
  151. package/lib/powerquery-language-services/inspection/scope/scope.js +14 -14
  152. package/lib/powerquery-language-services/inspection/scope/scope.js.map +1 -1
  153. package/lib/powerquery-language-services/inspection/scope/scopeInspection.d.ts +7 -7
  154. package/lib/powerquery-language-services/inspection/scope/scopeInspection.js +313 -327
  155. package/lib/powerquery-language-services/inspection/scope/scopeInspection.js.map +1 -1
  156. package/lib/powerquery-language-services/inspection/scope/scopeUtils.d.ts +17 -17
  157. package/lib/powerquery-language-services/inspection/scope/scopeUtils.js +125 -104
  158. package/lib/powerquery-language-services/inspection/scope/scopeUtils.js.map +1 -1
  159. package/lib/powerquery-language-services/inspection/task.d.ts +28 -28
  160. package/lib/powerquery-language-services/inspection/task.js +196 -160
  161. package/lib/powerquery-language-services/inspection/task.js.map +1 -1
  162. package/lib/powerquery-language-services/inspection/type/index.d.ts +3 -3
  163. package/lib/powerquery-language-services/inspection/type/index.js +44 -22
  164. package/lib/powerquery-language-services/inspection/type/index.js.map +1 -1
  165. package/lib/powerquery-language-services/inspection/type/inspectType/common.d.ts +14 -14
  166. package/lib/powerquery-language-services/inspection/type/inspectType/common.js +362 -353
  167. package/lib/powerquery-language-services/inspection/type/inspectType/common.js.map +1 -1
  168. package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.d.ts +8 -8
  169. package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js +28 -43
  170. package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js.map +1 -1
  171. package/lib/powerquery-language-services/inspection/type/inspectType/index.d.ts +1 -1
  172. package/lib/powerquery-language-services/inspection/type/inspectType/index.js +19 -19
  173. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeConstant.d.ts +3 -3
  174. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeConstant.js +57 -57
  175. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeConstant.js.map +1 -1
  176. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.d.ts +4 -4
  177. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js +26 -39
  178. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js.map +1 -1
  179. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.d.ts +4 -4
  180. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js +82 -62
  181. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js.map +1 -1
  182. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.d.ts +4 -4
  183. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js +55 -69
  184. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js.map +1 -1
  185. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.d.ts +4 -4
  186. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js +128 -103
  187. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js.map +1 -1
  188. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.d.ts +4 -4
  189. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js +63 -75
  190. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js.map +1 -1
  191. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.d.ts +4 -4
  192. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js +21 -34
  193. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js.map +1 -1
  194. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.d.ts +4 -4
  195. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js +74 -87
  196. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js.map +1 -1
  197. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.d.ts +4 -4
  198. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js +85 -65
  199. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js.map +1 -1
  200. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.d.ts +4 -4
  201. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js +25 -38
  202. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js.map +1 -1
  203. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.d.ts +4 -4
  204. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js +25 -38
  205. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js.map +1 -1
  206. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.d.ts +4 -4
  207. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.js +46 -61
  208. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.js.map +1 -1
  209. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.d.ts +4 -4
  210. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js +69 -84
  211. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js.map +1 -1
  212. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.d.ts +4 -4
  213. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js +37 -50
  214. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js.map +1 -1
  215. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.d.ts +4 -4
  216. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js +43 -56
  217. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js.map +1 -1
  218. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.d.ts +4 -4
  219. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js +44 -44
  220. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js.map +1 -1
  221. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.d.ts +4 -4
  222. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js +36 -49
  223. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js.map +1 -1
  224. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.d.ts +4 -4
  225. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js +23 -33
  226. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js.map +1 -1
  227. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.d.ts +4 -4
  228. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js +25 -26
  229. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js.map +1 -1
  230. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.d.ts +4 -4
  231. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js +53 -66
  232. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js.map +1 -1
  233. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.d.ts +4 -4
  234. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js +45 -58
  235. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js.map +1 -1
  236. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.d.ts +4 -4
  237. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js +42 -50
  238. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js.map +1 -1
  239. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.d.ts +4 -4
  240. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js +43 -56
  241. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js.map +1 -1
  242. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeState/index.d.ts +2 -2
  243. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeState/index.js +41 -19
  244. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeState/index.js.map +1 -1
  245. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeState/inspectTypeState.d.ts +9 -9
  246. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeState/inspectTypeState.js +4 -4
  247. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeState/inspectTypeStateUtils.d.ts +7 -7
  248. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeState/inspectTypeStateUtils.js +41 -42
  249. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeState/inspectTypeStateUtils.js.map +1 -1
  250. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.d.ts +8 -8
  251. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js +326 -292
  252. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js.map +1 -1
  253. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.d.ts +4 -4
  254. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js +51 -59
  255. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js.map +1 -1
  256. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.d.ts +4 -4
  257. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js +76 -89
  258. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js.map +1 -1
  259. package/lib/powerquery-language-services/inspection/type/task.d.ts +10 -10
  260. package/lib/powerquery-language-services/inspection/type/task.js +49 -65
  261. package/lib/powerquery-language-services/inspection/type/task.js.map +1 -1
  262. package/lib/powerquery-language-services/inspection/typeCache/index.d.ts +2 -2
  263. package/lib/powerquery-language-services/inspection/typeCache/index.js +43 -21
  264. package/lib/powerquery-language-services/inspection/typeCache/index.js.map +1 -1
  265. package/lib/powerquery-language-services/inspection/typeCache/typeCache.d.ts +7 -7
  266. package/lib/powerquery-language-services/inspection/typeCache/typeCache.js +4 -4
  267. package/lib/powerquery-language-services/inspection/typeCache/typeCacheUtils.d.ts +2 -2
  268. package/lib/powerquery-language-services/inspection/typeCache/typeCacheUtils.js +12 -13
  269. package/lib/powerquery-language-services/inspection/typeCache/typeCacheUtils.js.map +1 -1
  270. package/lib/powerquery-language-services/inspectionSettings.d.ts +13 -13
  271. package/lib/powerquery-language-services/inspectionSettings.js +12 -12
  272. package/lib/powerquery-language-services/inspectionSettings.js.map +1 -1
  273. package/lib/powerquery-language-services/inspectionUtils.d.ts +16 -16
  274. package/lib/powerquery-language-services/inspectionUtils.js +142 -149
  275. package/lib/powerquery-language-services/inspectionUtils.js.map +1 -1
  276. package/lib/powerquery-language-services/jaroWinkler.d.ts +3 -3
  277. package/lib/powerquery-language-services/jaroWinkler.js +102 -103
  278. package/lib/powerquery-language-services/jaroWinkler.js.map +1 -1
  279. package/lib/powerquery-language-services/languageServiceUtils.d.ts +2 -2
  280. package/lib/powerquery-language-services/languageServiceUtils.js +53 -39
  281. package/lib/powerquery-language-services/languageServiceUtils.js.map +1 -1
  282. package/lib/powerquery-language-services/library/index.d.ts +5 -5
  283. package/lib/powerquery-language-services/library/index.js +43 -10
  284. package/lib/powerquery-language-services/library/index.js.map +1 -1
  285. package/lib/powerquery-language-services/library/library.d.ts +45 -45
  286. package/lib/powerquery-language-services/library/library.js +19 -19
  287. package/lib/powerquery-language-services/library/library.js.map +1 -1
  288. package/lib/powerquery-language-services/library/libraryDefinitionUtils.d.ts +21 -21
  289. package/lib/powerquery-language-services/library/libraryDefinitionUtils.js +106 -107
  290. package/lib/powerquery-language-services/library/libraryDefinitionUtils.js.map +1 -1
  291. package/lib/powerquery-language-services/library/librarySymbol.d.ts +33 -33
  292. package/lib/powerquery-language-services/library/librarySymbol.js +4 -4
  293. package/lib/powerquery-language-services/library/librarySymbolUtils.d.ts +34 -34
  294. package/lib/powerquery-language-services/library/librarySymbolUtils.js +258 -261
  295. package/lib/powerquery-language-services/library/librarySymbolUtils.js.map +1 -1
  296. package/lib/powerquery-language-services/library/libraryUtils.d.ts +8 -8
  297. package/lib/powerquery-language-services/library/libraryUtils.js +48 -49
  298. package/lib/powerquery-language-services/library/libraryUtils.js.map +1 -1
  299. package/lib/powerquery-language-services/localization/index.d.ts +2 -2
  300. package/lib/powerquery-language-services/localization/index.js +43 -21
  301. package/lib/powerquery-language-services/localization/index.js.map +1 -1
  302. package/lib/powerquery-language-services/localization/localization.d.ts +10 -10
  303. package/lib/powerquery-language-services/localization/localization.js +51 -51
  304. package/lib/powerquery-language-services/localization/localization.js.map +1 -1
  305. package/lib/powerquery-language-services/localization/localizationUtils.d.ts +2 -2
  306. package/lib/powerquery-language-services/localization/localizationUtils.js +7 -9
  307. package/lib/powerquery-language-services/localization/localizationUtils.js.map +1 -1
  308. package/lib/powerquery-language-services/localization/templates/templates.bg-BG.json +12 -12
  309. package/lib/powerquery-language-services/localization/templates/templates.ca-ES.json +12 -12
  310. package/lib/powerquery-language-services/localization/templates/templates.cs-CZ.json +12 -12
  311. package/lib/powerquery-language-services/localization/templates/templates.da-DK.json +12 -12
  312. package/lib/powerquery-language-services/localization/templates/templates.de-DE.json +12 -12
  313. package/lib/powerquery-language-services/localization/templates/templates.el-GR.json +12 -12
  314. package/lib/powerquery-language-services/localization/templates/templates.es-ES.json +12 -12
  315. package/lib/powerquery-language-services/localization/templates/templates.et-EE.json +12 -12
  316. package/lib/powerquery-language-services/localization/templates/templates.eu-ES.json +12 -12
  317. package/lib/powerquery-language-services/localization/templates/templates.fi-FI.json +12 -12
  318. package/lib/powerquery-language-services/localization/templates/templates.fr-FR.json +12 -12
  319. package/lib/powerquery-language-services/localization/templates/templates.gl-ES.json +12 -12
  320. package/lib/powerquery-language-services/localization/templates/templates.hi-IN.json +12 -12
  321. package/lib/powerquery-language-services/localization/templates/templates.hr-HR.json +12 -12
  322. package/lib/powerquery-language-services/localization/templates/templates.hu-HU.json +12 -12
  323. package/lib/powerquery-language-services/localization/templates/templates.id-ID.json +12 -12
  324. package/lib/powerquery-language-services/localization/templates/templates.it-IT.json +12 -12
  325. package/lib/powerquery-language-services/localization/templates/templates.ja-JP.json +12 -12
  326. package/lib/powerquery-language-services/localization/templates/templates.json +20 -20
  327. package/lib/powerquery-language-services/localization/templates/templates.kk-KZ.json +12 -12
  328. package/lib/powerquery-language-services/localization/templates/templates.ko-KR.json +12 -12
  329. package/lib/powerquery-language-services/localization/templates/templates.lt-LT.json +12 -12
  330. package/lib/powerquery-language-services/localization/templates/templates.lv-LV.json +12 -12
  331. package/lib/powerquery-language-services/localization/templates/templates.ms-MY.json +12 -12
  332. package/lib/powerquery-language-services/localization/templates/templates.nb-NO.json +12 -12
  333. package/lib/powerquery-language-services/localization/templates/templates.nl-NL.json +12 -12
  334. package/lib/powerquery-language-services/localization/templates/templates.pl-PL.json +12 -12
  335. package/lib/powerquery-language-services/localization/templates/templates.pt-BR.json +12 -12
  336. package/lib/powerquery-language-services/localization/templates/templates.pt-PT.json +12 -12
  337. package/lib/powerquery-language-services/localization/templates/templates.ro-RO.json +12 -12
  338. package/lib/powerquery-language-services/localization/templates/templates.ru-RU.json +12 -12
  339. package/lib/powerquery-language-services/localization/templates/templates.sk-SK.json +12 -12
  340. package/lib/powerquery-language-services/localization/templates/templates.sl-SI.json +12 -12
  341. package/lib/powerquery-language-services/localization/templates/templates.sr-Cyrl-RS.json +12 -12
  342. package/lib/powerquery-language-services/localization/templates/templates.sr-Latn-RS.json +12 -12
  343. package/lib/powerquery-language-services/localization/templates/templates.sv-SE.json +12 -12
  344. package/lib/powerquery-language-services/localization/templates/templates.th-TH.json +12 -12
  345. package/lib/powerquery-language-services/localization/templates/templates.tr-TR.json +12 -12
  346. package/lib/powerquery-language-services/localization/templates/templates.uk-UA.json +12 -12
  347. package/lib/powerquery-language-services/localization/templates/templates.vi-VN.json +12 -12
  348. package/lib/powerquery-language-services/localization/templates/templates.zh-CN.json +12 -12
  349. package/lib/powerquery-language-services/localization/templates/templates.zh-TW.json +12 -12
  350. package/lib/powerquery-language-services/localization/templates.d.ts +55 -55
  351. package/lib/powerquery-language-services/localization/templates.js +166 -133
  352. package/lib/powerquery-language-services/localization/templates.js.map +1 -1
  353. package/lib/powerquery-language-services/positionUtils.d.ts +32 -32
  354. package/lib/powerquery-language-services/positionUtils.js +257 -240
  355. package/lib/powerquery-language-services/positionUtils.js.map +1 -1
  356. package/lib/powerquery-language-services/providers/commonTypes.d.ts +75 -75
  357. package/lib/powerquery-language-services/providers/commonTypes.js +4 -4
  358. package/lib/powerquery-language-services/providers/index.d.ts +5 -5
  359. package/lib/powerquery-language-services/providers/index.js +28 -28
  360. package/lib/powerquery-language-services/providers/languageCompletionItemProvider.d.ts +12 -12
  361. package/lib/powerquery-language-services/providers/languageCompletionItemProvider.js +62 -73
  362. package/lib/powerquery-language-services/providers/languageCompletionItemProvider.js.map +1 -1
  363. package/lib/powerquery-language-services/providers/libraryProvider.d.ts +16 -16
  364. package/lib/powerquery-language-services/providers/libraryProvider.js +116 -131
  365. package/lib/powerquery-language-services/providers/libraryProvider.js.map +1 -1
  366. package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.d.ts +4 -4
  367. package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js +50 -52
  368. package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js.map +1 -1
  369. package/lib/powerquery-language-services/providers/localDocumentProvider/index.d.ts +1 -1
  370. package/lib/powerquery-language-services/providers/localDocumentProvider/index.js +19 -19
  371. package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.d.ts +21 -21
  372. package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js +277 -259
  373. package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js.map +1 -1
  374. package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.d.ts +6 -6
  375. package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js +313 -321
  376. package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js.map +1 -1
  377. package/lib/powerquery-language-services/providers/nullSymbolProvider.d.ts +19 -19
  378. package/lib/powerquery-language-services/providers/nullSymbolProvider.js +46 -68
  379. package/lib/powerquery-language-services/providers/nullSymbolProvider.js.map +1 -1
  380. package/lib/powerquery-language-services/tokenPositionComparison.d.ts +5 -5
  381. package/lib/powerquery-language-services/tokenPositionComparison.js +12 -12
  382. package/lib/powerquery-language-services/tokenPositionComparison.js.map +1 -1
  383. package/lib/powerquery-language-services/trace.d.ts +27 -27
  384. package/lib/powerquery-language-services/trace.js +36 -36
  385. package/lib/powerquery-language-services/trace.js.map +1 -1
  386. package/lib/powerquery-language-services/traceUtils.d.ts +14 -14
  387. package/lib/powerquery-language-services/traceUtils.js +19 -20
  388. package/lib/powerquery-language-services/traceUtils.js.map +1 -1
  389. package/lib/powerquery-language-services/validate/index.d.ts +3 -3
  390. package/lib/powerquery-language-services/validate/index.js +23 -23
  391. package/lib/powerquery-language-services/validate/validate.d.ts +6 -6
  392. package/lib/powerquery-language-services/validate/validate.js +60 -67
  393. package/lib/powerquery-language-services/validate/validate.js.map +1 -1
  394. package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.d.ts +6 -6
  395. package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js +164 -134
  396. package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js.map +1 -1
  397. package/lib/powerquery-language-services/validate/validateFunctionExpression.d.ts +4 -4
  398. package/lib/powerquery-language-services/validate/validateFunctionExpression.js +63 -63
  399. package/lib/powerquery-language-services/validate/validateFunctionExpression.js.map +1 -1
  400. package/lib/powerquery-language-services/validate/validateInvokeExpression.d.ts +5 -5
  401. package/lib/powerquery-language-services/validate/validateInvokeExpression.js +109 -123
  402. package/lib/powerquery-language-services/validate/validateInvokeExpression.js.map +1 -1
  403. package/lib/powerquery-language-services/validate/validateOk.d.ts +5 -5
  404. package/lib/powerquery-language-services/validate/validateOk.js +4 -4
  405. package/lib/powerquery-language-services/validate/validateParse.d.ts +4 -4
  406. package/lib/powerquery-language-services/validate/validateParse.js +94 -73
  407. package/lib/powerquery-language-services/validate/validateParse.js.map +1 -1
  408. package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.d.ts +5 -5
  409. package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js +99 -109
  410. package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js.map +1 -1
  411. package/lib/powerquery-language-services/validate/validationSettings/index.d.ts +2 -2
  412. package/lib/powerquery-language-services/validate/validationSettings/index.js +43 -21
  413. package/lib/powerquery-language-services/validate/validationSettings/index.js.map +1 -1
  414. package/lib/powerquery-language-services/validate/validationSettings/validationSettings.d.ts +12 -12
  415. package/lib/powerquery-language-services/validate/validationSettings/validationSettings.js +4 -4
  416. package/lib/powerquery-language-services/validate/validationSettings/validationSettingsUtils.d.ts +3 -3
  417. package/lib/powerquery-language-services/validate/validationSettings/validationSettingsUtils.js +15 -10
  418. package/lib/powerquery-language-services/validate/validationSettings/validationSettingsUtils.js.map +1 -1
  419. package/package.json +23 -22
@@ -1,711 +1,742 @@
1
- "use strict";
2
- // Copyright (c) Microsoft Corporation.
3
- // Licensed under the MIT license.
4
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6
- return new (P || (P = Promise))(function (resolve, reject) {
7
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
8
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
9
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
10
- step((generator = generator.apply(thisArg, _arguments || [])).next());
11
- });
12
- };
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.AnalysisBase = void 0;
15
- const PQP = require("@microsoft/powerquery-parser/lib/powerquery-parser");
16
- const powerquery_parser_1 = require("@microsoft/powerquery-parser");
17
- const vscode_languageserver_types_1 = require("vscode-languageserver-types");
18
- const parser_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/parser");
19
- const trace_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/common/trace");
20
- const language_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/language");
21
- const inspection_1 = require("../inspection");
22
- const __1 = require("..");
23
- const scopeUtils_1 = require("../inspection/scope/scopeUtils");
24
- const providers_1 = require("../providers");
25
- const trace_2 = require("../trace");
26
- // Implementation of Analysis.
27
- // All public methods should:
28
- // - use ensureResultAsync to ensure a Result, allowing all protected methods to safetly throw.
29
- // - take an optional cancellation token.
30
- class AnalysisBase {
31
- constructor(textDocument, analysisSettings) {
32
- this.textDocument = textDocument;
33
- // Local type cache that is shared across provider actions.
34
- this.typeCache = {
35
- scopeById: new Map(),
36
- typeById: new Map(),
37
- };
38
- this.initialCorrelationId = analysisSettings.initialCorrelationId;
39
- this.inspectionSettings = analysisSettings.inspectionSettings;
40
- this.locale = analysisSettings.inspectionSettings.locale;
41
- this.traceManager = analysisSettings.traceManager;
42
- this.languageAutocompleteItemProvider = analysisSettings.languageAutocompleteItemProviderFactory
43
- ? analysisSettings.languageAutocompleteItemProviderFactory(analysisSettings.inspectionSettings.locale)
44
- : new providers_1.LanguageAutocompleteItemProvider(analysisSettings.inspectionSettings.locale);
45
- this.libraryProvider = analysisSettings.libraryProviderFactory
46
- ? analysisSettings.libraryProviderFactory(analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale)
47
- : new providers_1.LibraryProvider(analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale);
48
- this.localDocumentProvider = analysisSettings.localDocumentProviderFactory
49
- ? analysisSettings.localDocumentProviderFactory(textDocument.uri.toString(), this.typeCache, analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale)
50
- : new providers_1.LocalDocumentProvider(this.textDocument.uri.toString(), this.typeCache, analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale);
51
- this.triedLexParse = this.tryLexParse();
52
- }
53
- getAutocompleteItems(position, cancellationTokenOverride) {
54
- return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
55
- const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getAutocompleteItems.name, this.initialCorrelationId);
56
- const context = yield this.getAutocompleteItemProviderContext(position, trace.id, cancellationTokenOverride);
57
- if (context === undefined) {
58
- trace.exit();
59
- return undefined;
60
- }
61
- const autocompleteItemTasks = [
62
- this.languageAutocompleteItemProvider.getAutocompleteItems(context),
63
- this.libraryProvider.getAutocompleteItems(context),
64
- this.localDocumentProvider.getAutocompleteItems(context),
65
- ];
66
- const autocompleteItems = [];
67
- const results = yield Promise.all(autocompleteItemTasks);
68
- // TODO: intellisense improvements
69
- // - honor expected data type
70
- for (const result of results) {
71
- if (powerquery_parser_1.ResultUtils.isOk(result) && result.value !== undefined) {
72
- for (const item of result.value) {
73
- autocompleteItems.push(item);
74
- }
75
- }
76
- }
77
- trace.exit();
78
- return autocompleteItems;
79
- }), this.locale);
80
- }
81
- getDefinition(position, cancellationTokenOverride) {
82
- return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
83
- const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getDefinition.name, this.initialCorrelationId);
84
- const identifierContext = yield this.getDefinitionProviderContext(position, trace.id, cancellationTokenOverride);
85
- if (!identifierContext) {
86
- trace.exit();
87
- return undefined;
88
- }
89
- const result = yield this.localDocumentProvider.getDefinition(identifierContext);
90
- if (powerquery_parser_1.ResultUtils.isError(result)) {
91
- trace.exit({ [trace_1.TraceConstant.IsThrowing]: true });
92
- throw result.error;
93
- }
94
- trace.exit();
95
- return result.value;
96
- }), this.locale);
97
- }
98
- getDocumentSymbols(cancellationTokenOverride) {
99
- return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
100
- const parseState = yield this.getParseStateOkOrThrow(undefined);
101
- if (parseState === undefined) {
102
- return undefined;
103
- }
104
- const nodeIdMapCollection = parseState.contextState.nodeIdMapCollection;
105
- const currentSymbols = [];
106
- const parentSymbolById = new Map();
107
- const cancellationToken = cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken;
108
- addIdentifierPairedExpressionSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken);
109
- addRecordSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken);
110
- return currentSymbols;
111
- }), this.locale);
112
- }
113
- getFoldingRanges(cancellationTokenOverride) {
114
- return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
115
- const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getFoldingRanges.name, this.initialCorrelationId);
116
- const parseState = yield this.getParseStateOkOrThrow(trace);
117
- if (parseState === undefined) {
118
- trace.exit();
119
- return undefined;
120
- }
121
- const result = yield this.localDocumentProvider.getFoldingRanges({
122
- traceManager: this.traceManager,
123
- initialCorrelationId: trace.id,
124
- cancellationToken: cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken,
125
- nodeIdMapCollection: parseState.contextState.nodeIdMapCollection,
126
- });
127
- if (powerquery_parser_1.ResultUtils.isError(result)) {
128
- trace.exit({ [trace_1.TraceConstant.IsThrowing]: true });
129
- throw result.error;
130
- }
131
- trace.exit();
132
- return result.value;
133
- }), this.locale);
134
- }
135
- getHover(position, cancellationTokenOverride) {
136
- return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
137
- const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getHover.name, this.initialCorrelationId);
138
- const hoverProviderContext = yield this.getHoverProviderContext(position, trace.id, cancellationTokenOverride);
139
- if (!hoverProviderContext) {
140
- trace.exit();
141
- return undefined;
142
- }
143
- const triedHovers = yield Promise.all([
144
- this.localDocumentProvider.getHover(hoverProviderContext),
145
- this.libraryProvider.getHover(hoverProviderContext),
146
- ]);
147
- // Keep track if any error was thrown, prioritized by the order of the providers
148
- let firstError;
149
- for (const triedHover of triedHovers) {
150
- if (powerquery_parser_1.ResultUtils.isOk(triedHover)) {
151
- if (triedHover.value !== undefined) {
152
- trace.exit();
153
- return triedHover.value;
154
- }
155
- }
156
- else if (firstError === undefined) {
157
- firstError = triedHover.error;
158
- }
159
- }
160
- if (firstError !== undefined) {
161
- trace.exit({ [trace_1.TraceConstant.IsThrowing]: true });
162
- throw firstError;
163
- }
164
- trace.exit();
165
- return undefined;
166
- }), this.locale);
167
- }
168
- // We should only get an undefined for an activeNode iff a parse pass hasn't been done.
169
- getActiveNode(position) {
170
- return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
171
- const parseState = yield this.getParseStateOkOrThrow(undefined);
172
- if (parseState === undefined) {
173
- return undefined;
174
- }
175
- return inspection_1.ActiveNodeUtils.activeNode(parseState.contextState.nodeIdMapCollection, position);
176
- }), this.locale);
177
- }
178
- // undefined means either the parse pass wasn't done (lexing error), or there was no error.
179
- getParseError() {
180
- return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
181
- const triedLexParse = yield this.triedLexParse;
182
- if (PQP.TaskUtils.isParseStageCommonError(triedLexParse)) {
183
- throw triedLexParse.error;
184
- }
185
- else if (PQP.TaskUtils.isParseStageError(triedLexParse)) {
186
- return triedLexParse.error;
187
- }
188
- else {
189
- return undefined;
190
- }
191
- }), this.locale);
192
- }
193
- // We should only get an undefined for an activeNode iff a parse pass hasn't been done.
194
- getParseState() {
195
- return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
196
- const triedLexParse = yield this.triedLexParse;
197
- if (PQP.TaskUtils.isParseStageCommonError(triedLexParse)) {
198
- throw triedLexParse.error;
199
- }
200
- else if (PQP.TaskUtils.isParseStageError(triedLexParse)) {
201
- return triedLexParse.parseState;
202
- }
203
- else if (PQP.TaskUtils.isParseStageOk(triedLexParse)) {
204
- return triedLexParse.parseState;
205
- }
206
- else {
207
- return undefined;
208
- }
209
- }), this.locale);
210
- }
211
- getPartialSemanticTokens(cancellationTokenOverride) {
212
- return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
213
- const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getPartialSemanticTokens.name, this.initialCorrelationId);
214
- const parseState = yield this.getParseStateOkOrThrow(trace);
215
- if (parseState === undefined) {
216
- trace.exit();
217
- return undefined;
218
- }
219
- const result = yield this.localDocumentProvider.getPartialSemanticTokens({
220
- traceManager: this.traceManager,
221
- initialCorrelationId: trace.id,
222
- cancellationToken: cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken,
223
- library: this.inspectionSettings.library,
224
- parseState,
225
- });
226
- if (powerquery_parser_1.ResultUtils.isError(result)) {
227
- trace.exit({ [trace_1.TraceConstant.IsThrowing]: true });
228
- throw result.error;
229
- }
230
- trace.exit();
231
- return result.value;
232
- }), this.locale);
233
- }
234
- getSignatureHelp(position, cancellationTokenOverride) {
235
- return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
236
- const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getSignatureHelp.name, this.initialCorrelationId);
237
- const signatureProviderContext = yield this.getSignatureProviderContext(position, trace.id, cancellationTokenOverride);
238
- if (signatureProviderContext === undefined) {
239
- trace.exit();
240
- return undefined;
241
- }
242
- const signatureTasks = yield Promise.all([
243
- this.localDocumentProvider.getSignatureHelp(signatureProviderContext),
244
- this.libraryProvider.getSignatureHelp(signatureProviderContext),
245
- ]);
246
- for (const task of signatureTasks) {
247
- if (powerquery_parser_1.ResultUtils.isOk(task) && task.value !== undefined) {
248
- trace.exit();
249
- return task.value;
250
- }
251
- }
252
- trace.exit();
253
- return undefined;
254
- }), this.locale);
255
- }
256
- getRenameEdits(position, newName, cancellationTokenOverride) {
257
- return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
258
- const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getRenameEdits.name, this.initialCorrelationId);
259
- const parseState = yield this.getParseStateOkOrThrow(trace);
260
- const activeNode = yield this.getActiveNodeOkOrThrow(position, trace);
261
- if (parseState === undefined ||
262
- activeNode === undefined ||
263
- !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode) ||
264
- activeNode.inclusiveIdentifierUnderPosition === undefined) {
265
- trace.exit();
266
- return undefined;
267
- }
268
- void (yield this.inspectNodeScope(activeNode, trace.id, cancellationTokenOverride));
269
- const leafIdentifier = activeNode.inclusiveIdentifierUnderPosition;
270
- const scopeById = this.typeCache.scopeById;
271
- const identifiersToBeEdited = [];
272
- let valueCreator = undefined;
273
- if (leafIdentifier.node.kind === language_1.Ast.NodeKind.GeneralizedIdentifier) {
274
- valueCreator = leafIdentifier.node;
275
- }
276
- else if ((leafIdentifier.node.kind === language_1.Ast.NodeKind.Identifier ||
277
- leafIdentifier.node.kind === language_1.Ast.NodeKind.IdentifierExpression) &&
278
- scopeById) {
279
- // need to find this key value and modify all referring it
280
- const identifierExpression = leafIdentifier.node.kind === language_1.Ast.NodeKind.IdentifierExpression
281
- ? leafIdentifier.node.identifier
282
- : leafIdentifier.node;
283
- switch (identifierExpression.identifierContextKind) {
284
- case language_1.Ast.IdentifierContextKind.Key:
285
- case language_1.Ast.IdentifierContextKind.Parameter:
286
- // it is the identifier creating the value
287
- valueCreator = identifierExpression;
288
- break;
289
- case language_1.Ast.IdentifierContextKind.Value: {
290
- // it is the identifier referring the value
291
- let nodeScope = scopeById.get(identifierExpression.id);
292
- // there might be a chance that its scope did not get populated yet, do another try
293
- if (!nodeScope) {
294
- void (yield __1.Inspection.tryNodeScope(this.inspectionSettings, parseState.contextState.nodeIdMapCollection, this.inspectionSettings.eachScopeById, identifierExpression.id, scopeById));
295
- nodeScope = scopeById.get(identifierExpression.id);
296
- }
297
- const scopeItem = (0, scopeUtils_1.findScopeItemByLiteral)(nodeScope, leafIdentifier.normalizedLiteral);
298
- if (scopeItem) {
299
- const valueCreatorSearch = (0, scopeUtils_1.scopeCreatorIdentifier)(scopeItem);
300
- if ((valueCreatorSearch === null || valueCreatorSearch === void 0 ? void 0 : valueCreatorSearch.kind) === language_1.Ast.NodeKind.Identifier) {
301
- if (valueCreatorSearch.identifierContextKind === language_1.Ast.IdentifierContextKind.Key ||
302
- valueCreatorSearch.identifierContextKind === language_1.Ast.IdentifierContextKind.Parameter) {
303
- valueCreator = valueCreatorSearch;
304
- }
305
- else {
306
- identifiersToBeEdited.push(valueCreatorSearch);
307
- }
308
- }
309
- else if ((valueCreatorSearch === null || valueCreatorSearch === void 0 ? void 0 : valueCreatorSearch.kind) === language_1.Ast.NodeKind.GeneralizedIdentifier) {
310
- valueCreator = valueCreatorSearch;
311
- }
312
- else if (valueCreatorSearch) {
313
- identifiersToBeEdited.push(valueCreatorSearch);
314
- }
315
- }
316
- break;
317
- }
318
- case language_1.Ast.IdentifierContextKind.Keyword:
319
- default:
320
- // only modify once
321
- identifiersToBeEdited.push(identifierExpression);
322
- break;
323
- }
324
- }
325
- if (valueCreator) {
326
- // need to populate the other identifiers referring it
327
- identifiersToBeEdited.push(...(yield this.collectAllIdentifiersBeneath(parseState.contextState.nodeIdMapCollection, valueCreator)));
328
- }
329
- // if none found, directly put inclusiveIdentifierUnderPosition in if it exists
330
- if (identifiersToBeEdited.length === 0 && leafIdentifier) {
331
- identifiersToBeEdited.push(leafIdentifier.node.kind === language_1.Ast.NodeKind.IdentifierExpression
332
- ? leafIdentifier.node.identifier
333
- : leafIdentifier.node);
334
- }
335
- const result = identifiersToBeEdited.map((one) => ({
336
- range: __1.PositionUtils.rangeFromTokenRange(one.tokenRange),
337
- newText: newName,
338
- }));
339
- trace.exit();
340
- return result;
341
- }), this.locale);
342
- }
343
- dispose() {
344
- this.typeCache.scopeById.clear();
345
- this.typeCache.typeById.clear();
346
- }
347
- static isValidHoverIdentifier(activeNode) {
348
- var _a;
349
- const ancestry = activeNode.ancestry;
350
- const parent = ancestry[1];
351
- if (((_a = parent === null || parent === void 0 ? void 0 : parent.node) === null || _a === void 0 ? void 0 : _a.kind) === language_1.Ast.NodeKind.Parameter) {
352
- return false;
353
- }
354
- return true;
355
- }
356
- getAutocompleteItemProviderContext(position, correlationId, cancellationTokenOverride) {
357
- return __awaiter(this, void 0, void 0, function* () {
358
- const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getAutocompleteItemProviderContext.name, correlationId);
359
- const activeNode = yield this.getActiveNodeOkOrThrow(position, trace);
360
- if (activeNode === undefined || (inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode) && activeNode.isInKey)) {
361
- trace.exit();
362
- return undefined;
363
- }
364
- const autocomplete = powerquery_parser_1.Assert.asDefined(yield this.inspectAutocomplete(activeNode, trace.id, cancellationTokenOverride), "we have a truthy activeNode meaning we have a truthy parseState");
365
- const triedNodeScope = powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id, cancellationTokenOverride), "we have a truthy activeNode meaning we have a truthy parseState");
366
- const triedScopeType = powerquery_parser_1.Assert.asDefined(yield this.inspectScopeType(activeNode, trace.id, cancellationTokenOverride), "we have a truthy activeNode meaning we have a truthy parseState");
367
- const activeLeafIdentifier = inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)
368
- ? activeNode.inclusiveIdentifierUnderPosition
369
- : undefined;
370
- let result;
371
- const cancellationToken = cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken;
372
- if (activeLeafIdentifier !== undefined) {
373
- result = {
374
- autocomplete,
375
- triedNodeScope,
376
- triedScopeType,
377
- traceManager: this.traceManager,
378
- cancellationToken,
379
- initialCorrelationId: trace.id,
380
- range: __1.CommonTypesUtils.rangeFromTokenRange(activeLeafIdentifier.node.tokenRange),
381
- text: activeLeafIdentifier.normalizedLiteral,
382
- tokenKind: activeLeafIdentifier.node.kind,
383
- };
384
- }
385
- else {
386
- result = {
387
- autocomplete,
388
- triedNodeScope,
389
- triedScopeType,
390
- traceManager: this.traceManager,
391
- cancellationToken,
392
- initialCorrelationId: trace.id,
393
- };
394
- }
395
- trace.exit();
396
- return result;
397
- });
398
- }
399
- getDefinitionProviderContext(position, correlationId, cancellationTokenOverride) {
400
- return __awaiter(this, void 0, void 0, function* () {
401
- const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getDefinitionProviderContext.name, correlationId);
402
- const activeNode = yield this.getActiveNodeOkOrThrow(position, trace);
403
- if (activeNode === undefined ||
404
- !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode) ||
405
- activeNode.exclusiveIdentifierUnderPosition === undefined ||
406
- !AnalysisBase.isValidHoverIdentifier(activeNode)) {
407
- trace.exit();
408
- return undefined;
409
- }
410
- const identifierUnderPosition = activeNode.exclusiveIdentifierUnderPosition;
411
- const identifier = identifierUnderPosition.node.kind === language_1.Ast.NodeKind.IdentifierExpression
412
- ? identifierUnderPosition.node.identifier
413
- : identifierUnderPosition.node;
414
- const cancellationToken = cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken;
415
- const context = {
416
- traceManager: this.traceManager,
417
- range: __1.CommonTypesUtils.rangeFromTokenRange(identifier.tokenRange),
418
- initialCorrelationId: trace.id,
419
- cancellationToken,
420
- identifier,
421
- triedNodeScope: powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id, cancellationToken), "we got a truthy activeNode meaning we have a truthy parseState"),
422
- };
423
- trace.exit();
424
- return context;
425
- });
426
- }
427
- getHoverProviderContext(position, correlationId, cancellationTokenOverride) {
428
- return __awaiter(this, void 0, void 0, function* () {
429
- const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getHoverProviderContext.name, correlationId);
430
- const parseState = yield this.getParseStateOkOrThrow(trace);
431
- const activeNode = yield this.getActiveNodeOkOrThrow(position, trace);
432
- if (parseState === undefined || activeNode === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
433
- trace.exit();
434
- return undefined;
435
- }
436
- const identifierUnderPosition = activeNode.exclusiveIdentifierUnderPosition;
437
- if (identifierUnderPosition === undefined || !AnalysisBase.isValidHoverIdentifier(activeNode)) {
438
- trace.exit();
439
- return undefined;
440
- }
441
- const cancellationToken = cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken;
442
- const identifier = identifierUnderPosition.node.kind === language_1.Ast.NodeKind.IdentifierExpression
443
- ? identifierUnderPosition.node.identifier
444
- : identifierUnderPosition.node;
445
- const context = {
446
- traceManager: this.traceManager,
447
- range: __1.CommonTypesUtils.rangeFromTokenRange(identifier.tokenRange),
448
- identifier,
449
- cancellationToken,
450
- initialCorrelationId: trace.id,
451
- activeNode,
452
- inspectionSettings: Object.assign(Object.assign({}, this.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }),
453
- parseState,
454
- triedNodeScope: powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id, cancellationToken), "we have a truthy activeNode meaning we have a truthy parseState"),
455
- triedScopeType: powerquery_parser_1.Assert.asDefined(yield this.inspectScopeType(activeNode, trace.id, cancellationToken), "we have a truthy activeNode meaning we have a truthy parseState"),
456
- };
457
- trace.exit();
458
- return context;
459
- });
460
- }
461
- getSignatureProviderContext(position, correlationId, cancellationTokenOverride) {
462
- return __awaiter(this, void 0, void 0, function* () {
463
- const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getSignatureProviderContext.name, correlationId);
464
- const parseState = yield this.getParseStateOkOrThrow(trace);
465
- const activeNode = yield this.getActiveNodeOkOrThrow(position, trace);
466
- const triedCurrentInvokeExpression = yield this.inspectCurrentInvokeExpression(position, trace.id, cancellationTokenOverride);
467
- if (parseState === undefined ||
468
- activeNode === undefined ||
469
- triedCurrentInvokeExpression === undefined ||
470
- powerquery_parser_1.ResultUtils.isError(triedCurrentInvokeExpression) ||
471
- triedCurrentInvokeExpression.value === undefined) {
472
- trace.exit();
473
- return undefined;
474
- }
475
- const invokeExpression = triedCurrentInvokeExpression.value;
476
- const functionName = invokeExpression.name !== undefined ? invokeExpression.name : undefined;
477
- const argumentOrdinal = invokeExpression.arguments !== undefined ? invokeExpression.arguments.argumentOrdinal : undefined;
478
- if (functionName === undefined || argumentOrdinal === undefined) {
479
- trace.exit();
480
- return undefined;
481
- }
482
- const cancellationToken = cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken;
483
- const result = {
484
- argumentOrdinal,
485
- functionName,
486
- isNameInLocalScope: invokeExpression.isNameInLocalScope,
487
- functionType: invokeExpression.functionType,
488
- traceManager: this.traceManager,
489
- cancellationToken,
490
- initialCorrelationId: trace.id,
491
- triedCurrentInvokeExpression: yield __1.Inspection.tryCurrentInvokeExpression(Object.assign(Object.assign({}, this.inspectionSettings), { cancellationToken, initialCorrelationId: trace.id }), parseState.contextState.nodeIdMapCollection, activeNode, this.typeCache),
492
- };
493
- trace.exit();
494
- return result;
495
- });
496
- }
497
- getTypeCache() {
498
- return this.typeCache;
499
- }
500
- collectAllIdentifiersBeneath(nodeIdMapCollection, valueCreator) {
501
- var _a, _b, _c, _d, _e;
502
- return __awaiter(this, void 0, void 0, function* () {
503
- const astNodeById = nodeIdMapCollection.astNodeById;
504
- const childIdsById = nodeIdMapCollection.childIdsById;
505
- const originLiteral = valueCreator.literal;
506
- const entry = (0, scopeUtils_1.findDirectUpperScopeExpression)(nodeIdMapCollection, valueCreator.id);
507
- if (entry) {
508
- const allIdentifierIdSet = (_a = nodeIdMapCollection.idsByNodeKind.get(language_1.Ast.NodeKind.Identifier)) !== null && _a !== void 0 ? _a : new Set();
509
- const allGeneralizedIdentifierIdSet = (_b = nodeIdMapCollection.idsByNodeKind.get(language_1.Ast.NodeKind.GeneralizedIdentifier)) !== null && _b !== void 0 ? _b : new Set();
510
- const current = entry;
511
- const idsByTiers = [];
512
- let currentTier = ((_c = childIdsById.get(current.id)) !== null && _c !== void 0 ? _c : []).slice();
513
- while (currentTier.length) {
514
- const toBePushed = currentTier.filter((one) => allIdentifierIdSet.has(one) || allGeneralizedIdentifierIdSet.has(one));
515
- toBePushed.length && idsByTiers.push(toBePushed);
516
- currentTier = currentTier.slice();
517
- let nextTier = [];
518
- while (currentTier.length) {
519
- const oneNode = (_d = currentTier.shift()) !== null && _d !== void 0 ? _d : -1;
520
- const childrenOfTheNode = ((_e = childIdsById.get(oneNode)) !== null && _e !== void 0 ? _e : []).slice();
521
- nextTier = nextTier.concat(childrenOfTheNode);
522
- }
523
- currentTier = nextTier;
524
- }
525
- // filter literal names
526
- const completeIdentifierNodes = idsByTiers
527
- .flat(1)
528
- .map((one) => astNodeById.get(one))
529
- .filter(Boolean);
530
- let filteredIdentifierNodes = completeIdentifierNodes.filter((one) => one.literal === originLiteral);
531
- // populate the scope items for each
532
- yield Promise.all(filteredIdentifierNodes
533
- .filter((oneIdentifier) => oneIdentifier.kind === language_1.Ast.NodeKind.GeneralizedIdentifier ||
534
- oneIdentifier.identifierContextKind === language_1.Ast.IdentifierContextKind.Value)
535
- .map((oneIdentifier) => __1.Inspection.tryNodeScope(this.inspectionSettings, nodeIdMapCollection, this.inspectionSettings.eachScopeById, oneIdentifier.id, this.typeCache.scopeById)));
536
- filteredIdentifierNodes = filteredIdentifierNodes.filter((oneIdentifierNode) => {
537
- if (oneIdentifierNode.kind === language_1.Ast.NodeKind.GeneralizedIdentifier) {
538
- return oneIdentifierNode.id === valueCreator.id;
539
- }
540
- else if (oneIdentifierNode.identifierContextKind === language_1.Ast.IdentifierContextKind.Value) {
541
- const theScope = this.typeCache.scopeById.get(oneIdentifierNode.id);
542
- const theScopeItem = (0, scopeUtils_1.findScopeItemByLiteral)(theScope, originLiteral);
543
- const theCreatorIdentifier = (0, scopeUtils_1.scopeCreatorIdentifier)(theScopeItem);
544
- return theCreatorIdentifier && theCreatorIdentifier.id === valueCreator.id;
545
- }
546
- else if (oneIdentifierNode.identifierContextKind === language_1.Ast.IdentifierContextKind.Key ||
547
- oneIdentifierNode.identifierContextKind === language_1.Ast.IdentifierContextKind.Parameter) {
548
- return oneIdentifierNode.id === valueCreator.id;
549
- }
550
- return false;
551
- });
552
- return filteredIdentifierNodes;
553
- }
554
- return [];
555
- });
556
- }
557
- // Performs a lex + parse of the document, then caches the results into local variables.
558
- // Any code which operates on the parse state should use this method to ensure that the parse state is initialized.
559
- tryLexParse() {
560
- return __awaiter(this, void 0, void 0, function* () {
561
- const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.tryLexParse.name, this.initialCorrelationId);
562
- const updatedSettings = Object.assign(Object.assign({}, this.inspectionSettings), { initialCorrelationId: trace.id });
563
- const triedLexParse = yield PQP.TaskUtils.tryLexParse(updatedSettings, this.textDocument.getText());
564
- trace.exit();
565
- return triedLexParse;
566
- });
567
- }
568
- inspectAutocomplete(activeNode, correlationId, cancellationTokenOverride) {
569
- return __awaiter(this, void 0, void 0, function* () {
570
- const parseState = yield this.getParseStateOkOrThrow(undefined);
571
- const parseError = yield this.getParseErrorOkOrThrow(undefined);
572
- if (parseState === undefined) {
573
- return undefined;
574
- }
575
- return yield __1.Inspection.autocomplete(Object.assign(Object.assign({}, this.inspectionSettings), { initialCorrelationId: correlationId, cancellationToken: cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken }), parseState, this.typeCache, activeNode, parseError);
576
- });
577
- }
578
- inspectCurrentInvokeExpression(position, correlationId, cancellationTokenOverride) {
579
- return __awaiter(this, void 0, void 0, function* () {
580
- const parseState = yield this.getParseStateOkOrThrow(undefined);
581
- // parseState needs to be ok, and must be truthy.
582
- const activeNode = yield this.getActiveNodeOkOrThrow(position, undefined);
583
- if (parseState === undefined || activeNode === undefined) {
584
- return undefined;
585
- }
586
- return yield __1.Inspection.tryCurrentInvokeExpression(Object.assign(Object.assign({}, this.inspectionSettings), { initialCorrelationId: correlationId, cancellationToken: cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken }), parseState.contextState.nodeIdMapCollection, activeNode, this.typeCache);
587
- });
588
- }
589
- inspectNodeScope(activeNode, correlationId, cancellationTokenOverride) {
590
- return __awaiter(this, void 0, void 0, function* () {
591
- const parseState = yield this.getParseStateOkOrThrow(undefined);
592
- if (parseState === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
593
- return undefined;
594
- }
595
- return yield __1.Inspection.tryNodeScope(Object.assign(Object.assign({}, this.inspectionSettings), { cancellationToken: cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken, initialCorrelationId: correlationId }), parseState.contextState.nodeIdMapCollection, this.inspectionSettings.eachScopeById, inspection_1.ActiveNodeUtils.assertGetLeaf(activeNode).node.id, this.typeCache.scopeById);
596
- });
597
- }
598
- inspectScopeType(activeNode, correlationId, cancellationTokenOverride) {
599
- return __awaiter(this, void 0, void 0, function* () {
600
- const parseState = yield this.getParseStateOkOrThrow(undefined);
601
- if (parseState === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
602
- return undefined;
603
- }
604
- return yield __1.Inspection.tryScopeType(Object.assign(Object.assign({}, this.inspectionSettings), { cancellationToken: cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken, initialCorrelationId: correlationId }), parseState.contextState.nodeIdMapCollection, inspection_1.ActiveNodeUtils.assertGetLeaf(activeNode).node.id, this.typeCache);
605
- });
606
- }
607
- getActiveNodeOkOrThrow(position, trace) {
608
- return __awaiter(this, void 0, void 0, function* () {
609
- const activeNodeResult = yield this.getActiveNode(position);
610
- if (powerquery_parser_1.ResultUtils.isError(activeNodeResult)) {
611
- trace === null || trace === void 0 ? void 0 : trace.exit({ [trace_1.TraceConstant.IsThrowing]: true });
612
- throw activeNodeResult.error;
613
- }
614
- return activeNodeResult.value;
615
- });
616
- }
617
- getParseErrorOkOrThrow(trace) {
618
- return __awaiter(this, void 0, void 0, function* () {
619
- const parseErrorResult = yield this.getParseError();
620
- if (powerquery_parser_1.ResultUtils.isError(parseErrorResult)) {
621
- trace === null || trace === void 0 ? void 0 : trace.exit({ [trace_1.TraceConstant.IsThrowing]: true });
622
- throw parseErrorResult.error;
623
- }
624
- return parseErrorResult.value;
625
- });
626
- }
627
- getParseStateOkOrThrow(trace) {
628
- return __awaiter(this, void 0, void 0, function* () {
629
- const parseStateResult = yield this.getParseState();
630
- if (powerquery_parser_1.ResultUtils.isError(parseStateResult)) {
631
- trace === null || trace === void 0 ? void 0 : trace.exit({ [trace_1.TraceConstant.IsThrowing]: true });
632
- throw parseStateResult.error;
633
- }
634
- return parseStateResult.value;
635
- });
636
- }
637
- applyAnalysisSettings(analysisSettings) {
638
- this.initialCorrelationId = analysisSettings.initialCorrelationId;
639
- this.inspectionSettings = analysisSettings.inspectionSettings;
640
- this.locale = analysisSettings.inspectionSettings.locale;
641
- this.traceManager = analysisSettings.traceManager;
642
- }
643
- }
644
- exports.AnalysisBase = AnalysisBase;
645
- function addIdentifierPairedExpressionSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken) {
646
- var _a;
647
- const identifierPairedExpressionIds = (_a = nodeIdMapCollection.idsByNodeKind.get(language_1.Ast.NodeKind.IdentifierPairedExpression)) !== null && _a !== void 0 ? _a : new Set();
648
- for (const nodeId of identifierPairedExpressionIds) {
649
- cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.throwIfCancelled();
650
- const xorNode = parser_1.NodeIdMapUtils.assertXorChecked(nodeIdMapCollection, nodeId, language_1.Ast.NodeKind.IdentifierPairedExpression);
651
- if (!parser_1.XorNodeUtils.isAst(xorNode)) {
652
- continue;
653
- }
654
- const astNode = xorNode.node;
655
- const documentSymbol = __1.InspectionUtils.getSymbolForIdentifierPairedExpression(astNode);
656
- addDocumentSymbols(nodeIdMapCollection, parentSymbolById, nodeId, currentSymbols, documentSymbol);
657
- parentSymbolById.set(nodeId, documentSymbol);
658
- }
659
- }
660
- function addRecordSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken) {
661
- var _a, _b;
662
- const recordIdCollections = [
663
- (_a = nodeIdMapCollection.idsByNodeKind.get(language_1.Ast.NodeKind.RecordExpression)) !== null && _a !== void 0 ? _a : new Set(),
664
- (_b = nodeIdMapCollection.idsByNodeKind.get(language_1.Ast.NodeKind.RecordLiteral)) !== null && _b !== void 0 ? _b : new Set(),
665
- ];
666
- for (const collection of recordIdCollections) {
667
- for (const nodeId of collection) {
668
- cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.throwIfCancelled();
669
- const xorNode = parser_1.NodeIdMapUtils.assertXorChecked(nodeIdMapCollection, nodeId, [language_1.Ast.NodeKind.RecordExpression, language_1.Ast.NodeKind.RecordLiteral]);
670
- if (!parser_1.XorNodeUtils.isAst(xorNode)) {
671
- continue;
672
- }
673
- const astNode = xorNode.node;
674
- // Process the record if the immediate parent is a Struct
675
- const parentId = nodeIdMapCollection.parentIdById.get(astNode.id);
676
- const parentSymbol = parentId ? parentSymbolById.get(parentId) : undefined;
677
- if (parentSymbol && parentSymbol.kind === vscode_languageserver_types_1.SymbolKind.Struct) {
678
- const fieldSymbols = __1.InspectionUtils.getSymbolsForRecord(astNode);
679
- if (fieldSymbols.length > 0) {
680
- addDocumentSymbols(nodeIdMapCollection, parentSymbolById, astNode.id, currentSymbols, ...fieldSymbols);
681
- }
682
- }
683
- }
684
- }
685
- }
686
- function addDocumentSymbols(nodeIdMapCollection, parentSymbolById, nodeId, currentSymbols, ...newSymbols) {
687
- const parentSymbol = findParentSymbol(nodeIdMapCollection, parentSymbolById, nodeId);
688
- if (parentSymbol) {
689
- if (!parentSymbol.children) {
690
- parentSymbol.children = [];
691
- }
692
- parentSymbol.children.push(...newSymbols);
693
- return;
694
- }
695
- // Add to the top level
696
- currentSymbols.push(...newSymbols);
697
- }
698
- function findParentSymbol(nodeIdMapCollection, parentSymbolById, nodeId) {
699
- // Get parent for current node
700
- const parentNodeId = nodeIdMapCollection.parentIdById.get(nodeId);
701
- if (!parentNodeId) {
702
- // No more parents to check
703
- return undefined;
704
- }
705
- let parentSymbol = parentSymbolById.get(parentNodeId);
706
- if (!parentSymbol) {
707
- parentSymbol = findParentSymbol(nodeIdMapCollection, parentSymbolById, parentNodeId);
708
- }
709
- return parentSymbol;
710
- }
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation.
3
+ // Licensed under the MIT license.
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
17
+ }) : function(o, v) {
18
+ o["default"] = v;
19
+ });
20
+ var __importStar = (this && this.__importStar) || (function () {
21
+ var ownKeys = function(o) {
22
+ ownKeys = Object.getOwnPropertyNames || function (o) {
23
+ var ar = [];
24
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
25
+ return ar;
26
+ };
27
+ return ownKeys(o);
28
+ };
29
+ return function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ })();
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.AnalysisBase = void 0;
39
+ const PQP = __importStar(require("@microsoft/powerquery-parser/lib/powerquery-parser"));
40
+ const powerquery_parser_1 = require("@microsoft/powerquery-parser");
41
+ const vscode_languageserver_types_1 = require("vscode-languageserver-types");
42
+ const parser_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/parser");
43
+ const trace_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/common/trace");
44
+ const language_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/language");
45
+ const inspection_1 = require("../inspection");
46
+ const __1 = require("..");
47
+ const scopeUtils_1 = require("../inspection/scope/scopeUtils");
48
+ const providers_1 = require("../providers");
49
+ const trace_2 = require("../trace");
50
+ // Implementation of Analysis.
51
+ // All public methods should:
52
+ // - use ensureResultAsync to ensure a Result, allowing all protected methods to safetly throw.
53
+ // - take an optional cancellation token.
54
+ class AnalysisBase {
55
+ textDocument;
56
+ initialCorrelationId;
57
+ inspectionSettings;
58
+ locale;
59
+ traceManager;
60
+ languageAutocompleteItemProvider;
61
+ libraryProvider;
62
+ localDocumentProvider;
63
+ // A promise holding the lex and parse attempt on the TextDocument which is triggered on instantiation.
64
+ triedLexParse;
65
+ // Local type cache that is shared across provider actions.
66
+ typeCache = {
67
+ scopeById: new Map(),
68
+ typeById: new Map(),
69
+ };
70
+ constructor(textDocument, analysisSettings) {
71
+ this.textDocument = textDocument;
72
+ this.initialCorrelationId = analysisSettings.initialCorrelationId;
73
+ this.inspectionSettings = analysisSettings.inspectionSettings;
74
+ this.locale = analysisSettings.inspectionSettings.locale;
75
+ this.traceManager = analysisSettings.traceManager;
76
+ this.languageAutocompleteItemProvider = analysisSettings.languageAutocompleteItemProviderFactory
77
+ ? analysisSettings.languageAutocompleteItemProviderFactory(analysisSettings.inspectionSettings.locale)
78
+ : new providers_1.LanguageAutocompleteItemProvider(analysisSettings.inspectionSettings.locale);
79
+ this.libraryProvider = analysisSettings.libraryProviderFactory
80
+ ? analysisSettings.libraryProviderFactory(analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale)
81
+ : new providers_1.LibraryProvider(analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale);
82
+ this.localDocumentProvider = analysisSettings.localDocumentProviderFactory
83
+ ? analysisSettings.localDocumentProviderFactory(textDocument.uri.toString(), this.typeCache, analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale)
84
+ : new providers_1.LocalDocumentProvider(this.textDocument.uri.toString(), this.typeCache, analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale);
85
+ this.triedLexParse = this.tryLexParse();
86
+ }
87
+ getAutocompleteItems(position, cancellationTokenOverride) {
88
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(async () => {
89
+ const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getAutocompleteItems.name, this.initialCorrelationId);
90
+ const context = await this.getAutocompleteItemProviderContext(position, trace.id, cancellationTokenOverride);
91
+ if (context === undefined) {
92
+ trace.exit();
93
+ return undefined;
94
+ }
95
+ const autocompleteItemTasks = [
96
+ this.languageAutocompleteItemProvider.getAutocompleteItems(context),
97
+ this.libraryProvider.getAutocompleteItems(context),
98
+ this.localDocumentProvider.getAutocompleteItems(context),
99
+ ];
100
+ const autocompleteItems = [];
101
+ const results = await Promise.all(autocompleteItemTasks);
102
+ // TODO: intellisense improvements
103
+ // - honor expected data type
104
+ for (const result of results) {
105
+ if (powerquery_parser_1.ResultUtils.isOk(result) && result.value !== undefined) {
106
+ for (const item of result.value) {
107
+ autocompleteItems.push(item);
108
+ }
109
+ }
110
+ }
111
+ trace.exit();
112
+ return autocompleteItems;
113
+ }, this.locale);
114
+ }
115
+ getDefinition(position, cancellationTokenOverride) {
116
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(async () => {
117
+ const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getDefinition.name, this.initialCorrelationId);
118
+ const identifierContext = await this.getDefinitionProviderContext(position, trace.id, cancellationTokenOverride);
119
+ if (!identifierContext) {
120
+ trace.exit();
121
+ return undefined;
122
+ }
123
+ const result = await this.localDocumentProvider.getDefinition(identifierContext);
124
+ if (powerquery_parser_1.ResultUtils.isError(result)) {
125
+ trace.exit({ [trace_1.TraceConstant.IsThrowing]: true });
126
+ throw result.error;
127
+ }
128
+ trace.exit();
129
+ return result.value;
130
+ }, this.locale);
131
+ }
132
+ getDocumentSymbols(cancellationTokenOverride) {
133
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(async () => {
134
+ const parseState = await this.getParseStateOkOrThrow(undefined);
135
+ if (parseState === undefined) {
136
+ return undefined;
137
+ }
138
+ const nodeIdMapCollection = parseState.contextState.nodeIdMapCollection;
139
+ const currentSymbols = [];
140
+ const parentSymbolById = new Map();
141
+ const cancellationToken = cancellationTokenOverride ?? this.inspectionSettings.cancellationToken;
142
+ addIdentifierPairedExpressionSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken);
143
+ addRecordSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken);
144
+ return currentSymbols;
145
+ }, this.locale);
146
+ }
147
+ getFoldingRanges(cancellationTokenOverride) {
148
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(async () => {
149
+ const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getFoldingRanges.name, this.initialCorrelationId);
150
+ const parseState = await this.getParseStateOkOrThrow(trace);
151
+ if (parseState === undefined) {
152
+ trace.exit();
153
+ return undefined;
154
+ }
155
+ const result = await this.localDocumentProvider.getFoldingRanges({
156
+ traceManager: this.traceManager,
157
+ initialCorrelationId: trace.id,
158
+ cancellationToken: cancellationTokenOverride ?? this.inspectionSettings.cancellationToken,
159
+ nodeIdMapCollection: parseState.contextState.nodeIdMapCollection,
160
+ });
161
+ if (powerquery_parser_1.ResultUtils.isError(result)) {
162
+ trace.exit({ [trace_1.TraceConstant.IsThrowing]: true });
163
+ throw result.error;
164
+ }
165
+ trace.exit();
166
+ return result.value;
167
+ }, this.locale);
168
+ }
169
+ getHover(position, cancellationTokenOverride) {
170
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(async () => {
171
+ const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getHover.name, this.initialCorrelationId);
172
+ const hoverProviderContext = await this.getHoverProviderContext(position, trace.id, cancellationTokenOverride);
173
+ if (!hoverProviderContext) {
174
+ trace.exit();
175
+ return undefined;
176
+ }
177
+ const triedHovers = await Promise.all([
178
+ this.localDocumentProvider.getHover(hoverProviderContext),
179
+ this.libraryProvider.getHover(hoverProviderContext),
180
+ ]);
181
+ // Keep track if any error was thrown, prioritized by the order of the providers
182
+ let firstError;
183
+ for (const triedHover of triedHovers) {
184
+ if (powerquery_parser_1.ResultUtils.isOk(triedHover)) {
185
+ if (triedHover.value !== undefined) {
186
+ trace.exit();
187
+ return triedHover.value;
188
+ }
189
+ }
190
+ else if (firstError === undefined) {
191
+ firstError = triedHover.error;
192
+ }
193
+ }
194
+ if (firstError !== undefined) {
195
+ trace.exit({ [trace_1.TraceConstant.IsThrowing]: true });
196
+ throw firstError;
197
+ }
198
+ trace.exit();
199
+ return undefined;
200
+ }, this.locale);
201
+ }
202
+ // We should only get an undefined for an activeNode iff a parse pass hasn't been done.
203
+ getActiveNode(position) {
204
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(async () => {
205
+ const parseState = await this.getParseStateOkOrThrow(undefined);
206
+ if (parseState === undefined) {
207
+ return undefined;
208
+ }
209
+ return inspection_1.ActiveNodeUtils.activeNode(parseState.contextState.nodeIdMapCollection, position);
210
+ }, this.locale);
211
+ }
212
+ // undefined means either the parse pass wasn't done (lexing error), or there was no error.
213
+ getParseError() {
214
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(async () => {
215
+ const triedLexParse = await this.triedLexParse;
216
+ if (PQP.TaskUtils.isParseStageCommonError(triedLexParse)) {
217
+ throw triedLexParse.error;
218
+ }
219
+ else if (PQP.TaskUtils.isParseStageError(triedLexParse)) {
220
+ return triedLexParse.error;
221
+ }
222
+ else {
223
+ return undefined;
224
+ }
225
+ }, this.locale);
226
+ }
227
+ // We should only get an undefined for an activeNode iff a parse pass hasn't been done.
228
+ getParseState() {
229
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(async () => {
230
+ const triedLexParse = await this.triedLexParse;
231
+ if (PQP.TaskUtils.isParseStageCommonError(triedLexParse)) {
232
+ throw triedLexParse.error;
233
+ }
234
+ else if (PQP.TaskUtils.isParseStageError(triedLexParse)) {
235
+ return triedLexParse.parseState;
236
+ }
237
+ else if (PQP.TaskUtils.isParseStageOk(triedLexParse)) {
238
+ return triedLexParse.parseState;
239
+ }
240
+ else {
241
+ return undefined;
242
+ }
243
+ }, this.locale);
244
+ }
245
+ getPartialSemanticTokens(cancellationTokenOverride) {
246
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(async () => {
247
+ const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getPartialSemanticTokens.name, this.initialCorrelationId);
248
+ const parseState = await this.getParseStateOkOrThrow(trace);
249
+ if (parseState === undefined) {
250
+ trace.exit();
251
+ return undefined;
252
+ }
253
+ const result = await this.localDocumentProvider.getPartialSemanticTokens({
254
+ traceManager: this.traceManager,
255
+ initialCorrelationId: trace.id,
256
+ cancellationToken: cancellationTokenOverride ?? this.inspectionSettings.cancellationToken,
257
+ library: this.inspectionSettings.library,
258
+ parseState,
259
+ });
260
+ if (powerquery_parser_1.ResultUtils.isError(result)) {
261
+ trace.exit({ [trace_1.TraceConstant.IsThrowing]: true });
262
+ throw result.error;
263
+ }
264
+ trace.exit();
265
+ return result.value;
266
+ }, this.locale);
267
+ }
268
+ getSignatureHelp(position, cancellationTokenOverride) {
269
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(async () => {
270
+ const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getSignatureHelp.name, this.initialCorrelationId);
271
+ const signatureProviderContext = await this.getSignatureProviderContext(position, trace.id, cancellationTokenOverride);
272
+ if (signatureProviderContext === undefined) {
273
+ trace.exit();
274
+ return undefined;
275
+ }
276
+ const signatureTasks = await Promise.all([
277
+ this.localDocumentProvider.getSignatureHelp(signatureProviderContext),
278
+ this.libraryProvider.getSignatureHelp(signatureProviderContext),
279
+ ]);
280
+ for (const task of signatureTasks) {
281
+ if (powerquery_parser_1.ResultUtils.isOk(task) && task.value !== undefined) {
282
+ trace.exit();
283
+ return task.value;
284
+ }
285
+ }
286
+ trace.exit();
287
+ return undefined;
288
+ }, this.locale);
289
+ }
290
+ getRenameEdits(position, newName, cancellationTokenOverride) {
291
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(async () => {
292
+ const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getRenameEdits.name, this.initialCorrelationId);
293
+ const parseState = await this.getParseStateOkOrThrow(trace);
294
+ const activeNode = await this.getActiveNodeOkOrThrow(position, trace);
295
+ if (parseState === undefined ||
296
+ activeNode === undefined ||
297
+ !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode) ||
298
+ activeNode.inclusiveIdentifierUnderPosition === undefined) {
299
+ trace.exit();
300
+ return undefined;
301
+ }
302
+ void (await this.inspectNodeScope(activeNode, trace.id, cancellationTokenOverride));
303
+ const leafIdentifier = activeNode.inclusiveIdentifierUnderPosition;
304
+ const scopeById = this.typeCache.scopeById;
305
+ const identifiersToBeEdited = [];
306
+ let valueCreator = undefined;
307
+ if (leafIdentifier.node.kind === language_1.Ast.NodeKind.GeneralizedIdentifier) {
308
+ valueCreator = leafIdentifier.node;
309
+ }
310
+ else if ((leafIdentifier.node.kind === language_1.Ast.NodeKind.Identifier ||
311
+ leafIdentifier.node.kind === language_1.Ast.NodeKind.IdentifierExpression) &&
312
+ scopeById) {
313
+ // need to find this key value and modify all referring it
314
+ const identifierExpression = leafIdentifier.node.kind === language_1.Ast.NodeKind.IdentifierExpression
315
+ ? leafIdentifier.node.identifier
316
+ : leafIdentifier.node;
317
+ switch (identifierExpression.identifierContextKind) {
318
+ case language_1.Ast.IdentifierContextKind.Key:
319
+ case language_1.Ast.IdentifierContextKind.Parameter:
320
+ // it is the identifier creating the value
321
+ valueCreator = identifierExpression;
322
+ break;
323
+ case language_1.Ast.IdentifierContextKind.Value: {
324
+ // it is the identifier referring the value
325
+ let nodeScope = scopeById.get(identifierExpression.id);
326
+ // there might be a chance that its scope did not get populated yet, do another try
327
+ if (!nodeScope) {
328
+ void (await __1.Inspection.tryNodeScope(this.inspectionSettings, parseState.contextState.nodeIdMapCollection, this.inspectionSettings.eachScopeById, identifierExpression.id, scopeById));
329
+ nodeScope = scopeById.get(identifierExpression.id);
330
+ }
331
+ const scopeItem = (0, scopeUtils_1.findScopeItemByLiteral)(nodeScope, leafIdentifier.normalizedLiteral);
332
+ if (scopeItem) {
333
+ const valueCreatorSearch = (0, scopeUtils_1.scopeCreatorIdentifier)(scopeItem);
334
+ if (valueCreatorSearch?.kind === language_1.Ast.NodeKind.Identifier) {
335
+ if (valueCreatorSearch.identifierContextKind === language_1.Ast.IdentifierContextKind.Key ||
336
+ valueCreatorSearch.identifierContextKind === language_1.Ast.IdentifierContextKind.Parameter) {
337
+ valueCreator = valueCreatorSearch;
338
+ }
339
+ else {
340
+ identifiersToBeEdited.push(valueCreatorSearch);
341
+ }
342
+ }
343
+ else if (valueCreatorSearch?.kind === language_1.Ast.NodeKind.GeneralizedIdentifier) {
344
+ valueCreator = valueCreatorSearch;
345
+ }
346
+ else if (valueCreatorSearch) {
347
+ identifiersToBeEdited.push(valueCreatorSearch);
348
+ }
349
+ }
350
+ break;
351
+ }
352
+ case language_1.Ast.IdentifierContextKind.Keyword:
353
+ default:
354
+ // only modify once
355
+ identifiersToBeEdited.push(identifierExpression);
356
+ break;
357
+ }
358
+ }
359
+ if (valueCreator) {
360
+ // need to populate the other identifiers referring it
361
+ identifiersToBeEdited.push(...(await this.collectAllIdentifiersBeneath(parseState.contextState.nodeIdMapCollection, valueCreator)));
362
+ }
363
+ // if none found, directly put inclusiveIdentifierUnderPosition in if it exists
364
+ if (identifiersToBeEdited.length === 0 && leafIdentifier) {
365
+ identifiersToBeEdited.push(leafIdentifier.node.kind === language_1.Ast.NodeKind.IdentifierExpression
366
+ ? leafIdentifier.node.identifier
367
+ : leafIdentifier.node);
368
+ }
369
+ const result = identifiersToBeEdited.map((one) => ({
370
+ range: __1.PositionUtils.rangeFromTokenRange(one.tokenRange),
371
+ newText: newName,
372
+ }));
373
+ trace.exit();
374
+ return result;
375
+ }, this.locale);
376
+ }
377
+ dispose() {
378
+ this.typeCache.scopeById.clear();
379
+ this.typeCache.typeById.clear();
380
+ }
381
+ static isValidHoverIdentifier(activeNode) {
382
+ const ancestry = activeNode.ancestry;
383
+ const parent = ancestry[1];
384
+ if (parent?.node?.kind === language_1.Ast.NodeKind.Parameter) {
385
+ return false;
386
+ }
387
+ return true;
388
+ }
389
+ async getAutocompleteItemProviderContext(position, correlationId, cancellationTokenOverride) {
390
+ const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getAutocompleteItemProviderContext.name, correlationId);
391
+ const activeNode = await this.getActiveNodeOkOrThrow(position, trace);
392
+ if (activeNode === undefined || (inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode) && activeNode.isInKey)) {
393
+ trace.exit();
394
+ return undefined;
395
+ }
396
+ const autocomplete = powerquery_parser_1.Assert.asDefined(await this.inspectAutocomplete(activeNode, trace.id, cancellationTokenOverride), "we have a truthy activeNode meaning we have a truthy parseState");
397
+ const triedNodeScope = powerquery_parser_1.Assert.asDefined(await this.inspectNodeScope(activeNode, trace.id, cancellationTokenOverride), "we have a truthy activeNode meaning we have a truthy parseState");
398
+ const triedScopeType = powerquery_parser_1.Assert.asDefined(await this.inspectScopeType(activeNode, trace.id, cancellationTokenOverride), "we have a truthy activeNode meaning we have a truthy parseState");
399
+ const activeLeafIdentifier = inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)
400
+ ? activeNode.inclusiveIdentifierUnderPosition
401
+ : undefined;
402
+ let result;
403
+ const cancellationToken = cancellationTokenOverride ?? this.inspectionSettings.cancellationToken;
404
+ if (activeLeafIdentifier !== undefined) {
405
+ result = {
406
+ autocomplete,
407
+ triedNodeScope,
408
+ triedScopeType,
409
+ traceManager: this.traceManager,
410
+ cancellationToken,
411
+ initialCorrelationId: trace.id,
412
+ range: __1.CommonTypesUtils.rangeFromTokenRange(activeLeafIdentifier.node.tokenRange),
413
+ text: activeLeafIdentifier.normalizedLiteral,
414
+ tokenKind: activeLeafIdentifier.node.kind,
415
+ };
416
+ }
417
+ else {
418
+ result = {
419
+ autocomplete,
420
+ triedNodeScope,
421
+ triedScopeType,
422
+ traceManager: this.traceManager,
423
+ cancellationToken,
424
+ initialCorrelationId: trace.id,
425
+ };
426
+ }
427
+ trace.exit();
428
+ return result;
429
+ }
430
+ async getDefinitionProviderContext(position, correlationId, cancellationTokenOverride) {
431
+ const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getDefinitionProviderContext.name, correlationId);
432
+ const activeNode = await this.getActiveNodeOkOrThrow(position, trace);
433
+ if (activeNode === undefined ||
434
+ !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode) ||
435
+ activeNode.exclusiveIdentifierUnderPosition === undefined ||
436
+ !AnalysisBase.isValidHoverIdentifier(activeNode)) {
437
+ trace.exit();
438
+ return undefined;
439
+ }
440
+ const identifierUnderPosition = activeNode.exclusiveIdentifierUnderPosition;
441
+ const identifier = identifierUnderPosition.node.kind === language_1.Ast.NodeKind.IdentifierExpression
442
+ ? identifierUnderPosition.node.identifier
443
+ : identifierUnderPosition.node;
444
+ const cancellationToken = cancellationTokenOverride ?? this.inspectionSettings.cancellationToken;
445
+ const context = {
446
+ traceManager: this.traceManager,
447
+ range: __1.CommonTypesUtils.rangeFromTokenRange(identifier.tokenRange),
448
+ initialCorrelationId: trace.id,
449
+ cancellationToken,
450
+ identifier,
451
+ triedNodeScope: powerquery_parser_1.Assert.asDefined(await this.inspectNodeScope(activeNode, trace.id, cancellationToken), "we got a truthy activeNode meaning we have a truthy parseState"),
452
+ };
453
+ trace.exit();
454
+ return context;
455
+ }
456
+ async getHoverProviderContext(position, correlationId, cancellationTokenOverride) {
457
+ const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getHoverProviderContext.name, correlationId);
458
+ const parseState = await this.getParseStateOkOrThrow(trace);
459
+ const activeNode = await this.getActiveNodeOkOrThrow(position, trace);
460
+ if (parseState === undefined || activeNode === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
461
+ trace.exit();
462
+ return undefined;
463
+ }
464
+ const identifierUnderPosition = activeNode.exclusiveIdentifierUnderPosition;
465
+ if (identifierUnderPosition === undefined || !AnalysisBase.isValidHoverIdentifier(activeNode)) {
466
+ trace.exit();
467
+ return undefined;
468
+ }
469
+ const cancellationToken = cancellationTokenOverride ?? this.inspectionSettings.cancellationToken;
470
+ const identifier = identifierUnderPosition.node.kind === language_1.Ast.NodeKind.IdentifierExpression
471
+ ? identifierUnderPosition.node.identifier
472
+ : identifierUnderPosition.node;
473
+ const context = {
474
+ traceManager: this.traceManager,
475
+ range: __1.CommonTypesUtils.rangeFromTokenRange(identifier.tokenRange),
476
+ identifier,
477
+ cancellationToken,
478
+ initialCorrelationId: trace.id,
479
+ activeNode,
480
+ inspectionSettings: {
481
+ ...this.inspectionSettings,
482
+ cancellationToken,
483
+ initialCorrelationId: correlationId,
484
+ },
485
+ parseState,
486
+ triedNodeScope: powerquery_parser_1.Assert.asDefined(await this.inspectNodeScope(activeNode, trace.id, cancellationToken), "we have a truthy activeNode meaning we have a truthy parseState"),
487
+ triedScopeType: powerquery_parser_1.Assert.asDefined(await this.inspectScopeType(activeNode, trace.id, cancellationToken), "we have a truthy activeNode meaning we have a truthy parseState"),
488
+ };
489
+ trace.exit();
490
+ return context;
491
+ }
492
+ async getSignatureProviderContext(position, correlationId, cancellationTokenOverride) {
493
+ const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.getSignatureProviderContext.name, correlationId);
494
+ const parseState = await this.getParseStateOkOrThrow(trace);
495
+ const activeNode = await this.getActiveNodeOkOrThrow(position, trace);
496
+ const triedCurrentInvokeExpression = await this.inspectCurrentInvokeExpression(position, trace.id, cancellationTokenOverride);
497
+ if (parseState === undefined ||
498
+ activeNode === undefined ||
499
+ triedCurrentInvokeExpression === undefined ||
500
+ powerquery_parser_1.ResultUtils.isError(triedCurrentInvokeExpression) ||
501
+ triedCurrentInvokeExpression.value === undefined) {
502
+ trace.exit();
503
+ return undefined;
504
+ }
505
+ const invokeExpression = triedCurrentInvokeExpression.value;
506
+ const functionName = invokeExpression.name !== undefined ? invokeExpression.name : undefined;
507
+ const argumentOrdinal = invokeExpression.arguments !== undefined ? invokeExpression.arguments.argumentOrdinal : undefined;
508
+ if (functionName === undefined || argumentOrdinal === undefined) {
509
+ trace.exit();
510
+ return undefined;
511
+ }
512
+ const cancellationToken = cancellationTokenOverride ?? this.inspectionSettings.cancellationToken;
513
+ const result = {
514
+ argumentOrdinal,
515
+ functionName,
516
+ isNameInLocalScope: invokeExpression.isNameInLocalScope,
517
+ functionType: invokeExpression.functionType,
518
+ traceManager: this.traceManager,
519
+ cancellationToken,
520
+ initialCorrelationId: trace.id,
521
+ triedCurrentInvokeExpression: await __1.Inspection.tryCurrentInvokeExpression({
522
+ ...this.inspectionSettings,
523
+ cancellationToken,
524
+ initialCorrelationId: trace.id,
525
+ }, parseState.contextState.nodeIdMapCollection, activeNode, this.typeCache),
526
+ };
527
+ trace.exit();
528
+ return result;
529
+ }
530
+ getTypeCache() {
531
+ return this.typeCache;
532
+ }
533
+ async collectAllIdentifiersBeneath(nodeIdMapCollection, valueCreator) {
534
+ const astNodeById = nodeIdMapCollection.astNodeById;
535
+ const childIdsById = nodeIdMapCollection.childIdsById;
536
+ const originLiteral = valueCreator.literal;
537
+ const entry = (0, scopeUtils_1.findDirectUpperScopeExpression)(nodeIdMapCollection, valueCreator.id);
538
+ if (entry) {
539
+ const allIdentifierIdSet = nodeIdMapCollection.idsByNodeKind.get(language_1.Ast.NodeKind.Identifier) ?? new Set();
540
+ const allGeneralizedIdentifierIdSet = nodeIdMapCollection.idsByNodeKind.get(language_1.Ast.NodeKind.GeneralizedIdentifier) ?? new Set();
541
+ const current = entry;
542
+ const idsByTiers = [];
543
+ let currentTier = (childIdsById.get(current.id) ?? []).slice();
544
+ while (currentTier.length) {
545
+ const toBePushed = currentTier.filter((one) => allIdentifierIdSet.has(one) || allGeneralizedIdentifierIdSet.has(one));
546
+ toBePushed.length && idsByTiers.push(toBePushed);
547
+ currentTier = currentTier.slice();
548
+ let nextTier = [];
549
+ while (currentTier.length) {
550
+ const oneNode = currentTier.shift() ?? -1;
551
+ const childrenOfTheNode = (childIdsById.get(oneNode) ?? []).slice();
552
+ nextTier = nextTier.concat(childrenOfTheNode);
553
+ }
554
+ currentTier = nextTier;
555
+ }
556
+ // filter literal names
557
+ const completeIdentifierNodes = idsByTiers
558
+ .flat(1)
559
+ .map((one) => astNodeById.get(one))
560
+ .filter(Boolean);
561
+ let filteredIdentifierNodes = completeIdentifierNodes.filter((one) => one.literal === originLiteral);
562
+ // populate the scope items for each
563
+ await Promise.all(filteredIdentifierNodes
564
+ .filter((oneIdentifier) => oneIdentifier.kind === language_1.Ast.NodeKind.GeneralizedIdentifier ||
565
+ oneIdentifier.identifierContextKind === language_1.Ast.IdentifierContextKind.Value)
566
+ .map((oneIdentifier) => __1.Inspection.tryNodeScope(this.inspectionSettings, nodeIdMapCollection, this.inspectionSettings.eachScopeById, oneIdentifier.id, this.typeCache.scopeById)));
567
+ filteredIdentifierNodes = filteredIdentifierNodes.filter((oneIdentifierNode) => {
568
+ if (oneIdentifierNode.kind === language_1.Ast.NodeKind.GeneralizedIdentifier) {
569
+ return oneIdentifierNode.id === valueCreator.id;
570
+ }
571
+ else if (oneIdentifierNode.identifierContextKind === language_1.Ast.IdentifierContextKind.Value) {
572
+ const theScope = this.typeCache.scopeById.get(oneIdentifierNode.id);
573
+ const theScopeItem = (0, scopeUtils_1.findScopeItemByLiteral)(theScope, originLiteral);
574
+ const theCreatorIdentifier = (0, scopeUtils_1.scopeCreatorIdentifier)(theScopeItem);
575
+ return theCreatorIdentifier && theCreatorIdentifier.id === valueCreator.id;
576
+ }
577
+ else if (oneIdentifierNode.identifierContextKind === language_1.Ast.IdentifierContextKind.Key ||
578
+ oneIdentifierNode.identifierContextKind === language_1.Ast.IdentifierContextKind.Parameter) {
579
+ return oneIdentifierNode.id === valueCreator.id;
580
+ }
581
+ return false;
582
+ });
583
+ return filteredIdentifierNodes;
584
+ }
585
+ return [];
586
+ }
587
+ // Performs a lex + parse of the document, then caches the results into local variables.
588
+ // Any code which operates on the parse state should use this method to ensure that the parse state is initialized.
589
+ async tryLexParse() {
590
+ const trace = this.traceManager.entry(trace_2.ValidationTraceConstant.AnalysisBase, this.tryLexParse.name, this.initialCorrelationId);
591
+ const updatedSettings = {
592
+ ...this.inspectionSettings,
593
+ initialCorrelationId: trace.id,
594
+ };
595
+ const triedLexParse = await PQP.TaskUtils.tryLexParse(updatedSettings, this.textDocument.getText());
596
+ trace.exit();
597
+ return triedLexParse;
598
+ }
599
+ async inspectAutocomplete(activeNode, correlationId, cancellationTokenOverride) {
600
+ const parseState = await this.getParseStateOkOrThrow(undefined);
601
+ const parseError = await this.getParseErrorOkOrThrow(undefined);
602
+ if (parseState === undefined) {
603
+ return undefined;
604
+ }
605
+ return await __1.Inspection.autocomplete({
606
+ ...this.inspectionSettings,
607
+ initialCorrelationId: correlationId,
608
+ cancellationToken: cancellationTokenOverride ?? this.inspectionSettings.cancellationToken,
609
+ }, parseState, this.typeCache, activeNode, parseError);
610
+ }
611
+ async inspectCurrentInvokeExpression(position, correlationId, cancellationTokenOverride) {
612
+ const parseState = await this.getParseStateOkOrThrow(undefined);
613
+ // parseState needs to be ok, and must be truthy.
614
+ const activeNode = await this.getActiveNodeOkOrThrow(position, undefined);
615
+ if (parseState === undefined || activeNode === undefined) {
616
+ return undefined;
617
+ }
618
+ return await __1.Inspection.tryCurrentInvokeExpression({
619
+ ...this.inspectionSettings,
620
+ initialCorrelationId: correlationId,
621
+ cancellationToken: cancellationTokenOverride ?? this.inspectionSettings.cancellationToken,
622
+ }, parseState.contextState.nodeIdMapCollection, activeNode, this.typeCache);
623
+ }
624
+ async inspectNodeScope(activeNode, correlationId, cancellationTokenOverride) {
625
+ const parseState = await this.getParseStateOkOrThrow(undefined);
626
+ if (parseState === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
627
+ return undefined;
628
+ }
629
+ return await __1.Inspection.tryNodeScope({
630
+ ...this.inspectionSettings,
631
+ cancellationToken: cancellationTokenOverride ?? this.inspectionSettings.cancellationToken,
632
+ initialCorrelationId: correlationId,
633
+ }, parseState.contextState.nodeIdMapCollection, this.inspectionSettings.eachScopeById, inspection_1.ActiveNodeUtils.assertGetLeaf(activeNode).node.id, this.typeCache.scopeById);
634
+ }
635
+ async inspectScopeType(activeNode, correlationId, cancellationTokenOverride) {
636
+ const parseState = await this.getParseStateOkOrThrow(undefined);
637
+ if (parseState === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
638
+ return undefined;
639
+ }
640
+ return await __1.Inspection.tryScopeType({
641
+ ...this.inspectionSettings,
642
+ cancellationToken: cancellationTokenOverride ?? this.inspectionSettings.cancellationToken,
643
+ initialCorrelationId: correlationId,
644
+ }, parseState.contextState.nodeIdMapCollection, inspection_1.ActiveNodeUtils.assertGetLeaf(activeNode).node.id, this.typeCache);
645
+ }
646
+ async getActiveNodeOkOrThrow(position, trace) {
647
+ const activeNodeResult = await this.getActiveNode(position);
648
+ if (powerquery_parser_1.ResultUtils.isError(activeNodeResult)) {
649
+ trace?.exit({ [trace_1.TraceConstant.IsThrowing]: true });
650
+ throw activeNodeResult.error;
651
+ }
652
+ return activeNodeResult.value;
653
+ }
654
+ async getParseErrorOkOrThrow(trace) {
655
+ const parseErrorResult = await this.getParseError();
656
+ if (powerquery_parser_1.ResultUtils.isError(parseErrorResult)) {
657
+ trace?.exit({ [trace_1.TraceConstant.IsThrowing]: true });
658
+ throw parseErrorResult.error;
659
+ }
660
+ return parseErrorResult.value;
661
+ }
662
+ async getParseStateOkOrThrow(trace) {
663
+ const parseStateResult = await this.getParseState();
664
+ if (powerquery_parser_1.ResultUtils.isError(parseStateResult)) {
665
+ trace?.exit({ [trace_1.TraceConstant.IsThrowing]: true });
666
+ throw parseStateResult.error;
667
+ }
668
+ return parseStateResult.value;
669
+ }
670
+ applyAnalysisSettings(analysisSettings) {
671
+ this.initialCorrelationId = analysisSettings.initialCorrelationId;
672
+ this.inspectionSettings = analysisSettings.inspectionSettings;
673
+ this.locale = analysisSettings.inspectionSettings.locale;
674
+ this.traceManager = analysisSettings.traceManager;
675
+ }
676
+ }
677
+ exports.AnalysisBase = AnalysisBase;
678
+ function addIdentifierPairedExpressionSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken) {
679
+ const identifierPairedExpressionIds = nodeIdMapCollection.idsByNodeKind.get(language_1.Ast.NodeKind.IdentifierPairedExpression) ?? new Set();
680
+ for (const nodeId of identifierPairedExpressionIds) {
681
+ cancellationToken?.throwIfCancelled();
682
+ const xorNode = parser_1.NodeIdMapUtils.assertXorChecked(nodeIdMapCollection, nodeId, language_1.Ast.NodeKind.IdentifierPairedExpression);
683
+ if (!parser_1.XorNodeUtils.isAst(xorNode)) {
684
+ continue;
685
+ }
686
+ const astNode = xorNode.node;
687
+ const documentSymbol = __1.InspectionUtils.getSymbolForIdentifierPairedExpression(astNode);
688
+ addDocumentSymbols(nodeIdMapCollection, parentSymbolById, nodeId, currentSymbols, documentSymbol);
689
+ parentSymbolById.set(nodeId, documentSymbol);
690
+ }
691
+ }
692
+ function addRecordSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken) {
693
+ const recordIdCollections = [
694
+ nodeIdMapCollection.idsByNodeKind.get(language_1.Ast.NodeKind.RecordExpression) ?? new Set(),
695
+ nodeIdMapCollection.idsByNodeKind.get(language_1.Ast.NodeKind.RecordLiteral) ?? new Set(),
696
+ ];
697
+ for (const collection of recordIdCollections) {
698
+ for (const nodeId of collection) {
699
+ cancellationToken?.throwIfCancelled();
700
+ const xorNode = parser_1.NodeIdMapUtils.assertXorChecked(nodeIdMapCollection, nodeId, [language_1.Ast.NodeKind.RecordExpression, language_1.Ast.NodeKind.RecordLiteral]);
701
+ if (!parser_1.XorNodeUtils.isAst(xorNode)) {
702
+ continue;
703
+ }
704
+ const astNode = xorNode.node;
705
+ // Process the record if the immediate parent is a Struct
706
+ const parentId = nodeIdMapCollection.parentIdById.get(astNode.id);
707
+ const parentSymbol = parentId ? parentSymbolById.get(parentId) : undefined;
708
+ if (parentSymbol && parentSymbol.kind === vscode_languageserver_types_1.SymbolKind.Struct) {
709
+ const fieldSymbols = __1.InspectionUtils.getSymbolsForRecord(astNode);
710
+ if (fieldSymbols.length > 0) {
711
+ addDocumentSymbols(nodeIdMapCollection, parentSymbolById, astNode.id, currentSymbols, ...fieldSymbols);
712
+ }
713
+ }
714
+ }
715
+ }
716
+ }
717
+ function addDocumentSymbols(nodeIdMapCollection, parentSymbolById, nodeId, currentSymbols, ...newSymbols) {
718
+ const parentSymbol = findParentSymbol(nodeIdMapCollection, parentSymbolById, nodeId);
719
+ if (parentSymbol) {
720
+ if (!parentSymbol.children) {
721
+ parentSymbol.children = [];
722
+ }
723
+ parentSymbol.children.push(...newSymbols);
724
+ return;
725
+ }
726
+ // Add to the top level
727
+ currentSymbols.push(...newSymbols);
728
+ }
729
+ function findParentSymbol(nodeIdMapCollection, parentSymbolById, nodeId) {
730
+ // Get parent for current node
731
+ const parentNodeId = nodeIdMapCollection.parentIdById.get(nodeId);
732
+ if (!parentNodeId) {
733
+ // No more parents to check
734
+ return undefined;
735
+ }
736
+ let parentSymbol = parentSymbolById.get(parentNodeId);
737
+ if (!parentSymbol) {
738
+ parentSymbol = findParentSymbol(nodeIdMapCollection, parentSymbolById, parentNodeId);
739
+ }
740
+ return parentSymbol;
741
+ }
711
742
  //# sourceMappingURL=analysisBase.js.map