@microsoft/powerquery-language-services 0.6.12 → 0.9.6

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 (198) hide show
  1. package/lib/powerquery-language-services/analysis/analysis.d.ts +12 -11
  2. package/lib/powerquery-language-services/analysis/analysisBase.d.ts +31 -25
  3. package/lib/powerquery-language-services/analysis/analysisBase.js +239 -195
  4. package/lib/powerquery-language-services/analysis/analysisBase.js.map +1 -1
  5. package/lib/powerquery-language-services/analysis/analysisUtils.d.ts +1 -1
  6. package/lib/powerquery-language-services/analysis/analysisUtils.js +3 -3
  7. package/lib/powerquery-language-services/analysis/analysisUtils.js.map +1 -1
  8. package/lib/powerquery-language-services/analysis/memoizedAnalysis.d.ts +6 -6
  9. package/lib/powerquery-language-services/analysis/memoizedAnalysis.js.map +1 -1
  10. package/lib/powerquery-language-services/documentSymbols.js +8 -7
  11. package/lib/powerquery-language-services/documentSymbols.js.map +1 -1
  12. package/lib/powerquery-language-services/externalType/externalType.d.ts +1 -1
  13. package/lib/powerquery-language-services/externalType/externalType.js.map +1 -1
  14. package/lib/powerquery-language-services/externalType/externalTypeUtils.d.ts +2 -2
  15. package/lib/powerquery-language-services/externalType/externalTypeUtils.js +8 -7
  16. package/lib/powerquery-language-services/externalType/externalTypeUtils.js.map +1 -1
  17. package/lib/powerquery-language-services/index.d.ts +2 -1
  18. package/lib/powerquery-language-services/index.js +4 -3
  19. package/lib/powerquery-language-services/index.js.map +1 -1
  20. package/lib/powerquery-language-services/inspection/activeNode/activeNode.d.ts +7 -8
  21. package/lib/powerquery-language-services/inspection/activeNode/activeNode.js +3 -4
  22. package/lib/powerquery-language-services/inspection/activeNode/activeNode.js.map +1 -1
  23. package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.d.ts +1 -1
  24. package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js +227 -193
  25. package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js.map +1 -1
  26. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.d.ts +4 -2
  27. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js +121 -98
  28. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js.map +1 -1
  29. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.d.ts +3 -6
  30. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js +13 -46
  31. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js.map +1 -1
  32. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.d.ts +2 -1
  33. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js +42 -43
  34. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js.map +1 -1
  35. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js +24 -23
  36. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js.map +1 -1
  37. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js +7 -7
  38. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js.map +1 -1
  39. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js +2 -2
  40. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js.map +1 -1
  41. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js +8 -8
  42. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js.map +1 -1
  43. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js +4 -4
  44. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js.map +1 -1
  45. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js +8 -9
  46. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js.map +1 -1
  47. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.d.ts +1 -1
  48. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.js +6 -5
  49. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.js.map +1 -1
  50. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.js +1 -1
  51. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.js.map +1 -1
  52. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/commonTypes.d.ts +1 -1
  53. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.d.ts +4 -3
  54. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js +126 -82
  55. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js.map +1 -1
  56. package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.d.ts +5 -3
  57. package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js +305 -53
  58. package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js.map +1 -1
  59. package/lib/powerquery-language-services/inspection/autocomplete/commonTypes.d.ts +6 -7
  60. package/lib/powerquery-language-services/inspection/autocomplete/task.js +8 -11
  61. package/lib/powerquery-language-services/inspection/autocomplete/task.js.map +1 -1
  62. package/lib/powerquery-language-services/inspection/autocomplete/trailingToken.d.ts +7 -0
  63. package/lib/powerquery-language-services/inspection/autocomplete/trailingToken.js +5 -0
  64. package/lib/powerquery-language-services/inspection/autocomplete/trailingToken.js.map +1 -0
  65. package/lib/powerquery-language-services/inspection/autocomplete/{common.d.ts → trailingTokenUtils.d.ts} +1 -1
  66. package/lib/powerquery-language-services/inspection/autocomplete/trailingTokenUtils.js +19 -0
  67. package/lib/powerquery-language-services/inspection/autocomplete/trailingTokenUtils.js.map +1 -0
  68. package/lib/powerquery-language-services/inspection/deferenceIdentifier.js +23 -20
  69. package/lib/powerquery-language-services/inspection/deferenceIdentifier.js.map +1 -1
  70. package/lib/powerquery-language-services/inspection/expectedType.js +62 -61
  71. package/lib/powerquery-language-services/inspection/expectedType.js.map +1 -1
  72. package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js +20 -15
  73. package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js.map +1 -1
  74. package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js +12 -10
  75. package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js.map +1 -1
  76. package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js +7 -7
  77. package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js.map +1 -1
  78. package/lib/powerquery-language-services/inspection/scope/scope.d.ts +1 -1
  79. package/lib/powerquery-language-services/inspection/scope/scope.js.map +1 -1
  80. package/lib/powerquery-language-services/inspection/scope/scopeInspection.js +38 -36
  81. package/lib/powerquery-language-services/inspection/scope/scopeInspection.js.map +1 -1
  82. package/lib/powerquery-language-services/inspection/scope/scopeUtils.js +20 -18
  83. package/lib/powerquery-language-services/inspection/scope/scopeUtils.js.map +1 -1
  84. package/lib/powerquery-language-services/inspection/task.js +24 -21
  85. package/lib/powerquery-language-services/inspection/task.js.map +1 -1
  86. package/lib/powerquery-language-services/inspection/type/inspectType/common.d.ts +1 -1
  87. package/lib/powerquery-language-services/inspection/type/inspectType/common.js +85 -84
  88. package/lib/powerquery-language-services/inspection/type/inspectType/common.js.map +1 -1
  89. package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js +4 -3
  90. package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js.map +1 -1
  91. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeConstant.js +38 -38
  92. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeConstant.js.map +1 -1
  93. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js +6 -5
  94. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js.map +1 -1
  95. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js +10 -9
  96. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js.map +1 -1
  97. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js +6 -5
  98. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js.map +1 -1
  99. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js +25 -24
  100. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js.map +1 -1
  101. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js +11 -10
  102. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js.map +1 -1
  103. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js +5 -4
  104. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js.map +1 -1
  105. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js +15 -13
  106. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js.map +1 -1
  107. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js +14 -12
  108. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js.map +1 -1
  109. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js +5 -4
  110. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js.map +1 -1
  111. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js +5 -4
  112. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js.map +1 -1
  113. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.js +11 -10
  114. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.js.map +1 -1
  115. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js +11 -10
  116. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js.map +1 -1
  117. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js +8 -6
  118. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js.map +1 -1
  119. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js +10 -8
  120. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js.map +1 -1
  121. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js +11 -10
  122. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js.map +1 -1
  123. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js +10 -6
  124. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js.map +1 -1
  125. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js +5 -4
  126. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js.map +1 -1
  127. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js +6 -5
  128. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js.map +1 -1
  129. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js +10 -8
  130. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js.map +1 -1
  131. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js +8 -6
  132. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js.map +1 -1
  133. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js +9 -7
  134. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js.map +1 -1
  135. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js +11 -10
  136. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js.map +1 -1
  137. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js +89 -88
  138. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js.map +1 -1
  139. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js +12 -10
  140. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js.map +1 -1
  141. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js +14 -13
  142. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js.map +1 -1
  143. package/lib/powerquery-language-services/inspection/type/task.js +9 -7
  144. package/lib/powerquery-language-services/inspection/type/task.js.map +1 -1
  145. package/lib/powerquery-language-services/inspection/typeCache/typeCacheUtils.d.ts +1 -1
  146. package/lib/powerquery-language-services/inspection/typeCache/typeCacheUtils.js +3 -3
  147. package/lib/powerquery-language-services/inspection/typeCache/typeCacheUtils.js.map +1 -1
  148. package/lib/powerquery-language-services/inspectionSettings.d.ts +1 -1
  149. package/lib/powerquery-language-services/inspectionSettings.js.map +1 -1
  150. package/lib/powerquery-language-services/inspectionUtils.d.ts +3 -3
  151. package/lib/powerquery-language-services/inspectionUtils.js +51 -52
  152. package/lib/powerquery-language-services/inspectionUtils.js.map +1 -1
  153. package/lib/powerquery-language-services/library/library.d.ts +1 -1
  154. package/lib/powerquery-language-services/library/library.js.map +1 -1
  155. package/lib/powerquery-language-services/library/librarySymbolUtils.d.ts +10 -2
  156. package/lib/powerquery-language-services/library/librarySymbolUtils.js +27 -21
  157. package/lib/powerquery-language-services/library/librarySymbolUtils.js.map +1 -1
  158. package/lib/powerquery-language-services/library/libraryUtils.d.ts +5 -5
  159. package/lib/powerquery-language-services/library/libraryUtils.js +24 -23
  160. package/lib/powerquery-language-services/library/libraryUtils.js.map +1 -1
  161. package/lib/powerquery-language-services/localization/templates.js +42 -42
  162. package/lib/powerquery-language-services/localization/templates.js.map +1 -1
  163. package/lib/powerquery-language-services/positionUtils.d.ts +9 -4
  164. package/lib/powerquery-language-services/positionUtils.js +55 -23
  165. package/lib/powerquery-language-services/positionUtils.js.map +1 -1
  166. package/lib/powerquery-language-services/providers/languageCompletionItemProvider.js +15 -15
  167. package/lib/powerquery-language-services/providers/languageCompletionItemProvider.js.map +1 -1
  168. package/lib/powerquery-language-services/providers/libraryProvider.js +9 -8
  169. package/lib/powerquery-language-services/providers/libraryProvider.js.map +1 -1
  170. package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js +16 -14
  171. package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js.map +1 -1
  172. package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js +24 -23
  173. package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js.map +1 -1
  174. package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js +73 -71
  175. package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js.map +1 -1
  176. package/lib/powerquery-language-services/providers/nullSymbolProvider.js +6 -6
  177. package/lib/powerquery-language-services/providers/nullSymbolProvider.js.map +1 -1
  178. package/lib/powerquery-language-services/tokenPositionComparison.d.ts +5 -0
  179. package/lib/powerquery-language-services/tokenPositionComparison.js +13 -0
  180. package/lib/powerquery-language-services/tokenPositionComparison.js.map +1 -0
  181. package/lib/powerquery-language-services/trace.d.ts +4 -4
  182. package/lib/powerquery-language-services/trace.js.map +1 -1
  183. package/lib/powerquery-language-services/traceUtils.d.ts +2 -2
  184. package/lib/powerquery-language-services/traceUtils.js +5 -5
  185. package/lib/powerquery-language-services/traceUtils.js.map +1 -1
  186. package/lib/powerquery-language-services/validate/validate.js +6 -5
  187. package/lib/powerquery-language-services/validate/validate.js.map +1 -1
  188. package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js +16 -14
  189. package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js.map +1 -1
  190. package/lib/powerquery-language-services/validate/validateFunctionExpression.js +6 -4
  191. package/lib/powerquery-language-services/validate/validateFunctionExpression.js.map +1 -1
  192. package/lib/powerquery-language-services/validate/validateInvokeExpression.js +7 -5
  193. package/lib/powerquery-language-services/validate/validateInvokeExpression.js.map +1 -1
  194. package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js +10 -7
  195. package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js.map +1 -1
  196. package/package.json +10 -8
  197. package/lib/powerquery-language-services/inspection/autocomplete/common.js +0 -11
  198. package/lib/powerquery-language-services/inspection/autocomplete/common.js.map +0 -1
@@ -1,81 +1,134 @@
1
1
  "use strict";
2
+ /* eslint-disable @typescript-eslint/no-unused-vars */
3
+ /* eslint-disable max-len */
2
4
  // Copyright (c) Microsoft Corporation.
3
5
  // Licensed under the MIT license.
4
6
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.findXorOfNodeKind = exports.isPositionInBounds = exports.assertPositionInBounds = exports.assertGetLeaf = exports.assertActiveNode = exports.createOutOfBoundPosition = exports.activeNode = void 0;
6
- const PQP = require("@microsoft/powerquery-parser");
7
+ exports.findNodeKind = exports.isPositionInBounds = exports.assertPositionInBounds = exports.assertGetLeaf = exports.assertActiveNode = exports.createOutOfBoundPosition = exports.activeNode = void 0;
7
8
  const parser_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/parser");
9
+ const powerquery_parser_1 = require("@microsoft/powerquery-parser");
8
10
  const language_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/language");
11
+ const activeNode_1 = require("./activeNode");
9
12
  const __1 = require("../..");
10
- // Searches all leaf Ast.TNodes and all Context nodes to find the "active" node.
11
- // ' 1 + |' -> the second operand, a Context node, in an ArithmeticExpression.
12
- // 'let x=|1 in x' -> the value part of the key-value-pair.
13
- // 'foo(|)' -> the zero length ArrayWrapper of an InvokeExpression
14
- //
15
- // The naive approach is to find the closest Ast or Context node either to the left of or ends on the cursor.
16
- // This approach breaks under several edge cases.
17
- //
18
- // Take a look at the ArithmeticExpression example above,
19
- // it doesn't make sense for the ActiveNode to be the '+' Constant.
20
- // When the position is on a constant the selected Ast.TNode might need to be shifted one to the right.
21
- // This happens with atomic constants such as '+', '=>', '[', '(' etc.
22
- // However if you shifted right on '(' for 'foo(|)' then the ActiveNode would be ')' instead of the ArrayWrapper.
23
- //
24
- // Sometimes we don't want to shift at all.
25
- // Nodes that prevent shifting are called anchor nodes.
26
- // '[foo = bar|' should be anchored on the identifier 'bar' and not the context node for the ']' Constant.
27
13
  function activeNode(nodeIdMapCollection, position) {
28
- // Search for the closest Ast node on or to the left of Position, as well as the closest shifted right Ast node.
29
- const astSearch = astNodeSearch(nodeIdMapCollection, position);
30
- // Search for the closest Context node on or to the right of the closest Ast node.
31
- const contextNode = findContext(nodeIdMapCollection, astSearch);
14
+ const astSearched = leafSearch(nodeIdMapCollection, position);
15
+ const { nodeClosestBeforePosition, nodeOnPosition, nodeClosestAfterPosition } = leafSearch(nodeIdMapCollection, position);
16
+ const contextClosestOnOrAfterPosition = findContext(nodeIdMapCollection, astSearched);
32
17
  let leaf;
33
18
  let leafKind;
34
- // Order of node priority:
35
- // * shifted
36
- // * anchor
37
- // * Context
38
- // * Ast
39
- if (astSearch.shiftedRightNode !== undefined) {
40
- leaf = parser_1.XorNodeUtils.boxAst(astSearch.shiftedRightNode);
41
- leafKind = "ShiftedRight" /* ShiftedRight */;
19
+ // Case 1: empty document
20
+ if (nodeClosestBeforePosition === undefined &&
21
+ nodeOnPosition === undefined &&
22
+ nodeClosestAfterPosition === undefined) {
23
+ return createOutOfBoundPosition(position);
24
+ }
25
+ // Case 2: There's only 1 leaf
26
+ // Case 2a: truthy left
27
+ // `not |`
28
+ // `foo |`
29
+ else if (nodeClosestBeforePosition !== undefined &&
30
+ nodeOnPosition === undefined &&
31
+ nodeClosestAfterPosition === undefined) {
32
+ // With context
33
+ // `not |`
34
+ if (contextClosestOnOrAfterPosition !== undefined) {
35
+ leaf = parser_1.XorNodeUtils.boxContext(contextClosestOnOrAfterPosition);
36
+ leafKind = activeNode_1.ActiveNodeLeafKind.ContextNode;
37
+ }
38
+ // Without context
39
+ // `foo |`
40
+ else {
41
+ leaf = parser_1.XorNodeUtils.boxAst(nodeClosestBeforePosition);
42
+ leafKind = activeNode_1.ActiveNodeLeafKind.IsBeforePosition;
43
+ }
44
+ }
45
+ // Case 2b: truthy center
46
+ // `|not`
47
+ // `not|`
48
+ // `|foo`
49
+ // `foo|`
50
+ else if (nodeClosestBeforePosition === undefined &&
51
+ nodeOnPosition !== undefined &&
52
+ nodeClosestAfterPosition === undefined) {
53
+ // With or without context
54
+ leaf = parser_1.XorNodeUtils.boxAst(nodeOnPosition);
55
+ leafKind = activeNode_1.ActiveNodeLeafKind.IsInAst;
56
+ }
57
+ // Case 2c: truthy right
58
+ // `| not`
59
+ // `| 1`
60
+ else if (nodeClosestBeforePosition === undefined &&
61
+ nodeOnPosition === undefined &&
62
+ nodeClosestAfterPosition !== undefined) {
63
+ // With or without context
64
+ return createOutOfBoundPosition(position);
42
65
  }
43
- else if (astSearch.bestOnOrBeforeNode !== undefined && isAnchorNode(position, astSearch.bestOnOrBeforeNode)) {
44
- leaf = parser_1.XorNodeUtils.boxAst(astSearch.bestOnOrBeforeNode);
45
- leafKind = "Anchored" /* Anchored */;
66
+ // Case 3: There's 2 leafs.
67
+ // Case 3a: truthy left and center
68
+ // `1+|1`
69
+ // `if |true`
70
+ // `if true|`
71
+ // `{1, foo|`
72
+ else if (nodeClosestBeforePosition !== undefined &&
73
+ nodeOnPosition !== undefined &&
74
+ nodeClosestAfterPosition == undefined) {
75
+ // With or without context
76
+ leaf = parser_1.XorNodeUtils.boxAst(nodeOnPosition);
77
+ leafKind = activeNode_1.ActiveNodeLeafKind.IsInAst;
46
78
  }
47
- else if (contextNode !== undefined) {
48
- leaf = parser_1.XorNodeUtils.boxContext(contextNode);
49
- leafKind = "Context" /* ContextNode */;
79
+ // Case 3b: truthy left and right
80
+ else if (nodeClosestBeforePosition !== undefined &&
81
+ nodeOnPosition === undefined &&
82
+ nodeClosestAfterPosition !== undefined) {
83
+ if (language_1.AstUtils.isNodeKind(nodeClosestBeforePosition, language_1.Ast.NodeKind.Constant) &&
84
+ ShiftRightConstantKinds.includes(nodeClosestBeforePosition.constantKind)) {
85
+ leaf = parser_1.XorNodeUtils.boxAst(nodeClosestAfterPosition);
86
+ leafKind = activeNode_1.ActiveNodeLeafKind.IsAfterPosition;
87
+ }
88
+ else {
89
+ leaf = parser_1.XorNodeUtils.boxAst(nodeClosestBeforePosition);
90
+ leafKind = activeNode_1.ActiveNodeLeafKind.IsBeforePosition;
91
+ }
50
92
  }
51
- else if (astSearch.bestOnOrBeforeNode !== undefined) {
52
- leaf = parser_1.XorNodeUtils.boxAst(astSearch.bestOnOrBeforeNode);
53
- leafKind = __1.PositionUtils.isAfterAst(position, astSearch.bestOnOrBeforeNode, false)
54
- ? "AfterAstNode" /* AfterAstNode */
55
- : "OnAstNode" /* OnAstNode */;
93
+ // Case 3c: truthy center and right
94
+ // `|not true
95
+ else if (nodeClosestBeforePosition === undefined &&
96
+ nodeOnPosition !== undefined &&
97
+ nodeClosestAfterPosition !== undefined) {
98
+ leaf = parser_1.XorNodeUtils.boxAst(nodeOnPosition);
99
+ leafKind = activeNode_1.ActiveNodeLeafKind.IsInAst;
56
100
  }
101
+ // Case 4: There's 3 leafs
102
+ else if (nodeClosestBeforePosition !== undefined &&
103
+ nodeOnPosition !== undefined &&
104
+ nodeClosestAfterPosition !== undefined) {
105
+ leaf = parser_1.XorNodeUtils.boxAst(nodeOnPosition);
106
+ leafKind = activeNode_1.ActiveNodeLeafKind.IsInAst;
107
+ }
108
+ // Case 5: TypeScript can't tell this is exhaustive.
57
109
  else {
58
- return createOutOfBoundPosition(position);
110
+ throw new powerquery_parser_1.CommonError.InvariantError(`this should never be reached`);
59
111
  }
60
112
  const inclusiveIdentifierUnderPosition = findLeafIdentifier(nodeIdMapCollection, leaf);
61
113
  const exclusiveIdentifierUnderPosition = inclusiveIdentifierUnderPosition &&
62
114
  __1.PositionUtils.isInAst(position, inclusiveIdentifierUnderPosition.node, false, true)
63
115
  ? inclusiveIdentifierUnderPosition
64
116
  : undefined;
65
- const ancestry = parser_1.AncestryUtils.assertGetAncestry(nodeIdMapCollection, leaf.node.id);
117
+ const ancestry = parser_1.AncestryUtils.assertAncestry(nodeIdMapCollection, leaf.node.id);
66
118
  return {
67
- ancestry,
68
- kind: "ActiveNode" /* ActiveNode */,
119
+ kind: activeNode_1.ActiveNodeKind.ActiveNode,
69
120
  leafKind,
121
+ position,
122
+ ancestry,
123
+ isInKey: isInKey(ancestry),
70
124
  exclusiveIdentifierUnderPosition,
71
125
  inclusiveIdentifierUnderPosition,
72
- position,
73
126
  };
74
127
  }
75
128
  exports.activeNode = activeNode;
76
129
  function createOutOfBoundPosition(position) {
77
130
  return {
78
- kind: "OutOfBoundPosition" /* OutOfBoundPosition */,
131
+ kind: activeNode_1.ActiveNodeKind.OutOfBoundPosition,
79
132
  position,
80
133
  };
81
134
  }
@@ -87,201 +140,170 @@ function assertActiveNode(nodeIdMapCollection, position) {
87
140
  }
88
141
  exports.assertActiveNode = assertActiveNode;
89
142
  function assertGetLeaf(activeNode) {
90
- return parser_1.AncestryUtils.assertGetLeaf(activeNode.ancestry);
143
+ return parser_1.AncestryUtils.assertNth(activeNode.ancestry, 0);
91
144
  }
92
145
  exports.assertGetLeaf = assertGetLeaf;
93
146
  function assertPositionInBounds(value) {
94
147
  if (!isPositionInBounds(value)) {
95
- throw new PQP.CommonError.InvariantError(`value was not in bounds`);
148
+ throw new powerquery_parser_1.CommonError.InvariantError(`value was not in bounds`);
96
149
  }
97
150
  }
98
151
  exports.assertPositionInBounds = assertPositionInBounds;
99
152
  function isPositionInBounds(value) {
100
- return value.kind === "ActiveNode" /* ActiveNode */;
153
+ return value.kind === activeNode_1.ActiveNodeKind.ActiveNode;
101
154
  }
102
155
  exports.isPositionInBounds = isPositionInBounds;
103
- function findXorOfNodeKind(activeNode, nodeKind) {
104
- return parser_1.AncestryUtils.findXorOfNodeKind(activeNode.ancestry, nodeKind);
156
+ function findNodeKind(activeNode, nodeKind) {
157
+ return parser_1.AncestryUtils.findNodeKind(activeNode.ancestry, nodeKind);
105
158
  }
106
- exports.findXorOfNodeKind = findXorOfNodeKind;
107
- const DrilldownConstantKind = [
108
- "{" /* LeftBrace */,
109
- "[" /* LeftBracket */,
110
- "(" /* LeftParenthesis */,
159
+ exports.findNodeKind = findNodeKind;
160
+ const ShiftLeftConstantKinds = [
161
+ language_1.Constant.WrapperConstant.RightBrace,
162
+ language_1.Constant.WrapperConstant.RightBracket,
163
+ language_1.Constant.WrapperConstant.RightParenthesis,
111
164
  ];
112
165
  const ShiftRightConstantKinds = [
113
- "," /* Comma */,
114
- "=" /* Equal */,
115
- "=>" /* FatArrow */,
116
- "}" /* RightBrace */,
117
- "]" /* RightBracket */,
118
- ")" /* RightParenthesis */,
119
- ";" /* Semicolon */,
120
- ...DrilldownConstantKind,
166
+ ...language_1.Constant.BinOpExpressionOperators,
167
+ language_1.Constant.MiscConstant.Ampersand,
168
+ language_1.Constant.MiscConstant.Comma,
169
+ language_1.Constant.MiscConstant.DotDot,
170
+ language_1.Constant.MiscConstant.Equal,
171
+ language_1.Constant.MiscConstant.FatArrow,
172
+ language_1.Constant.MiscConstant.NullCoalescingOperator,
173
+ language_1.Constant.MiscConstant.QuestionMark,
174
+ language_1.Constant.MiscConstant.Semicolon,
175
+ language_1.Constant.WrapperConstant.LeftBrace,
176
+ language_1.Constant.WrapperConstant.LeftBracket,
177
+ language_1.Constant.WrapperConstant.LeftParenthesis,
121
178
  ];
122
- function isAnchorNode(position, astNode) {
123
- if (!__1.PositionUtils.isInAst(position, astNode, true, true)) {
124
- return false;
125
- }
126
- if (astNode.kind === "Identifier" /* Identifier */ || astNode.kind === "GeneralizedIdentifier" /* GeneralizedIdentifier */) {
127
- return true;
128
- }
129
- else if (astNode.kind === "LiteralExpression" /* LiteralExpression */ && astNode.literalKind === "Numeric" /* Numeric */) {
130
- return true;
131
- }
132
- else if (astNode.kind === "Constant" /* Constant */) {
133
- switch (astNode.constantKind) {
134
- case "as" /* As */:
135
- case "each" /* Each */:
136
- case "else" /* Else */:
137
- case "error" /* Error */:
138
- case "if" /* If */:
139
- case "in" /* In */:
140
- case "is" /* Is */:
141
- case "section" /* Section */:
142
- case "shared" /* Shared */:
143
- case "let" /* Let */:
144
- case "meta" /* Meta */:
145
- case "otherwise" /* Otherwise */:
146
- case "then" /* Then */:
147
- case "try" /* Try */:
148
- case "type" /* Type */:
149
- case "null" /* Null */:
150
- return true;
151
- default:
152
- return false;
153
- }
154
- }
155
- else {
156
- return false;
157
- }
158
- }
159
- function astNodeSearch(nodeIdMapCollection, position) {
179
+ // Searches for the closest leaf to the left, right, and on the given position if such an option exists.
180
+ function leafSearch(nodeIdMapCollection, position) {
160
181
  const astNodeById = nodeIdMapCollection.astNodeById;
161
- let bestOnOrBeforeNode;
162
- let bestAfter;
163
- let shiftedRightNode;
164
- // Find:
165
- // the closest leaf to the left or on position.
166
- // the closest leaf to the right of position.
182
+ let nodeClosestBeforePosition;
183
+ let nodeOnPosition;
184
+ let nodeClosestAfterPosition;
185
+ // Find the closest leaf on or to the left of the position.
167
186
  for (const nodeId of nodeIdMapCollection.leafIds) {
168
187
  const candidate = astNodeById.get(nodeId);
188
+ powerquery_parser_1.Assert.isDefined(candidate, `leafIds contained a value that wasn't found in astNodeById`, { nodeId });
189
+ language_1.AstUtils.assertIsLeaf(candidate);
190
+ // This shouldn't occur, but safety first.
169
191
  if (candidate === undefined) {
170
192
  continue;
171
193
  }
172
- let isBoundIncluded;
173
- if (
174
- // let x|=1
175
- (candidate.kind === "Constant" /* Constant */ &&
176
- ShiftRightConstantKinds.indexOf(candidate.constantKind) !== -1) ||
177
- // let x=|1
178
- ((bestOnOrBeforeNode === null || bestOnOrBeforeNode === void 0 ? void 0 : bestOnOrBeforeNode.kind) === "Constant" /* Constant */ &&
179
- ShiftRightConstantKinds.indexOf(bestOnOrBeforeNode.constantKind) !== -1)) {
180
- isBoundIncluded = false;
181
- }
182
- else {
183
- isBoundIncluded = true;
184
- }
185
- if (!__1.PositionUtils.isBeforeTokenPosition(position, candidate.tokenRange.positionStart, isBoundIncluded)) {
186
- if (bestOnOrBeforeNode === undefined ||
187
- candidate.tokenRange.tokenIndexStart > bestOnOrBeforeNode.tokenRange.tokenIndexStart) {
188
- bestOnOrBeforeNode = candidate;
194
+ let includeLowerBound = true;
195
+ let includeUpperBound = true;
196
+ if (language_1.AstUtils.isNodeKind(candidate, language_1.Ast.NodeKind.Constant)) {
197
+ if (ShiftRightConstantKinds.includes(candidate.constantKind)) {
198
+ includeLowerBound = false;
199
+ includeUpperBound = false;
200
+ }
201
+ else if (ShiftLeftConstantKinds.includes(candidate.constantKind)) {
202
+ includeLowerBound = false;
189
203
  }
190
204
  }
191
- // Check if after position.
192
- else if (bestAfter === undefined ||
193
- candidate.tokenRange.tokenIndexStart < bestAfter.tokenRange.tokenIndexStart) {
194
- bestAfter = candidate;
205
+ // If the candidate starts under the cursor position then it's safe to assume it's the best candidate,
206
+ // as each leaf node is guaranteed to be non-overlapping.
207
+ if (__1.PositionUtils.isInAst(position, candidate, includeLowerBound, includeUpperBound)) {
208
+ nodeOnPosition = candidate;
195
209
  }
196
- }
197
- // Might need to shift.
198
- if ((bestOnOrBeforeNode === null || bestOnOrBeforeNode === void 0 ? void 0 : bestOnOrBeforeNode.kind) === "Constant" /* Constant */) {
199
- const currentOnOrBefore = bestOnOrBeforeNode;
200
- // Requires a shift into an empty ArrayWrapper.
201
- if (DrilldownConstantKind.indexOf(bestOnOrBeforeNode.constantKind) !== -1 &&
202
- (bestAfter === null || bestAfter === void 0 ? void 0 : bestAfter.kind) === "Constant" /* Constant */ &&
203
- PQP.Language.ConstantUtils.isPairedWrapperConstantKinds(bestOnOrBeforeNode.constantKind, bestAfter.constantKind)) {
204
- const parent = parser_1.NodeIdMapUtils.assertUnboxParentAstChecked(nodeIdMapCollection, currentOnOrBefore.id, [
205
- "RecordExpression" /* RecordExpression */,
206
- "RecordLiteral" /* RecordLiteral */,
207
- "ListExpression" /* ListExpression */,
208
- "ListLiteral" /* ListLiteral */,
209
- "InvokeExpression" /* InvokeExpression */,
210
- ]);
211
- const arrayWrapper = parser_1.NodeIdMapUtils.assertUnboxArrayWrapperAst(nodeIdMapCollection, parent.id);
212
- shiftedRightNode = arrayWrapper;
213
- }
214
- // Requires a shift to the right.
215
- else if (ShiftRightConstantKinds.indexOf(currentOnOrBefore.constantKind) !== -1) {
216
- shiftedRightNode = bestAfter;
210
+ // Else if the candidate is before the cursor position
211
+ else if (__1.PositionUtils.isAfterAst(position, candidate, includeUpperBound)) {
212
+ // And we either haven't found a closestNodeOnOrBeforePosition yet, or if the candidate is better (more right) than the current closestNodeOnOrBeforePosition.
213
+ if (nodeClosestBeforePosition === undefined ||
214
+ nodeClosestBeforePosition.tokenRange.tokenIndexStart < candidate.tokenRange.tokenIndexStart) {
215
+ nodeClosestBeforePosition = candidate;
216
+ }
217
217
  }
218
- // No shifting.
219
- else {
220
- shiftedRightNode = undefined;
218
+ // Else the candidate must be after the cursor position.
219
+ // And we either haven't found a closestAfterPosition yet, or if the candidate is better (more left) than the current nodeClosestAfterPosition.
220
+ else if (nodeClosestAfterPosition === undefined ||
221
+ nodeClosestAfterPosition.tokenRange.tokenIndexStart > candidate.tokenRange.tokenIndexStart) {
222
+ nodeClosestAfterPosition = candidate;
221
223
  }
222
224
  }
223
- else {
224
- shiftedRightNode = undefined;
225
- }
226
225
  return {
227
- bestOnOrBeforeNode,
228
- shiftedRightNode,
226
+ nodeClosestBeforePosition,
227
+ nodeOnPosition,
228
+ nodeClosestAfterPosition,
229
229
  };
230
230
  }
231
- function findContext(nodeIdMapCollection, astNodeSearch) {
232
- if (astNodeSearch.bestOnOrBeforeNode === undefined) {
231
+ function findContext(nodeIdMapCollection, searchedLeafs) {
232
+ var _a, _b, _c, _d, _e;
233
+ const tokenIndexLowBound = (_d = (_b = (_a = searchedLeafs.nodeClosestAfterPosition) === null || _a === void 0 ? void 0 : _a.tokenRange.tokenIndexStart) !== null && _b !== void 0 ? _b : (_c = searchedLeafs.nodeOnPosition) === null || _c === void 0 ? void 0 : _c.tokenRange.tokenIndexStart) !== null && _d !== void 0 ? _d : (_e = searchedLeafs.nodeClosestBeforePosition) === null || _e === void 0 ? void 0 : _e.tokenRange.tokenIndexStart;
234
+ if (tokenIndexLowBound === undefined) {
233
235
  return undefined;
234
236
  }
235
- const tokenIndexLowBound = astNodeSearch.bestOnOrBeforeNode.tokenRange.tokenIndexStart;
236
- let current = undefined;
237
+ // Look for the deepest ParseContext that starts on or before the cursor.
238
+ // We can use searchedLeafs to generate a bound on tokenIndex.
239
+ // It's possible/likely that multiple ParseContexts exist with the same tokenIndex,
240
+ // so we pick the "deepest" one.
241
+ const depthCache = new Map();
242
+ let closestContextOnOrAfterPosition = undefined;
237
243
  for (const candidate of nodeIdMapCollection.contextNodeById.values()) {
238
- if (candidate.tokenStart) {
239
- if (candidate.tokenIndexStart < tokenIndexLowBound) {
240
- continue;
241
- }
242
- if (current === undefined || current.id < candidate.id) {
243
- current = candidate;
244
- }
244
+ if (candidate.tokenIndexStart < tokenIndexLowBound) {
245
+ continue;
246
+ }
247
+ if (closestContextOnOrAfterPosition === undefined ||
248
+ candidate.tokenIndexStart > closestContextOnOrAfterPosition.tokenIndexStart ||
249
+ findDepth(nodeIdMapCollection.parentIdById, candidate.id, depthCache) >
250
+ findDepth(nodeIdMapCollection.parentIdById, closestContextOnOrAfterPosition.id, depthCache)) {
251
+ closestContextOnOrAfterPosition = candidate;
245
252
  }
246
253
  }
247
- return current;
254
+ return closestContextOnOrAfterPosition;
255
+ }
256
+ function findDepth(parentIdById, nodeId, depthCache) {
257
+ const cachedDepth = depthCache.get(nodeId);
258
+ if (cachedDepth !== undefined) {
259
+ return cachedDepth;
260
+ }
261
+ const parentId = parentIdById.get(nodeId);
262
+ if (parentId === undefined) {
263
+ return 0;
264
+ }
265
+ const summedDepth = 1 + findDepth(parentIdById, parentId, depthCache);
266
+ depthCache.set(nodeId, summedDepth);
267
+ return summedDepth;
248
268
  }
249
269
  function findLeafIdentifier(nodeIdMapCollection, leafXorNode) {
250
- if (parser_1.XorNodeUtils.isContextXor(leafXorNode)) {
270
+ if (parser_1.XorNodeUtils.isContext(leafXorNode)) {
251
271
  return undefined;
252
272
  }
253
273
  const leaf = leafXorNode.node;
254
274
  let identifier;
255
275
  const parentId = nodeIdMapCollection.parentIdById.get(leaf.id);
256
- if (leaf.kind === "Identifier" /* Identifier */) {
276
+ if (leaf.kind === language_1.Ast.NodeKind.Identifier) {
257
277
  if (parentId === undefined) {
258
- return undefined;
259
- }
260
- const parent = parser_1.NodeIdMapUtils.unboxIfAst(nodeIdMapCollection, parentId);
261
- if ((parent === null || parent === void 0 ? void 0 : parent.kind) === "IdentifierPairedExpression" /* IdentifierPairedExpression */) {
262
278
  identifier = leaf;
263
279
  }
264
- else if ((parent === null || parent === void 0 ? void 0 : parent.kind) === "IdentifierExpression" /* IdentifierExpression */) {
265
- identifier = parent;
266
- }
267
280
  else {
268
- identifier = leaf;
281
+ const parent = parser_1.NodeIdMapUtils.ast(nodeIdMapCollection, parentId);
282
+ if ((parent === null || parent === void 0 ? void 0 : parent.kind) === language_1.Ast.NodeKind.IdentifierPairedExpression) {
283
+ identifier = leaf;
284
+ }
285
+ else if ((parent === null || parent === void 0 ? void 0 : parent.kind) === language_1.Ast.NodeKind.IdentifierExpression) {
286
+ identifier = parent;
287
+ }
288
+ else {
289
+ identifier = leaf;
290
+ }
269
291
  }
270
292
  }
271
- // If closestLeaf is '@', then check if it's part of an IdentifierExpression.
272
- else if (leaf.kind === "Constant" /* Constant */ && leaf.constantKind === "@" /* AtSign */) {
293
+ // If '@', then check if it's part of an IdentifierExpression.
294
+ else if (leaf.kind === language_1.Ast.NodeKind.Constant && leaf.constantKind === language_1.Constant.MiscConstant.AtSign) {
273
295
  if (parentId === undefined) {
274
296
  return undefined;
275
297
  }
276
- const parent = parser_1.NodeIdMapUtils.unboxIfAst(nodeIdMapCollection, parentId);
277
- if ((parent === null || parent === void 0 ? void 0 : parent.kind) === "IdentifierExpression" /* IdentifierExpression */) {
298
+ const parent = parser_1.NodeIdMapUtils.ast(nodeIdMapCollection, parentId);
299
+ if ((parent === null || parent === void 0 ? void 0 : parent.kind) === language_1.Ast.NodeKind.IdentifierExpression) {
278
300
  identifier = parent;
279
301
  }
280
302
  else {
281
303
  return undefined;
282
304
  }
283
305
  }
284
- else if (leaf.kind === "GeneralizedIdentifier" /* GeneralizedIdentifier */) {
306
+ else if (leaf.kind === language_1.Ast.NodeKind.GeneralizedIdentifier) {
285
307
  identifier = leaf;
286
308
  }
287
309
  else {
@@ -289,8 +311,8 @@ function findLeafIdentifier(nodeIdMapCollection, leafXorNode) {
289
311
  }
290
312
  let result;
291
313
  switch (identifier.kind) {
292
- case "Identifier" /* Identifier */:
293
- case "GeneralizedIdentifier" /* GeneralizedIdentifier */:
314
+ case language_1.Ast.NodeKind.Identifier:
315
+ case language_1.Ast.NodeKind.GeneralizedIdentifier:
294
316
  result = {
295
317
  node: identifier,
296
318
  isRecursive: false,
@@ -298,19 +320,31 @@ function findLeafIdentifier(nodeIdMapCollection, leafXorNode) {
298
320
  normalizedRecursiveLiteral: undefined,
299
321
  };
300
322
  break;
301
- case "IdentifierExpression" /* IdentifierExpression */: {
323
+ case language_1.Ast.NodeKind.IdentifierExpression: {
302
324
  const normalizedLiteral = language_1.TextUtils.normalizeIdentifier(identifier.identifier.literal);
303
325
  result = {
304
326
  node: identifier,
305
- isRecursive: Boolean(identifier.inclusiveConstant),
306
327
  normalizedLiteral,
307
- normalizedRecursiveLiteral: `@${normalizedLiteral}`,
328
+ normalizedRecursiveLiteral: identifier.inclusiveConstant ? `@${normalizedLiteral}` : undefined,
308
329
  };
309
330
  break;
310
331
  }
311
332
  default:
312
- throw PQP.Assert.isNever(identifier);
333
+ throw powerquery_parser_1.Assert.isNever(identifier);
313
334
  }
314
335
  return result;
315
336
  }
337
+ function isInKey(ancestry) {
338
+ if (ancestry.length < 2) {
339
+ return false;
340
+ }
341
+ const child = powerquery_parser_1.ArrayUtils.assertGet(ancestry, 0);
342
+ const parent = powerquery_parser_1.ArrayUtils.assertGet(ancestry, 1);
343
+ // Return true if we're in the key portion of a key-value pair.
344
+ return ([
345
+ language_1.Ast.NodeKind.GeneralizedIdentifierPairedAnyLiteral,
346
+ language_1.Ast.NodeKind.GeneralizedIdentifierPairedExpression,
347
+ language_1.Ast.NodeKind.IdentifierPairedExpression,
348
+ ].includes(parent.node.kind) && child.node.attributeIndex === 0);
349
+ }
316
350
  //# sourceMappingURL=activeNodeUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"activeNodeUtils.js","sourceRoot":"","sources":["../../../../src/powerquery-language-services/inspection/activeNode/activeNodeUtils.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAElC,oDAAoD;AACpD,sFAOmE;AACnE,0FAAuG;AAWvG,6BAAsC;AAEtC,gFAAgF;AAChF,8EAA8E;AAC9E,2DAA2D;AAC3D,kEAAkE;AAClE,EAAE;AACF,6GAA6G;AAC7G,iDAAiD;AACjD,EAAE;AACF,yDAAyD;AACzD,mEAAmE;AACnE,uGAAuG;AACvG,sEAAsE;AACtE,iHAAiH;AACjH,EAAE;AACF,2CAA2C;AAC3C,uDAAuD;AACvD,0GAA0G;AAC1G,SAAgB,UAAU,CAAC,mBAAyC,EAAE,QAAkB;IACpF,gHAAgH;IAChH,MAAM,SAAS,GAAkB,aAAa,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IAE9E,kFAAkF;IAClF,MAAM,WAAW,GAA8C,WAAW,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;IAE3G,IAAI,IAA0B,CAAC;IAC/B,IAAI,QAA4B,CAAC;IAEjC,0BAA0B;IAC1B,aAAa;IACb,YAAY;IACZ,aAAa;IACb,SAAS;IACT,IAAI,SAAS,CAAC,gBAAgB,KAAK,SAAS,EAAE;QAC1C,IAAI,GAAG,qBAAY,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACvD,QAAQ,oCAAkC,CAAC;KAC9C;SAAM,IAAI,SAAS,CAAC,kBAAkB,KAAK,SAAS,IAAI,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,kBAAkB,CAAC,EAAE;QAC3G,IAAI,GAAG,qBAAY,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACzD,QAAQ,4BAA8B,CAAC;KAC1C;SAAM,IAAI,WAAW,KAAK,SAAS,EAAE;QAClC,IAAI,GAAG,qBAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC5C,QAAQ,8BAAiC,CAAC;KAC7C;SAAM,IAAI,SAAS,CAAC,kBAAkB,KAAK,SAAS,EAAE;QACnD,IAAI,GAAG,qBAAY,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAEzD,QAAQ,GAAG,iBAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,kBAAkB,EAAE,KAAK,CAAC;YAC9E,CAAC;YACD,CAAC,4BAA6B,CAAC;KACtC;SAAM;QACH,OAAO,wBAAwB,CAAC,QAAQ,CAAC,CAAC;KAC7C;IAED,MAAM,gCAAgC,GAAsC,kBAAkB,CAC1F,mBAAmB,EACnB,IAAI,CACP,CAAC;IAEF,MAAM,gCAAgC,GAClC,gCAAgC;QAChC,iBAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,gCAAgC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;QAC/E,CAAC,CAAC,gCAAgC;QAClC,CAAC,CAAC,SAAS,CAAC;IAEpB,MAAM,QAAQ,GAA4B,sBAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE7G,OAAO;QACH,QAAQ;QACR,IAAI,+BAA2B;QAC/B,QAAQ;QACR,gCAAgC;QAChC,gCAAgC;QAChC,QAAQ;KACX,CAAC;AACN,CAAC;AAvDD,gCAuDC;AAED,SAAgB,wBAAwB,CAAC,QAAkB;IACvD,OAAO;QACH,IAAI,+CAAmC;QACvC,QAAQ;KACX,CAAC;AACN,CAAC;AALD,4DAKC;AAED,SAAgB,gBAAgB,CAAC,mBAAyC,EAAE,QAAkB;IAC1F,MAAM,KAAK,GAAgB,UAAU,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IACrE,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAE9B,OAAO,KAAK,CAAC;AACjB,CAAC;AALD,4CAKC;AAED,SAAgB,aAAa,CAAC,UAAsB;IAChD,OAAO,sBAAa,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC5D,CAAC;AAFD,sCAEC;AAED,SAAgB,sBAAsB,CAAC,KAAkB;IACrD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;QAC5B,MAAM,IAAI,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC;KACvE;AACL,CAAC;AAJD,wDAIC;AAED,SAAgB,kBAAkB,CAAC,KAAkB;IACjD,OAAO,KAAK,CAAC,IAAI,kCAA8B,CAAC;AACpD,CAAC;AAFD,gDAEC;AAED,SAAgB,iBAAiB,CAC7B,UAAsB,EACtB,QAAmB;IAEnB,OAAO,sBAAa,CAAC,iBAAiB,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC1E,CAAC;AALD,8CAKC;AAOD,MAAM,qBAAqB,GAA0B;;;;CAIpD,CAAC;AAEF,MAAM,uBAAuB,GAA0B;;;;;;;;IAQnD,GAAG,qBAAqB;CAC3B,CAAC;AAEF,SAAS,YAAY,CAAC,QAAkB,EAAE,OAAkB;IACxD,IAAI,CAAC,iBAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;QACvD,OAAO,KAAK,CAAC;KAChB;IAED,IAAI,OAAO,CAAC,IAAI,kCAA4B,IAAI,OAAO,CAAC,IAAI,wDAAuC,EAAE;QACjG,OAAO,IAAI,CAAC;KACf;SAAM,IAAI,OAAO,CAAC,IAAI,gDAAmC,IAAI,OAAO,CAAC,WAAW,4BAA4B,EAAE;QAC3G,OAAO,IAAI,CAAC;KACf;SAAM,IAAI,OAAO,CAAC,IAAI,8BAA0B,EAAE;QAC/C,QAAQ,OAAO,CAAC,YAAY,EAAE;YAC1B,mBAAiC;YACjC,uBAAmC;YACnC,uBAAmC;YACnC,yBAAoC;YACpC,mBAAiC;YACjC,mBAAiC;YACjC,mBAAiC;YACjC,6BAAsC;YACtC,2BAAqC;YACrC,qBAAkC;YAClC,uBAAmC;YACnC,iCAAwC;YACxC,uBAAmC;YACnC,qBAAkC;YAClC,uBAAmC;YACnC;gBACI,OAAO,IAAI,CAAC;YAEhB;gBACI,OAAO,KAAK,CAAC;SACpB;KACJ;SAAM;QACH,OAAO,KAAK,CAAC;KAChB;AACL,CAAC;AAED,SAAS,aAAa,CAAC,mBAAyC,EAAE,QAAkB;IAChF,MAAM,WAAW,GAAqC,mBAAmB,CAAC,WAAW,CAAC;IACtF,IAAI,kBAAyC,CAAC;IAC9C,IAAI,SAAgC,CAAC;IACrC,IAAI,gBAAuC,CAAC;IAE5C,QAAQ;IACR,gDAAgD;IAChD,8CAA8C;IAC9C,KAAK,MAAM,MAAM,IAAI,mBAAmB,CAAC,OAAO,EAAE;QAC9C,MAAM,SAAS,GAA0B,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEjE,IAAI,SAAS,KAAK,SAAS,EAAE;YACzB,SAAS;SACZ;QAED,IAAI,eAAwB,CAAC;QAE7B;QACI,WAAW;QACX,CAAC,SAAS,CAAC,IAAI,8BAA0B;YACrC,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,WAAW;YACX,CAAC,CAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,+BAA0B;gBAC/C,uBAAuB,CAAC,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAC9E;YACE,eAAe,GAAG,KAAK,CAAC;SAC3B;aAAM;YACH,eAAe,GAAG,IAAI,CAAC;SAC1B;QAED,IAAI,CAAC,iBAAa,CAAC,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,aAAa,EAAE,eAAe,CAAC,EAAE;YACrG,IACI,kBAAkB,KAAK,SAAS;gBAChC,SAAS,CAAC,UAAU,CAAC,eAAe,GAAG,kBAAkB,CAAC,UAAU,CAAC,eAAe,EACtF;gBACE,kBAAkB,GAAG,SAAS,CAAC;aAClC;SACJ;QACD,2BAA2B;aACtB,IACD,SAAS,KAAK,SAAS;YACvB,SAAS,CAAC,UAAU,CAAC,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC,eAAe,EAC7E;YACE,SAAS,GAAG,SAAS,CAAC;SACzB;KACJ;IAED,uBAAuB;IACvB,IAAI,CAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,+BAA0B,EAAE;QACpD,MAAM,iBAAiB,GAAkB,kBAAkB,CAAC;QAE5D,+CAA+C;QAC/C,IACI,qBAAqB,CAAC,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACrE,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,+BAA0B;YACzC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,4BAA4B,CACnD,kBAAkB,CAAC,YAAY,EAC/B,SAAS,CAAC,YAAY,CACzB,EACH;YACE,MAAM,MAAM,GAKiB,uBAAc,CAAC,2BAA2B,CAErE,mBAAmB,EAAE,iBAAiB,CAAC,EAAE,EAAE;;;;;;aAM5C,CAAC,CAAC;YAEH,MAAM,YAAY,GAAsB,uBAAc,CAAC,0BAA0B,CAC7E,mBAAmB,EACnB,MAAM,CAAC,EAAE,CACZ,CAAC;YAEF,gBAAgB,GAAG,YAAY,CAAC;SACnC;QACD,iCAAiC;aAC5B,IAAI,uBAAuB,CAAC,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;YAC7E,gBAAgB,GAAG,SAAS,CAAC;SAChC;QACD,eAAe;aACV;YACD,gBAAgB,GAAG,SAAS,CAAC;SAChC;KACJ;SAAM;QACH,gBAAgB,GAAG,SAAS,CAAC;KAChC;IAED,OAAO;QACH,kBAAkB;QAClB,gBAAgB;KACnB,CAAC;AACN,CAAC;AAED,SAAS,WAAW,CAChB,mBAAyC,EACzC,aAA4B;IAE5B,IAAI,aAAa,CAAC,kBAAkB,KAAK,SAAS,EAAE;QAChD,OAAO,SAAS,CAAC;KACpB;IAED,MAAM,kBAAkB,GAAW,aAAa,CAAC,kBAAkB,CAAC,UAAU,CAAC,eAAe,CAAC;IAC/F,IAAI,OAAO,GAA8C,SAAS,CAAC;IAEnE,KAAK,MAAM,SAAS,IAAI,mBAAmB,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE;QAClE,IAAI,SAAS,CAAC,UAAU,EAAE;YACtB,IAAI,SAAS,CAAC,eAAe,GAAG,kBAAkB,EAAE;gBAChD,SAAS;aACZ;YAED,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,EAAE;gBACpD,OAAO,GAAG,SAAS,CAAC;aACvB;SACJ;KACJ;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,kBAAkB,CACvB,mBAAyC,EACzC,WAAqB;IAErB,IAAI,qBAAY,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;QACxC,OAAO,SAAS,CAAC;KACpB;IAED,MAAM,IAAI,GAAc,WAAW,CAAC,IAAI,CAAC;IAEzC,IAAI,UAAiF,CAAC;IAEtF,MAAM,QAAQ,GAAuB,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEnF,IAAI,IAAI,CAAC,IAAI,kCAA4B,EAAE;QACvC,IAAI,QAAQ,KAAK,SAAS,EAAE;YACxB,OAAO,SAAS,CAAC;SACpB;QAED,MAAM,MAAM,GAA0B,uBAAc,CAAC,UAAU,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;QAE/F,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,mEAA4C,EAAE;YAC1D,UAAU,GAAG,IAAI,CAAC;SACrB;aAAM,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,uDAAsC,EAAE;YAC3D,UAAU,GAAG,MAAM,CAAC;SACvB;aAAM;YACH,UAAU,GAAG,IAAI,CAAC;SACrB;KACJ;IACD,6EAA6E;SACxE,IAAI,IAAI,CAAC,IAAI,8BAA0B,IAAI,IAAI,CAAC,YAAY,qBAAiC,EAAE;QAChG,IAAI,QAAQ,KAAK,SAAS,EAAE;YACxB,OAAO,SAAS,CAAC;SACpB;QAED,MAAM,MAAM,GAA0B,uBAAc,CAAC,UAAU,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;QAE/F,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,uDAAsC,EAAE;YACpD,UAAU,GAAG,MAAM,CAAC;SACvB;aAAM;YACH,OAAO,SAAS,CAAC;SACpB;KACJ;SAAM,IAAI,IAAI,CAAC,IAAI,wDAAuC,EAAE;QACzD,UAAU,GAAG,IAAI,CAAC;KACrB;SAAM;QACH,OAAO,SAAS,CAAC;KACpB;IAED,IAAI,MAA6B,CAAC;IAElC,QAAQ,UAAU,CAAC,IAAI,EAAE;QACrB,mCAA6B;QAC7B;YACI,MAAM,GAAG;gBACL,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,KAAK;gBAClB,iBAAiB,EAAE,oBAAS,CAAC,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC;gBACpE,0BAA0B,EAAE,SAAS;aACxC,CAAC;YAEF,MAAM;QAEV,sDAAsC,CAAC,CAAC;YACpC,MAAM,iBAAiB,GAAW,oBAAS,CAAC,mBAAmB,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAE/F,MAAM,GAAG;gBACL,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC;gBAClD,iBAAiB;gBACjB,0BAA0B,EAAE,IAAI,iBAAiB,EAAE;aACtD,CAAC;YAEF,MAAM;SACT;QAED;YACI,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;KAC5C;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"activeNodeUtils.js","sourceRoot":"","sources":["../../../../src/powerquery-language-services/inspection/activeNode/activeNodeUtils.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,4BAA4B;AAC5B,uCAAuC;AACvC,kCAAkC;;;AAElC,sFAQmE;AACnE,oEAA+E;AAC/E,0FAAiH;AAGjH,6CAOsB;AACtB,6BAAsC;AAEtC,SAAgB,UAAU,CAAC,mBAAyC,EAAE,QAAkB;IACpF,MAAM,WAAW,GAAkB,UAAU,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IAE7E,MAAM,EAAE,yBAAyB,EAAE,cAAc,EAAE,wBAAwB,EAAE,GAAkB,UAAU,CACrG,mBAAmB,EACnB,QAAQ,CACX,CAAC;IAEF,MAAM,+BAA+B,GAAmC,WAAW,CAC/E,mBAAmB,EACnB,WAAW,CACd,CAAC;IAEF,IAAI,IAA0B,CAAC;IAC/B,IAAI,QAAwC,CAAC;IAE7C,yBAAyB;IACzB,IACI,yBAAyB,KAAK,SAAS;QACvC,cAAc,KAAK,SAAS;QAC5B,wBAAwB,KAAK,SAAS,EACxC;QACE,OAAO,wBAAwB,CAAC,QAAQ,CAAC,CAAC;KAC7C;IAED,8BAA8B;IAE9B,uBAAuB;IACvB,UAAU;IACV,UAAU;SACL,IACD,yBAAyB,KAAK,SAAS;QACvC,cAAc,KAAK,SAAS;QAC5B,wBAAwB,KAAK,SAAS,EACxC;QACE,eAAe;QACf,UAAU;QACV,IAAI,+BAA+B,KAAK,SAAS,EAAE;YAC/C,IAAI,GAAG,qBAAY,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;YAChE,QAAQ,GAAG,+BAAkB,CAAC,WAAW,CAAC;SAC7C;QACD,kBAAkB;QAClB,UAAU;aACL;YACD,IAAI,GAAG,qBAAY,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;YACtD,QAAQ,GAAG,+BAAkB,CAAC,gBAAgB,CAAC;SAClD;KACJ;IAED,yBAAyB;IACzB,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;SACJ,IACD,yBAAyB,KAAK,SAAS;QACvC,cAAc,KAAK,SAAS;QAC5B,wBAAwB,KAAK,SAAS,EACxC;QACE,0BAA0B;QAC1B,IAAI,GAAG,qBAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC3C,QAAQ,GAAG,+BAAkB,CAAC,OAAO,CAAC;KACzC;IAED,wBAAwB;IACxB,UAAU;IACV,QAAQ;SACH,IACD,yBAAyB,KAAK,SAAS;QACvC,cAAc,KAAK,SAAS;QAC5B,wBAAwB,KAAK,SAAS,EACxC;QACE,0BAA0B;QAC1B,OAAO,wBAAwB,CAAC,QAAQ,CAAC,CAAC;KAC7C;IAED,2BAA2B;IAE3B,kCAAkC;IAClC,SAAS;IACT,aAAa;IACb,aAAa;IACb,aAAa;SACR,IACD,yBAAyB,KAAK,SAAS;QACvC,cAAc,KAAK,SAAS;QAC5B,wBAAwB,IAAI,SAAS,EACvC;QACE,0BAA0B;QAC1B,IAAI,GAAG,qBAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC3C,QAAQ,GAAG,+BAAkB,CAAC,OAAO,CAAC;KACzC;IAED,iCAAiC;SAC5B,IACD,yBAAyB,KAAK,SAAS;QACvC,cAAc,KAAK,SAAS;QAC5B,wBAAwB,KAAK,SAAS,EACxC;QACE,IACI,mBAAQ,CAAC,UAAU,CAAgB,yBAAyB,EAAE,cAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACpF,uBAAuB,CAAC,QAAQ,CAAC,yBAAyB,CAAC,YAAY,CAAC,EAC1E;YACE,IAAI,GAAG,qBAAY,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;YACrD,QAAQ,GAAG,+BAAkB,CAAC,eAAe,CAAC;SACjD;aAAM;YACH,IAAI,GAAG,qBAAY,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;YACtD,QAAQ,GAAG,+BAAkB,CAAC,gBAAgB,CAAC;SAClD;KACJ;IAED,mCAAmC;IACnC,aAAa;SACR,IACD,yBAAyB,KAAK,SAAS;QACvC,cAAc,KAAK,SAAS;QAC5B,wBAAwB,KAAK,SAAS,EACxC;QACE,IAAI,GAAG,qBAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC3C,QAAQ,GAAG,+BAAkB,CAAC,OAAO,CAAC;KACzC;IAED,0BAA0B;SACrB,IACD,yBAAyB,KAAK,SAAS;QACvC,cAAc,KAAK,SAAS;QAC5B,wBAAwB,KAAK,SAAS,EACxC;QACE,IAAI,GAAG,qBAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC3C,QAAQ,GAAG,+BAAkB,CAAC,OAAO,CAAC;KACzC;IAED,oDAAoD;SAC/C;QACD,MAAM,IAAI,+BAAW,CAAC,cAAc,CAAC,8BAA8B,CAAC,CAAC;KACxE;IAED,MAAM,gCAAgC,GAAsC,kBAAkB,CAC1F,mBAAmB,EACnB,IAAI,CACP,CAAC;IAEF,MAAM,gCAAgC,GAClC,gCAAgC;QAChC,iBAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,gCAAgC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;QAC/E,CAAC,CAAC,gCAAgC;QAClC,CAAC,CAAC,SAAS,CAAC;IAEpB,MAAM,QAAQ,GAA4B,sBAAa,CAAC,cAAc,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE1G,OAAO;QACH,IAAI,EAAE,2BAAc,CAAC,UAAU;QAC/B,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC;QAC1B,gCAAgC;QAChC,gCAAgC;KACnC,CAAC;AACN,CAAC;AA/JD,gCA+JC;AAED,SAAgB,wBAAwB,CAAC,QAAkB;IACvD,OAAO;QACH,IAAI,EAAE,2BAAc,CAAC,kBAAkB;QACvC,QAAQ;KACX,CAAC;AACN,CAAC;AALD,4DAKC;AAED,SAAgB,gBAAgB,CAAC,mBAAyC,EAAE,QAAkB;IAC1F,MAAM,KAAK,GAAgB,UAAU,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IACrE,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAE9B,OAAO,KAAK,CAAC;AACjB,CAAC;AALD,4CAKC;AAED,SAAgB,aAAa,CAAC,UAAsB;IAChD,OAAO,sBAAa,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAFD,sCAEC;AAED,SAAgB,sBAAsB,CAAC,KAAkB;IACrD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;QAC5B,MAAM,IAAI,+BAAW,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC;KACnE;AACL,CAAC;AAJD,wDAIC;AAED,SAAgB,kBAAkB,CAAC,KAAkB;IACjD,OAAO,KAAK,CAAC,IAAI,KAAK,2BAAc,CAAC,UAAU,CAAC;AACpD,CAAC;AAFD,gDAEC;AAED,SAAgB,YAAY,CAAsB,UAAsB,EAAE,QAAmB;IACzF,OAAO,sBAAa,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACrE,CAAC;AAFD,oCAEC;AAQD,MAAM,sBAAsB,GAAsC;IAC9D,mBAAQ,CAAC,eAAe,CAAC,UAAU;IACnC,mBAAQ,CAAC,eAAe,CAAC,YAAY;IACrC,mBAAQ,CAAC,eAAe,CAAC,gBAAgB;CAC5C,CAAC;AAEF,MAAM,uBAAuB,GAAsC;IAC/D,GAAG,mBAAQ,CAAC,wBAAwB;IACpC,mBAAQ,CAAC,YAAY,CAAC,SAAS;IAC/B,mBAAQ,CAAC,YAAY,CAAC,KAAK;IAC3B,mBAAQ,CAAC,YAAY,CAAC,MAAM;IAC5B,mBAAQ,CAAC,YAAY,CAAC,KAAK;IAC3B,mBAAQ,CAAC,YAAY,CAAC,QAAQ;IAC9B,mBAAQ,CAAC,YAAY,CAAC,sBAAsB;IAC5C,mBAAQ,CAAC,YAAY,CAAC,YAAY;IAClC,mBAAQ,CAAC,YAAY,CAAC,SAAS;IAC/B,mBAAQ,CAAC,eAAe,CAAC,SAAS;IAClC,mBAAQ,CAAC,eAAe,CAAC,WAAW;IACpC,mBAAQ,CAAC,eAAe,CAAC,eAAe;CAC3C,CAAC;AAEF,wGAAwG;AACxG,SAAS,UAAU,CAAC,mBAAyC,EAAE,QAAkB;IAC7E,MAAM,WAAW,GAA0B,mBAAmB,CAAC,WAAW,CAAC;IAE3E,IAAI,yBAAgD,CAAC;IACrD,IAAI,cAAqC,CAAC;IAC1C,IAAI,wBAA+C,CAAC;IAEpD,2DAA2D;IAC3D,KAAK,MAAM,MAAM,IAAI,mBAAmB,CAAC,OAAO,EAAE;QAC9C,MAAM,SAAS,GAA0B,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEjE,0BAAM,CAAC,SAAS,CAAC,SAAS,EAAE,4DAA4D,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACtG,mBAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAEjC,0CAA0C;QAC1C,IAAI,SAAS,KAAK,SAAS,EAAE;YACzB,SAAS;SACZ;QAED,IAAI,iBAAiB,GAAY,IAAI,CAAC;QACtC,IAAI,iBAAiB,GAAY,IAAI,CAAC;QAEtC,IAAI,mBAAQ,CAAC,UAAU,CAAgB,SAAS,EAAE,cAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YACtE,IAAI,uBAAuB,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE;gBAC1D,iBAAiB,GAAG,KAAK,CAAC;gBAC1B,iBAAiB,GAAG,KAAK,CAAC;aAC7B;iBAAM,IAAI,sBAAsB,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE;gBAChE,iBAAiB,GAAG,KAAK,CAAC;aAC7B;SACJ;QAED,sGAAsG;QACtG,yDAAyD;QACzD,IAAI,iBAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,EAAE;YAClF,cAAc,GAAG,SAAS,CAAC;SAC9B;QACD,sDAAsD;aACjD,IAAI,iBAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,iBAAiB,CAAC,EAAE;YACvE,8JAA8J;YAC9J,IACI,yBAAyB,KAAK,SAAS;gBACvC,yBAAyB,CAAC,UAAU,CAAC,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC,eAAe,EAC7F;gBACE,yBAAyB,GAAG,SAAS,CAAC;aACzC;SACJ;QACD,wDAAwD;QACxD,+IAA+I;aAC1I,IACD,wBAAwB,KAAK,SAAS;YACtC,wBAAwB,CAAC,UAAU,CAAC,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC,eAAe,EAC5F;YACE,wBAAwB,GAAG,SAAS,CAAC;SACxC;KACJ;IAED,OAAO;QACH,yBAAyB;QACzB,cAAc;QACd,wBAAwB;KAC3B,CAAC;AACN,CAAC;AAED,SAAS,WAAW,CAChB,mBAAyC,EACzC,aAA4B;;IAE5B,MAAM,kBAAkB,GACpB,MAAA,MAAA,MAAA,aAAa,CAAC,wBAAwB,0CAAE,UAAU,CAAC,eAAe,mCAClE,MAAA,aAAa,CAAC,cAAc,0CAAE,UAAU,CAAC,eAAe,mCACxD,MAAA,aAAa,CAAC,yBAAyB,0CAAE,UAAU,CAAC,eAAe,CAAC;IAExE,IAAI,kBAAkB,KAAK,SAAS,EAAE;QAClC,OAAO,SAAS,CAAC;KACpB;IAED,yEAAyE;IACzE,8DAA8D;IAC9D,mFAAmF;IACnF,gCAAgC;IAChC,MAAM,UAAU,GAAwB,IAAI,GAAG,EAAE,CAAC;IAClD,IAAI,+BAA+B,GAAmC,SAAS,CAAC;IAEhF,KAAK,MAAM,SAAS,IAAI,mBAAmB,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE;QAClE,IAAI,SAAS,CAAC,eAAe,GAAG,kBAAkB,EAAE;YAChD,SAAS;SACZ;QAED,IACI,+BAA+B,KAAK,SAAS;YAC7C,SAAS,CAAC,eAAe,GAAG,+BAA+B,CAAC,eAAe;YAC3E,SAAS,CAAC,mBAAmB,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC;gBACjE,SAAS,CAAC,mBAAmB,CAAC,YAAY,EAAE,+BAA+B,CAAC,EAAE,EAAE,UAAU,CAAC,EACjG;YACE,+BAA+B,GAAG,SAAS,CAAC;SAC/C;KACJ;IAED,OAAO,+BAA+B,CAAC;AAC3C,CAAC;AAED,SAAS,SAAS,CAAC,YAAoC,EAAE,MAAc,EAAE,UAA+B;IACpG,MAAM,WAAW,GAAuB,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE/D,IAAI,WAAW,KAAK,SAAS,EAAE;QAC3B,OAAO,WAAW,CAAC;KACtB;IAED,MAAM,QAAQ,GAAuB,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE9D,IAAI,QAAQ,KAAK,SAAS,EAAE;QACxB,OAAO,CAAC,CAAC;KACZ;IAED,MAAM,WAAW,GAAW,CAAC,GAAG,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9E,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAEpC,OAAO,WAAW,CAAC;AACvB,CAAC;AAED,SAAS,kBAAkB,CACvB,mBAAyC,EACzC,WAAqB;IAErB,IAAI,qBAAY,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;QACrC,OAAO,SAAS,CAAC;KACpB;IAED,MAAM,IAAI,GAAc,WAAW,CAAC,IAAI,CAAC;IAEzC,IAAI,UAAiF,CAAC;IAEtF,MAAM,QAAQ,GAAuB,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEnF,IAAI,IAAI,CAAC,IAAI,KAAK,cAAG,CAAC,QAAQ,CAAC,UAAU,EAAE;QACvC,IAAI,QAAQ,KAAK,SAAS,EAAE;YACxB,UAAU,GAAG,IAAI,CAAC;SACrB;aAAM;YACH,MAAM,MAAM,GAA0B,uBAAc,CAAC,GAAG,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;YAExF,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,MAAK,cAAG,CAAC,QAAQ,CAAC,0BAA0B,EAAE;gBAC1D,UAAU,GAAG,IAAI,CAAC;aACrB;iBAAM,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,MAAK,cAAG,CAAC,QAAQ,CAAC,oBAAoB,EAAE;gBAC3D,UAAU,GAAG,MAAM,CAAC;aACvB;iBAAM;gBACH,UAAU,GAAG,IAAI,CAAC;aACrB;SACJ;KACJ;IACD,8DAA8D;SACzD,IAAI,IAAI,CAAC,IAAI,KAAK,cAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,mBAAQ,CAAC,YAAY,CAAC,MAAM,EAAE;QAChG,IAAI,QAAQ,KAAK,SAAS,EAAE;YACxB,OAAO,SAAS,CAAC;SACpB;QAED,MAAM,MAAM,GAA0B,uBAAc,CAAC,GAAG,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;QAExF,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,MAAK,cAAG,CAAC,QAAQ,CAAC,oBAAoB,EAAE;YACpD,UAAU,GAAG,MAAM,CAAC;SACvB;aAAM;YACH,OAAO,SAAS,CAAC;SACpB;KACJ;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,cAAG,CAAC,QAAQ,CAAC,qBAAqB,EAAE;QACzD,UAAU,GAAG,IAAI,CAAC;KACrB;SAAM;QACH,OAAO,SAAS,CAAC;KACpB;IAED,IAAI,MAA6B,CAAC;IAElC,QAAQ,UAAU,CAAC,IAAI,EAAE;QACrB,KAAK,cAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC7B,KAAK,cAAG,CAAC,QAAQ,CAAC,qBAAqB;YACnC,MAAM,GAAG;gBACL,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,KAAK;gBAClB,iBAAiB,EAAE,oBAAS,CAAC,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC;gBACpE,0BAA0B,EAAE,SAAS;aACxC,CAAC;YAEF,MAAM;QAEV,KAAK,cAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YACpC,MAAM,iBAAiB,GAAW,oBAAS,CAAC,mBAAmB,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAE/F,MAAM,GAAG;gBACL,IAAI,EAAE,UAAU;gBAChB,iBAAiB;gBACjB,0BAA0B,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC,CAAC,SAAS;aACjG,CAAC;YAEF,MAAM;SACT;QAED;YACI,MAAM,0BAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;KACxC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,OAAO,CAAC,QAAiC;IAC9C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QACrB,OAAO,KAAK,CAAC;KAChB;IAED,MAAM,KAAK,GAAa,8BAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAa,8BAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAE3D,+DAA+D;IAC/D,OAAO,CACH;QACI,cAAG,CAAC,QAAQ,CAAC,qCAAqC;QAClD,cAAG,CAAC,QAAQ,CAAC,qCAAqC;QAClD,cAAG,CAAC,QAAQ,CAAC,0BAA0B;KAC1C,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,CAClE,CAAC;AACN,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import * as PQP from "@microsoft/powerquery-parser";
2
- import { TActiveNode } from "../activeNode";
3
- import { TriedAutocompleteFieldAccess } from "./commonTypes";
2
+ import { NodeIdMap } from "@microsoft/powerquery-parser/lib/powerquery-parser/parser";
3
+ import { ActiveNode, TActiveNode } from "../activeNode";
4
+ import { InspectedFieldAccess, TriedAutocompleteFieldAccess } from "./commonTypes";
4
5
  import { InspectionSettings } from "../../inspectionSettings";
5
6
  import { TypeCache } from "../typeCache";
7
+ export declare function inspectFieldAccess(lexerSnapshot: PQP.Lexer.LexerSnapshot, nodeIdMapCollection: NodeIdMap.Collection, activeNode: ActiveNode): InspectedFieldAccess | undefined;
6
8
  export declare function tryAutocompleteFieldAccess(settings: InspectionSettings, parseState: PQP.Parser.ParseState, activeNode: TActiveNode, typeCache: TypeCache): Promise<TriedAutocompleteFieldAccess>;