@microsoft/powerquery-language-services 0.6.11 → 0.9.2

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 (206) 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 +210 -169
  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 +7 -7
  11. package/lib/powerquery-language-services/documentSymbols.js.map +1 -1
  12. package/lib/powerquery-language-services/externalType/externalType.js.map +1 -0
  13. package/lib/powerquery-language-services/externalType/externalTypeUtils.d.ts +5 -0
  14. package/lib/powerquery-language-services/externalType/externalTypeUtils.js +33 -0
  15. package/lib/powerquery-language-services/externalType/externalTypeUtils.js.map +1 -0
  16. package/lib/powerquery-language-services/externalType/index.js.map +1 -0
  17. package/lib/powerquery-language-services/index.d.ts +3 -1
  18. package/lib/powerquery-language-services/index.js +5 -3
  19. package/lib/powerquery-language-services/index.js.map +1 -1
  20. package/lib/powerquery-language-services/inspection/activeNode/activeNode.d.ts +5 -6
  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 +212 -179
  25. package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js.map +1 -1
  26. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js +6 -6
  27. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js.map +1 -1
  28. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.d.ts +4 -5
  29. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js +10 -20
  30. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js.map +1 -1
  31. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.d.ts +2 -1
  32. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js +22 -23
  33. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js.map +1 -1
  34. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js +3 -3
  35. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js.map +1 -1
  36. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js +1 -1
  37. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js.map +1 -1
  38. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js +1 -1
  39. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js.map +1 -1
  40. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js +5 -5
  41. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js.map +1 -1
  42. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js +3 -3
  43. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js.map +1 -1
  44. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js +5 -7
  45. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js.map +1 -1
  46. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.d.ts +1 -1
  47. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.js +1 -1
  48. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.js.map +1 -1
  49. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.js +1 -1
  50. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.js.map +1 -1
  51. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/commonTypes.d.ts +1 -1
  52. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.d.ts +2 -1
  53. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js +14 -14
  54. package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js.map +1 -1
  55. package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.d.ts +5 -3
  56. package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js +302 -52
  57. package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js.map +1 -1
  58. package/lib/powerquery-language-services/inspection/autocomplete/commonTypes.d.ts +0 -3
  59. package/lib/powerquery-language-services/inspection/autocomplete/task.js +3 -3
  60. package/lib/powerquery-language-services/inspection/autocomplete/task.js.map +1 -1
  61. package/lib/powerquery-language-services/inspection/autocomplete/trailingToken.d.ts +8 -0
  62. package/lib/powerquery-language-services/inspection/autocomplete/trailingToken.js +5 -0
  63. package/lib/powerquery-language-services/inspection/autocomplete/trailingToken.js.map +1 -0
  64. package/lib/powerquery-language-services/inspection/autocomplete/{common.d.ts → trailingTokenUtils.d.ts} +1 -1
  65. package/lib/powerquery-language-services/inspection/autocomplete/trailingTokenUtils.js +19 -0
  66. package/lib/powerquery-language-services/inspection/autocomplete/trailingTokenUtils.js.map +1 -0
  67. package/lib/powerquery-language-services/inspection/deferenceIdentifier.js +7 -7
  68. package/lib/powerquery-language-services/inspection/deferenceIdentifier.js.map +1 -1
  69. package/lib/powerquery-language-services/inspection/expectedType.js +2 -2
  70. package/lib/powerquery-language-services/inspection/expectedType.js.map +1 -1
  71. package/lib/powerquery-language-services/inspection/index.d.ts +0 -1
  72. package/lib/powerquery-language-services/inspection/index.js +0 -1
  73. package/lib/powerquery-language-services/inspection/index.js.map +1 -1
  74. package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js +8 -8
  75. package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js.map +1 -1
  76. package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js +5 -5
  77. package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js.map +1 -1
  78. package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js +5 -5
  79. package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js.map +1 -1
  80. package/lib/powerquery-language-services/inspection/scope/scopeInspection.js +4 -4
  81. package/lib/powerquery-language-services/inspection/scope/scopeInspection.js.map +1 -1
  82. package/lib/powerquery-language-services/inspection/task.js +8 -8
  83. package/lib/powerquery-language-services/inspection/task.js.map +1 -1
  84. package/lib/powerquery-language-services/inspection/type/inspectType/common.d.ts +1 -1
  85. package/lib/powerquery-language-services/inspection/type/inspectType/common.js +9 -9
  86. package/lib/powerquery-language-services/inspection/type/inspectType/common.js.map +1 -1
  87. package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js +2 -2
  88. package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js.map +1 -1
  89. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeConstant.js +18 -18
  90. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeConstant.js.map +1 -1
  91. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js +3 -3
  92. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js.map +1 -1
  93. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js +5 -5
  94. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js.map +1 -1
  95. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js +2 -2
  96. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js.map +1 -1
  97. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js +5 -5
  98. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js.map +1 -1
  99. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js +5 -5
  100. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js.map +1 -1
  101. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js +3 -3
  102. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js.map +1 -1
  103. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js +3 -3
  104. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js.map +1 -1
  105. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js +7 -7
  106. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js.map +1 -1
  107. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js +3 -3
  108. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js.map +1 -1
  109. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js +3 -3
  110. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js.map +1 -1
  111. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.js +4 -4
  112. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.js.map +1 -1
  113. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js +7 -7
  114. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js.map +1 -1
  115. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js +2 -2
  116. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js.map +1 -1
  117. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js +3 -3
  118. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js.map +1 -1
  119. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js +5 -5
  120. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js.map +1 -1
  121. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js +7 -4
  122. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js.map +1 -1
  123. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js +3 -3
  124. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js.map +1 -1
  125. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js +4 -4
  126. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js.map +1 -1
  127. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js +2 -2
  128. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js.map +1 -1
  129. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js +2 -2
  130. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js.map +1 -1
  131. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js +3 -3
  132. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js.map +1 -1
  133. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js +8 -8
  134. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js.map +1 -1
  135. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js +46 -46
  136. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js.map +1 -1
  137. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js +3 -3
  138. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js.map +1 -1
  139. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js +5 -5
  140. package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js.map +1 -1
  141. package/lib/powerquery-language-services/inspection/type/task.js +3 -3
  142. package/lib/powerquery-language-services/inspection/type/task.js.map +1 -1
  143. package/lib/powerquery-language-services/inspection/typeCache/typeCacheUtils.d.ts +1 -1
  144. package/lib/powerquery-language-services/inspection/typeCache/typeCacheUtils.js +3 -3
  145. package/lib/powerquery-language-services/inspection/typeCache/typeCacheUtils.js.map +1 -1
  146. package/lib/powerquery-language-services/inspectionUtils.d.ts +3 -3
  147. package/lib/powerquery-language-services/inspectionUtils.js +29 -31
  148. package/lib/powerquery-language-services/inspectionUtils.js.map +1 -1
  149. package/lib/powerquery-language-services/library/index.d.ts +2 -0
  150. package/lib/powerquery-language-services/library/index.js +3 -1
  151. package/lib/powerquery-language-services/library/index.js.map +1 -1
  152. package/lib/powerquery-language-services/library/library.d.ts +1 -1
  153. package/lib/powerquery-language-services/library/library.js +2 -2
  154. package/lib/powerquery-language-services/library/library.js.map +1 -1
  155. package/lib/powerquery-language-services/library/librarySymbol.d.ts +33 -0
  156. package/lib/powerquery-language-services/library/librarySymbol.js +5 -0
  157. package/lib/powerquery-language-services/library/librarySymbol.js.map +1 -0
  158. package/lib/powerquery-language-services/library/librarySymbolUtils.d.ts +15 -0
  159. package/lib/powerquery-language-services/library/librarySymbolUtils.js +237 -0
  160. package/lib/powerquery-language-services/library/librarySymbolUtils.js.map +1 -0
  161. package/lib/powerquery-language-services/library/libraryUtils.d.ts +7 -5
  162. package/lib/powerquery-language-services/library/libraryUtils.js +14 -10
  163. package/lib/powerquery-language-services/library/libraryUtils.js.map +1 -1
  164. package/lib/powerquery-language-services/positionUtils.d.ts +8 -4
  165. package/lib/powerquery-language-services/positionUtils.js +40 -13
  166. package/lib/powerquery-language-services/positionUtils.js.map +1 -1
  167. package/lib/powerquery-language-services/providers/libraryProvider.d.ts +2 -2
  168. package/lib/powerquery-language-services/providers/libraryProvider.js +2 -2
  169. package/lib/powerquery-language-services/providers/libraryProvider.js.map +1 -1
  170. package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js +1 -1
  171. package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js.map +1 -1
  172. package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js +3 -3
  173. package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js.map +1 -1
  174. package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js +12 -12
  175. package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js.map +1 -1
  176. package/lib/powerquery-language-services/providers/nullSymbolProvider.d.ts +2 -2
  177. package/lib/powerquery-language-services/providers/nullSymbolProvider.js +7 -7
  178. package/lib/powerquery-language-services/providers/nullSymbolProvider.js.map +1 -1
  179. package/lib/powerquery-language-services/tokenPositionComparison.d.ts +5 -0
  180. package/lib/powerquery-language-services/tokenPositionComparison.js +13 -0
  181. package/lib/powerquery-language-services/tokenPositionComparison.js.map +1 -0
  182. package/lib/powerquery-language-services/traceUtils.d.ts +2 -2
  183. package/lib/powerquery-language-services/traceUtils.js +5 -5
  184. package/lib/powerquery-language-services/traceUtils.js.map +1 -1
  185. package/lib/powerquery-language-services/validate/validate.js +4 -4
  186. package/lib/powerquery-language-services/validate/validate.js.map +1 -1
  187. package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js +3 -3
  188. package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js.map +1 -1
  189. package/lib/powerquery-language-services/validate/validateFunctionExpression.js +2 -2
  190. package/lib/powerquery-language-services/validate/validateFunctionExpression.js.map +1 -1
  191. package/lib/powerquery-language-services/validate/validateInvokeExpression.js +2 -2
  192. package/lib/powerquery-language-services/validate/validateInvokeExpression.js.map +1 -1
  193. package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js +1 -1
  194. package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js.map +1 -1
  195. package/package.json +9 -7
  196. package/lib/powerquery-language-services/inspection/autocomplete/common.js +0 -11
  197. package/lib/powerquery-language-services/inspection/autocomplete/common.js.map +0 -1
  198. package/lib/powerquery-language-services/inspection/externalType/externalType.js.map +0 -1
  199. package/lib/powerquery-language-services/inspection/externalType/externalTypeUtils.d.ts +0 -4
  200. package/lib/powerquery-language-services/inspection/externalType/externalTypeUtils.js +0 -21
  201. package/lib/powerquery-language-services/inspection/externalType/externalTypeUtils.js.map +0 -1
  202. package/lib/powerquery-language-services/inspection/externalType/index.js.map +0 -1
  203. /package/lib/powerquery-language-services/{inspection/externalType → externalType}/externalType.d.ts +0 -0
  204. /package/lib/powerquery-language-services/{inspection/externalType → externalType}/externalType.js +0 -0
  205. /package/lib/powerquery-language-services/{inspection/externalType → externalType}/index.d.ts +0 -0
  206. /package/lib/powerquery-language-services/{inspection/externalType → externalType}/index.js +0 -0
@@ -20,20 +20,22 @@ const inspection_1 = require("../inspection");
20
20
  const __1 = require("..");
21
21
  const scopeUtils_1 = require("../inspection/scope/scopeUtils");
22
22
  const providers_1 = require("../providers");
23
- // Implementation of Analysis, subclass it as needed.
24
- // Does not implement `dispose`.
23
+ // Implementation of Analysis.
24
+ // All public methods should:
25
+ // - use ensureResultAsync to ensure a Result, allowing all protected methods to safetly throw.
26
+ // - take an optional cancellation token.
25
27
  class AnalysisBase {
26
28
  constructor(textDocument, analysisSettings) {
27
29
  this.textDocument = textDocument;
28
- this.analysisSettings = analysisSettings;
29
- // Shared across actions
30
- this.parseError = undefined;
31
- this.parseState = undefined;
32
- this.triedLexParse = undefined;
30
+ // Local type cache that is shared across provider actions.
33
31
  this.typeCache = {
34
32
  scopeById: new Map(),
35
33
  typeById: new Map(),
36
34
  };
35
+ this.initialCorrelationId = analysisSettings.initialCorrelationId;
36
+ this.inspectionSettings = analysisSettings.inspectionSettings;
37
+ this.locale = analysisSettings.inspectionSettings.locale;
38
+ this.traceManager = analysisSettings.traceManager;
37
39
  this.languageAutocompleteItemProvider = analysisSettings.languageAutocompleteItemProviderFactory
38
40
  ? analysisSettings.languageAutocompleteItemProviderFactory(analysisSettings.inspectionSettings.locale)
39
41
  : new providers_1.LanguageAutocompleteItemProvider(analysisSettings.inspectionSettings.locale);
@@ -43,12 +45,12 @@ class AnalysisBase {
43
45
  this.localDocumentProvider = analysisSettings.localDocumentProviderFactory
44
46
  ? analysisSettings.localDocumentProviderFactory(textDocument.uri.toString(), this.typeCache, analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale)
45
47
  : new providers_1.LocalDocumentProvider(this.textDocument.uri.toString(), this.typeCache, analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale);
46
- void this.initializeState();
48
+ this.triedLexParse = this.tryLexParse();
47
49
  }
48
- getAutocompleteItems(position, cancellationToken) {
50
+ getAutocompleteItems(position, cancellationTokenOverride) {
49
51
  return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
50
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getAutocompleteItems.name, this.analysisSettings.initialCorrelationId);
51
- const context = yield this.getAutocompleteItemProviderContext(position, trace.id, cancellationToken);
52
+ const trace = this.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getAutocompleteItems.name, this.initialCorrelationId);
53
+ const context = yield this.getAutocompleteItemProviderContext(position, trace.id, cancellationTokenOverride);
52
54
  if (context === undefined) {
53
55
  trace.exit();
54
56
  return undefined;
@@ -70,63 +72,66 @@ class AnalysisBase {
70
72
  }
71
73
  trace.exit();
72
74
  return autocompleteItems;
73
- }), this.analysisSettings.inspectionSettings.locale);
75
+ }), this.locale);
74
76
  }
75
- getDefinition(position, cancellationToken) {
77
+ getDefinition(position, cancellationTokenOverride) {
76
78
  return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
77
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getDefinition.name, this.analysisSettings.initialCorrelationId);
78
- const identifierContext = yield this.getDefinitionProviderContext(position, trace.id, cancellationToken);
79
+ const trace = this.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getDefinition.name, this.initialCorrelationId);
80
+ const identifierContext = yield this.getDefinitionProviderContext(position, trace.id, cancellationTokenOverride);
79
81
  if (!identifierContext) {
80
82
  trace.exit();
81
83
  return undefined;
82
84
  }
83
85
  const result = yield this.localDocumentProvider.getDefinition(identifierContext);
84
- trace.exit();
85
86
  if (powerquery_parser_1.ResultUtils.isError(result)) {
87
+ trace.exit({ ["IsThrowing" /* IsThrowing */]: true });
86
88
  throw result.error;
87
89
  }
90
+ trace.exit();
88
91
  return result.value;
89
- }), this.analysisSettings.inspectionSettings.locale);
92
+ }), this.locale);
90
93
  }
91
- getDocumentSymbols(cancellationToken) {
94
+ getDocumentSymbols(cancellationTokenOverride) {
92
95
  return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
93
- const parseState = yield this.getParseState();
96
+ const parseState = yield this.getParseStateOkOrThrow(undefined);
94
97
  if (parseState === undefined) {
95
98
  return undefined;
96
99
  }
97
100
  const nodeIdMapCollection = parseState.contextState.nodeIdMapCollection;
98
101
  const currentSymbols = [];
99
102
  const parentSymbolById = new Map();
103
+ const cancellationToken = cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken;
100
104
  addIdentifierPairedExpressionSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken);
101
105
  addRecordSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken);
102
106
  return currentSymbols;
103
- }), this.analysisSettings.inspectionSettings.locale);
107
+ }), this.locale);
104
108
  }
105
- getFoldingRanges(cancellationToken) {
109
+ getFoldingRanges(cancellationTokenOverride) {
106
110
  return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
107
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getFoldingRanges.name, this.analysisSettings.initialCorrelationId);
108
- const parseState = yield this.getParseState();
111
+ const trace = this.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getFoldingRanges.name, this.initialCorrelationId);
112
+ const parseState = yield this.getParseStateOkOrThrow(trace);
109
113
  if (parseState === undefined) {
110
114
  trace.exit();
111
115
  return undefined;
112
116
  }
113
117
  const result = yield this.localDocumentProvider.getFoldingRanges({
114
- traceManager: this.analysisSettings.traceManager,
118
+ traceManager: this.traceManager,
115
119
  initialCorrelationId: trace.id,
116
- cancellationToken,
120
+ cancellationToken: cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken,
117
121
  nodeIdMapCollection: parseState.contextState.nodeIdMapCollection,
118
122
  });
119
- trace.exit();
120
123
  if (powerquery_parser_1.ResultUtils.isError(result)) {
124
+ trace.exit({ ["IsThrowing" /* IsThrowing */]: true });
121
125
  throw result.error;
122
126
  }
127
+ trace.exit();
123
128
  return result.value;
124
- }), this.analysisSettings.inspectionSettings.locale);
129
+ }), this.locale);
125
130
  }
126
- getHover(position, cancellationToken) {
131
+ getHover(position, cancellationTokenOverride) {
127
132
  return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
128
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getHover.name, this.analysisSettings.initialCorrelationId);
129
- const hoverProviderContext = yield this.getHoverProviderContext(position, trace.id, cancellationToken);
133
+ const trace = this.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getHover.name, this.initialCorrelationId);
134
+ const hoverProviderContext = yield this.getHoverProviderContext(position, trace.id, cancellationTokenOverride);
130
135
  if (!hoverProviderContext) {
131
136
  trace.exit();
132
137
  return undefined;
@@ -148,59 +153,84 @@ class AnalysisBase {
148
153
  firstError = triedHover.error;
149
154
  }
150
155
  }
151
- trace.exit();
152
156
  if (firstError !== undefined) {
153
- // This is safe as the ensureResultAsync function catch the error.
157
+ trace.exit({ ["IsThrowing" /* IsThrowing */]: true });
154
158
  throw firstError;
155
159
  }
156
- else {
160
+ trace.exit();
161
+ return undefined;
162
+ }), this.locale);
163
+ }
164
+ // We should only get an undefined for an activeNode iff a parse pass hasn't been done.
165
+ getActiveNode(position) {
166
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
167
+ const parseState = yield this.getParseStateOkOrThrow(undefined);
168
+ if (parseState === undefined) {
157
169
  return undefined;
158
170
  }
159
- }), this.analysisSettings.inspectionSettings.locale);
171
+ return inspection_1.ActiveNodeUtils.activeNode(parseState.contextState.nodeIdMapCollection, position);
172
+ }), this.locale);
160
173
  }
161
- // Assumes that initializeState sets parseError to some value, which may include undefined.
174
+ // undefined means either the parse pass wasn't done (lexing error), or there was no error.
162
175
  getParseError() {
163
- return __awaiter(this, void 0, void 0, function* () {
164
- if (this.triedLexParse === undefined) {
165
- yield this.initializeState();
176
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
177
+ const triedLexParse = yield this.triedLexParse;
178
+ if (PQP.TaskUtils.isParseStageCommonError(triedLexParse)) {
179
+ throw triedLexParse.error;
166
180
  }
167
- return this.parseError;
168
- });
181
+ else if (PQP.TaskUtils.isParseStageError(triedLexParse)) {
182
+ return triedLexParse.error;
183
+ }
184
+ else {
185
+ return undefined;
186
+ }
187
+ }), this.locale);
169
188
  }
170
- // Assumes that initializeState sets parseState to some value, which may include undefined.
189
+ // We should only get an undefined for an activeNode iff a parse pass hasn't been done.
171
190
  getParseState() {
172
- return __awaiter(this, void 0, void 0, function* () {
173
- if (this.triedLexParse === undefined) {
174
- yield this.initializeState();
191
+ return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
192
+ const triedLexParse = yield this.triedLexParse;
193
+ if (PQP.TaskUtils.isParseStageCommonError(triedLexParse)) {
194
+ throw triedLexParse.error;
175
195
  }
176
- return this.parseState;
177
- });
196
+ else if (PQP.TaskUtils.isParseStageError(triedLexParse)) {
197
+ return triedLexParse.parseState;
198
+ }
199
+ else if (PQP.TaskUtils.isParseStageOk(triedLexParse)) {
200
+ return triedLexParse.parseState;
201
+ }
202
+ else {
203
+ return undefined;
204
+ }
205
+ }), this.locale);
178
206
  }
179
- getPartialSemanticTokens(cancellationToken) {
207
+ getPartialSemanticTokens(cancellationTokenOverride) {
180
208
  return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
181
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getPartialSemanticTokens.name, this.analysisSettings.initialCorrelationId);
182
- const parseState = yield this.getParseState();
209
+ const trace = this.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getPartialSemanticTokens.name, this.initialCorrelationId);
210
+ const parseState = yield this.getParseStateOkOrThrow(trace);
183
211
  if (parseState === undefined) {
212
+ trace.exit();
184
213
  return undefined;
185
214
  }
186
215
  const result = yield this.localDocumentProvider.getPartialSemanticTokens({
187
- traceManager: this.analysisSettings.traceManager,
216
+ traceManager: this.traceManager,
188
217
  initialCorrelationId: trace.id,
189
- cancellationToken,
190
- library: this.analysisSettings.inspectionSettings.library,
218
+ cancellationToken: cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken,
219
+ library: this.inspectionSettings.library,
191
220
  parseState,
192
221
  });
193
- trace.exit();
194
222
  if (powerquery_parser_1.ResultUtils.isError(result)) {
223
+ trace.exit({ ["IsThrowing" /* IsThrowing */]: true });
195
224
  throw result.error;
196
225
  }
226
+ trace.exit();
197
227
  return result.value;
198
- }), this.analysisSettings.inspectionSettings.locale);
228
+ }), this.locale);
199
229
  }
200
- getSignatureHelp(position, cancellationToken) {
230
+ getSignatureHelp(position, cancellationTokenOverride) {
201
231
  return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
202
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getSignatureHelp.name, this.analysisSettings.initialCorrelationId);
203
- const signatureProviderContext = yield this.getSignatureProviderContext(position, trace.id, cancellationToken);
232
+ const trace = this.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getSignatureHelp.name, this.initialCorrelationId);
233
+ const signatureProviderContext = yield this.getSignatureProviderContext(position, trace.id, cancellationTokenOverride);
204
234
  if (signatureProviderContext === undefined) {
205
235
  trace.exit();
206
236
  return undefined;
@@ -217,22 +247,22 @@ class AnalysisBase {
217
247
  }
218
248
  trace.exit();
219
249
  return undefined;
220
- }), this.analysisSettings.inspectionSettings.locale);
250
+ }), this.locale);
221
251
  }
222
- getRenameEdits(position, newName, cancellationToken) {
252
+ getRenameEdits(position, newName, cancellationTokenOverride) {
223
253
  return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
224
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getRenameEdits.name, this.analysisSettings.initialCorrelationId);
225
- const activeNode = powerquery_parser_1.Assert.asDefined(yield this.getActiveNode(position));
226
- let leafIdentifier;
227
- if (!inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode) ||
254
+ const trace = this.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getRenameEdits.name, this.initialCorrelationId);
255
+ const parseState = yield this.getParseStateOkOrThrow(trace);
256
+ const activeNode = yield this.getActiveNodeOkOrThrow(position, trace);
257
+ if (parseState === undefined ||
258
+ activeNode === undefined ||
259
+ !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode) ||
228
260
  activeNode.inclusiveIdentifierUnderPosition === undefined) {
229
261
  trace.exit();
230
262
  return undefined;
231
263
  }
232
- else {
233
- leafIdentifier = activeNode.inclusiveIdentifierUnderPosition;
234
- }
235
- void (yield this.inspectNodeScope(activeNode, trace.id, cancellationToken));
264
+ void (yield this.inspectNodeScope(activeNode, trace.id, cancellationTokenOverride));
265
+ const leafIdentifier = activeNode.inclusiveIdentifierUnderPosition;
236
266
  const scopeById = this.typeCache.scopeById;
237
267
  const identifiersToBeEdited = [];
238
268
  let valueCreator = undefined;
@@ -257,7 +287,7 @@ class AnalysisBase {
257
287
  let nodeScope = scopeById.get(identifierExpression.id);
258
288
  // there might be a chance that its scope did not get populated yet, do another try
259
289
  if (!nodeScope) {
260
- void (yield __1.Inspection.tryNodeScope(this.analysisSettings.inspectionSettings, powerquery_parser_1.Assert.asDefined(yield this.getParseState()).contextState.nodeIdMapCollection, identifierExpression.id, scopeById));
290
+ void (yield __1.Inspection.tryNodeScope(this.inspectionSettings, parseState.contextState.nodeIdMapCollection, identifierExpression.id, scopeById));
261
291
  nodeScope = scopeById.get(identifierExpression.id);
262
292
  }
263
293
  const scopeItem = (0, scopeUtils_1.findScopeItemByLiteral)(nodeScope, leafIdentifier.normalizedLiteral);
@@ -290,7 +320,7 @@ class AnalysisBase {
290
320
  }
291
321
  if (valueCreator) {
292
322
  // need to populate the other identifiers referring it
293
- identifiersToBeEdited.push(...(yield this.collectAllIdentifiersBeneath(powerquery_parser_1.Assert.asDefined(yield this.getParseState()).contextState.nodeIdMapCollection, valueCreator)));
323
+ identifiersToBeEdited.push(...(yield this.collectAllIdentifiersBeneath(parseState.contextState.nodeIdMapCollection, valueCreator)));
294
324
  }
295
325
  // if none found, directly put inclusiveIdentifierUnderPosition in if it exists
296
326
  if (identifiersToBeEdited.length === 0 && leafIdentifier) {
@@ -299,63 +329,49 @@ class AnalysisBase {
299
329
  : leafIdentifier.node);
300
330
  }
301
331
  const result = identifiersToBeEdited.map((one) => ({
302
- range: __1.PositionUtils.createRangeFromTokenRange(one.tokenRange),
332
+ range: __1.PositionUtils.rangeFromTokenRange(one.tokenRange),
303
333
  newText: newName,
304
334
  }));
305
335
  trace.exit();
306
336
  return result;
307
- }), this.analysisSettings.inspectionSettings.locale);
337
+ }), this.locale);
308
338
  }
309
339
  dispose() {
310
340
  this.typeCache.scopeById.clear();
311
341
  this.typeCache.typeById.clear();
312
342
  }
313
- // protected abstract getText(range?: Range): string;
314
343
  static isValidHoverIdentifier(activeNode) {
315
344
  var _a;
316
345
  const ancestry = activeNode.ancestry;
317
- if (ancestry.length <= 1) {
318
- return true;
319
- }
320
- const leaf = powerquery_parser_1.Assert.asDefined(ancestry[0]);
321
- const followingNode = ancestry[1];
322
- if (((_a = followingNode === null || followingNode === void 0 ? void 0 : followingNode.node) === null || _a === void 0 ? void 0 : _a.kind) === "Parameter" /* Parameter */) {
323
- return false;
324
- }
325
- // Allow hover on either the key or value of [Generalized|Identifier]PairedExpression.
326
- // Validate it's not an incomplete Ast or that you're on the conjunction.
327
- else if ([
328
- "GeneralizedIdentifierPairedAnyLiteral" /* GeneralizedIdentifierPairedAnyLiteral */,
329
- "GeneralizedIdentifierPairedExpression" /* GeneralizedIdentifierPairedExpression */,
330
- "IdentifierPairedExpression" /* IdentifierPairedExpression */,
331
- ].includes(followingNode.node.kind) &&
332
- [undefined, 1].includes(powerquery_parser_1.Assert.asDefined(leaf.node.attributeIndex))) {
346
+ const parent = ancestry[1];
347
+ if (((_a = parent === null || parent === void 0 ? void 0 : parent.node) === null || _a === void 0 ? void 0 : _a.kind) === "Parameter" /* Parameter */) {
333
348
  return false;
334
349
  }
335
350
  return true;
336
351
  }
337
- getAutocompleteItemProviderContext(position, correlationId, newCancellationToken) {
352
+ getAutocompleteItemProviderContext(position, correlationId, cancellationTokenOverride) {
338
353
  return __awaiter(this, void 0, void 0, function* () {
339
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getAutocompleteItemProviderContext.name, correlationId);
340
- const activeNode = yield this.getActiveNode(position);
341
- if (activeNode === undefined) {
354
+ const trace = this.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getAutocompleteItemProviderContext.name, correlationId);
355
+ const activeNode = yield this.getActiveNodeOkOrThrow(position, trace);
356
+ if (activeNode === undefined || (inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode) && activeNode.isInKey)) {
342
357
  trace.exit();
343
358
  return undefined;
344
359
  }
345
- const autocomplete = powerquery_parser_1.Assert.asDefined(yield this.inspectAutocomplete(activeNode, trace.id, newCancellationToken));
346
- const triedNodeScope = powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id, newCancellationToken));
347
- const triedScopeType = powerquery_parser_1.Assert.asDefined(yield this.inspectScopeType(activeNode, trace.id, newCancellationToken));
360
+ 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");
361
+ 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");
362
+ 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");
348
363
  const activeLeafIdentifier = inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)
349
364
  ? activeNode.inclusiveIdentifierUnderPosition
350
365
  : undefined;
351
366
  let result;
367
+ const cancellationToken = cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken;
352
368
  if (activeLeafIdentifier !== undefined) {
353
369
  result = {
354
370
  autocomplete,
355
371
  triedNodeScope,
356
372
  triedScopeType,
357
- traceManager: this.analysisSettings.traceManager,
358
- cancellationToken: newCancellationToken,
373
+ traceManager: this.traceManager,
374
+ cancellationToken,
359
375
  initialCorrelationId: trace.id,
360
376
  range: __1.CommonTypesUtils.rangeFromTokenRange(activeLeafIdentifier.node.tokenRange),
361
377
  text: activeLeafIdentifier.normalizedLiteral,
@@ -367,8 +383,8 @@ class AnalysisBase {
367
383
  autocomplete,
368
384
  triedNodeScope,
369
385
  triedScopeType,
370
- traceManager: this.analysisSettings.traceManager,
371
- cancellationToken: newCancellationToken,
386
+ traceManager: this.traceManager,
387
+ cancellationToken,
372
388
  initialCorrelationId: trace.id,
373
389
  };
374
390
  }
@@ -376,39 +392,40 @@ class AnalysisBase {
376
392
  return result;
377
393
  });
378
394
  }
379
- getDefinitionProviderContext(position, correlationId, cancellationToken) {
395
+ getDefinitionProviderContext(position, correlationId, cancellationTokenOverride) {
380
396
  return __awaiter(this, void 0, void 0, function* () {
381
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getDefinitionProviderContext.name, correlationId);
382
- const activeNode = yield this.getActiveNode(position);
383
- if (activeNode === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
397
+ const trace = this.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getDefinitionProviderContext.name, correlationId);
398
+ const activeNode = yield this.getActiveNodeOkOrThrow(position, trace);
399
+ if (activeNode === undefined ||
400
+ !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode) ||
401
+ activeNode.exclusiveIdentifierUnderPosition === undefined ||
402
+ !AnalysisBase.isValidHoverIdentifier(activeNode)) {
384
403
  trace.exit();
385
404
  return undefined;
386
405
  }
387
406
  const identifierUnderPosition = activeNode.exclusiveIdentifierUnderPosition;
388
- if (identifierUnderPosition === undefined || !AnalysisBase.isValidHoverIdentifier(activeNode)) {
389
- trace.exit();
390
- return undefined;
391
- }
392
407
  const identifier = identifierUnderPosition.node.kind === "IdentifierExpression" /* IdentifierExpression */
393
408
  ? identifierUnderPosition.node.identifier
394
409
  : identifierUnderPosition.node;
410
+ const cancellationToken = cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken;
395
411
  const context = {
396
- traceManager: this.analysisSettings.traceManager,
412
+ traceManager: this.traceManager,
397
413
  range: __1.CommonTypesUtils.rangeFromTokenRange(identifier.tokenRange),
398
- identifier,
399
- cancellationToken,
400
414
  initialCorrelationId: trace.id,
401
- triedNodeScope: powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id, cancellationToken)),
415
+ cancellationToken,
416
+ identifier,
417
+ triedNodeScope: powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id, cancellationToken), "we got a truthy activeNode meaning we have a truthy parseState"),
402
418
  };
403
419
  trace.exit();
404
420
  return context;
405
421
  });
406
422
  }
407
- getHoverProviderContext(position, correlationId, cancellationToken) {
423
+ getHoverProviderContext(position, correlationId, cancellationTokenOverride) {
408
424
  return __awaiter(this, void 0, void 0, function* () {
409
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getHoverProviderContext.name, correlationId);
410
- const activeNode = yield this.getActiveNode(position);
411
- if (activeNode === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
425
+ const trace = this.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getHoverProviderContext.name, correlationId);
426
+ const parseState = yield this.getParseStateOkOrThrow(trace);
427
+ const activeNode = yield this.getActiveNodeOkOrThrow(position, trace);
428
+ if (parseState === undefined || activeNode === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
412
429
  trace.exit();
413
430
  return undefined;
414
431
  }
@@ -417,30 +434,35 @@ class AnalysisBase {
417
434
  trace.exit();
418
435
  return undefined;
419
436
  }
437
+ const cancellationToken = cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken;
420
438
  const identifier = identifierUnderPosition.node.kind === "IdentifierExpression" /* IdentifierExpression */
421
439
  ? identifierUnderPosition.node.identifier
422
440
  : identifierUnderPosition.node;
423
441
  const context = {
424
- traceManager: this.analysisSettings.traceManager,
442
+ traceManager: this.traceManager,
425
443
  range: __1.CommonTypesUtils.rangeFromTokenRange(identifier.tokenRange),
426
444
  identifier,
427
445
  cancellationToken,
428
446
  initialCorrelationId: trace.id,
429
447
  activeNode,
430
- inspectionSettings: Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }),
431
- parseState: powerquery_parser_1.Assert.asDefined(yield this.getParseState()),
432
- triedNodeScope: powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id, cancellationToken)),
433
- triedScopeType: powerquery_parser_1.Assert.asDefined(yield this.inspectScopeType(activeNode, trace.id, cancellationToken)),
448
+ inspectionSettings: Object.assign(Object.assign({}, this.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }),
449
+ parseState,
450
+ triedNodeScope: powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id, cancellationToken), "we have a truthy activeNode meaning we have a truthy parseState"),
451
+ triedScopeType: powerquery_parser_1.Assert.asDefined(yield this.inspectScopeType(activeNode, trace.id, cancellationToken), "we have a truthy activeNode meaning we have a truthy parseState"),
434
452
  };
435
453
  trace.exit();
436
454
  return context;
437
455
  });
438
456
  }
439
- getSignatureProviderContext(position, correlationId, newCancellationToken) {
457
+ getSignatureProviderContext(position, correlationId, cancellationTokenOverride) {
440
458
  return __awaiter(this, void 0, void 0, function* () {
441
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getSignatureProviderContext.name, correlationId);
442
- const triedCurrentInvokeExpression = yield this.inspectCurrentInvokeExpression(position, trace.id, newCancellationToken);
443
- if (triedCurrentInvokeExpression === undefined ||
459
+ const trace = this.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getSignatureProviderContext.name, correlationId);
460
+ const parseState = yield this.getParseStateOkOrThrow(trace);
461
+ const activeNode = yield this.getActiveNodeOkOrThrow(position, trace);
462
+ const triedCurrentInvokeExpression = yield this.inspectCurrentInvokeExpression(position, trace.id, cancellationTokenOverride);
463
+ if (parseState === undefined ||
464
+ activeNode === undefined ||
465
+ triedCurrentInvokeExpression === undefined ||
444
466
  powerquery_parser_1.ResultUtils.isError(triedCurrentInvokeExpression) ||
445
467
  triedCurrentInvokeExpression.value === undefined) {
446
468
  trace.exit();
@@ -453,15 +475,16 @@ class AnalysisBase {
453
475
  trace.exit();
454
476
  return undefined;
455
477
  }
478
+ const cancellationToken = cancellationTokenOverride !== null && cancellationTokenOverride !== void 0 ? cancellationTokenOverride : this.inspectionSettings.cancellationToken;
456
479
  const result = {
457
480
  argumentOrdinal,
458
481
  functionName,
459
482
  isNameInLocalScope: invokeExpression.isNameInLocalScope,
460
483
  functionType: invokeExpression.functionType,
461
- traceManager: this.analysisSettings.traceManager,
462
- cancellationToken: newCancellationToken,
484
+ traceManager: this.traceManager,
485
+ cancellationToken,
463
486
  initialCorrelationId: trace.id,
464
- triedCurrentInvokeExpression: yield __1.Inspection.tryCurrentInvokeExpression(Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken: newCancellationToken, initialCorrelationId: trace.id }), powerquery_parser_1.Assert.asDefined(yield this.getParseState()).contextState.nodeIdMapCollection, powerquery_parser_1.Assert.asDefined(yield this.getActiveNode(position)), this.typeCache),
487
+ triedCurrentInvokeExpression: yield __1.Inspection.tryCurrentInvokeExpression(Object.assign(Object.assign({}, this.inspectionSettings), { cancellationToken, initialCorrelationId: trace.id }), parseState.contextState.nodeIdMapCollection, activeNode, this.typeCache),
465
488
  };
466
489
  trace.exit();
467
490
  return result;
@@ -505,7 +528,7 @@ class AnalysisBase {
505
528
  yield Promise.all(filteredIdentifierNodes
506
529
  .filter((oneIdentifier) => oneIdentifier.kind === "GeneralizedIdentifier" /* GeneralizedIdentifier */ ||
507
530
  oneIdentifier.identifierContextKind === "Value" /* Value */)
508
- .map((oneIdentifier) => __1.Inspection.tryNodeScope(this.analysisSettings.inspectionSettings, nodeIdMapCollection, oneIdentifier.id, this.typeCache.scopeById)));
531
+ .map((oneIdentifier) => __1.Inspection.tryNodeScope(this.inspectionSettings, nodeIdMapCollection, oneIdentifier.id, this.typeCache.scopeById)));
509
532
  filteredIdentifierNodes = filteredIdentifierNodes.filter((oneIdentifierNode) => {
510
533
  if (oneIdentifierNode.kind === "GeneralizedIdentifier" /* GeneralizedIdentifier */) {
511
534
  return oneIdentifierNode.id === valueCreator.id;
@@ -529,81 +552,99 @@ class AnalysisBase {
529
552
  }
530
553
  // Performs a lex + parse of the document, then caches the results into local variables.
531
554
  // Any code which operates on the parse state should use this method to ensure that the parse state is initialized.
532
- initializeState() {
555
+ tryLexParse() {
533
556
  return __awaiter(this, void 0, void 0, function* () {
534
- const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.initializeState.name, this.analysisSettings.initialCorrelationId);
535
- const updatedSettings = Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { initialCorrelationId: trace.id });
557
+ const trace = this.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.tryLexParse.name, this.initialCorrelationId);
558
+ const updatedSettings = Object.assign(Object.assign({}, this.inspectionSettings), { initialCorrelationId: trace.id });
536
559
  const triedLexParse = yield PQP.TaskUtils.tryLexParse(updatedSettings, this.textDocument.getText());
537
- this.triedLexParse = triedLexParse;
538
- if (PQP.TaskUtils.isLexStageError(triedLexParse) || PQP.TaskUtils.isParseStageCommonError(triedLexParse)) {
539
- trace.exit({ ["IsError" /* IsError */]: true });
540
- }
541
- else if (PQP.TaskUtils.isParseStageError(triedLexParse)) {
542
- this.parseState = triedLexParse.parseState;
543
- this.parseError = triedLexParse.error;
544
- }
545
- else {
546
- this.parseState = triedLexParse.parseState;
547
- }
548
560
  trace.exit();
561
+ return triedLexParse;
549
562
  });
550
563
  }
551
- // We should only get an undefined for an activeNode iff a parse pass hasn't been done.
552
- getActiveNode(position) {
564
+ inspectAutocomplete(activeNode, correlationId, cancellationTokenOverride) {
553
565
  return __awaiter(this, void 0, void 0, function* () {
554
- const parseState = yield this.getParseState();
566
+ const parseState = yield this.getParseStateOkOrThrow(undefined);
567
+ const parseError = yield this.getParseErrorOkOrThrow(undefined);
555
568
  if (parseState === undefined) {
556
569
  return undefined;
557
570
  }
558
- return inspection_1.ActiveNodeUtils.activeNode(parseState.contextState.nodeIdMapCollection, position);
571
+ 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);
559
572
  });
560
573
  }
561
- inspectAutocomplete(activeNode, correlationId, cancellationToken) {
574
+ inspectCurrentInvokeExpression(position, correlationId, cancellationTokenOverride) {
562
575
  return __awaiter(this, void 0, void 0, function* () {
563
- const parseState = yield this.getParseState();
564
- if (parseState === undefined) {
576
+ const parseState = yield this.getParseStateOkOrThrow(undefined);
577
+ // parseState needs to be ok, and must be truthy.
578
+ const activeNode = yield this.getActiveNodeOkOrThrow(position, undefined);
579
+ if (parseState === undefined || activeNode === undefined) {
565
580
  return undefined;
566
581
  }
567
- return yield __1.Inspection.autocomplete(Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }), parseState, this.typeCache, activeNode, yield this.getParseError());
582
+ 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);
568
583
  });
569
584
  }
570
- inspectCurrentInvokeExpression(position, correlationId, cancellationToken) {
585
+ inspectNodeScope(activeNode, correlationId, cancellationTokenOverride) {
571
586
  return __awaiter(this, void 0, void 0, function* () {
572
- const activeNode = yield this.getActiveNode(position);
573
- const parseState = yield this.getParseState();
574
- if (activeNode === undefined || parseState === undefined) {
587
+ const parseState = yield this.getParseStateOkOrThrow(undefined);
588
+ if (parseState === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
575
589
  return undefined;
576
590
  }
577
- return yield __1.Inspection.tryCurrentInvokeExpression(Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }), parseState.contextState.nodeIdMapCollection, activeNode, this.typeCache);
591
+ 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, inspection_1.ActiveNodeUtils.assertGetLeaf(activeNode).node.id, this.typeCache.scopeById);
578
592
  });
579
593
  }
580
- inspectNodeScope(activeNode, correlationId, cancellationToken) {
594
+ inspectScopeType(activeNode, correlationId, cancellationTokenOverride) {
581
595
  return __awaiter(this, void 0, void 0, function* () {
582
- const parseState = yield this.getParseState();
596
+ const parseState = yield this.getParseStateOkOrThrow(undefined);
583
597
  if (parseState === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
584
598
  return undefined;
585
599
  }
586
- return yield __1.Inspection.tryNodeScope(Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }), parseState.contextState.nodeIdMapCollection, inspection_1.ActiveNodeUtils.assertGetLeaf(activeNode).node.id, this.typeCache.scopeById);
600
+ 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);
587
601
  });
588
602
  }
589
- inspectScopeType(activeNode, correlationId, cancellationToken) {
603
+ getActiveNodeOkOrThrow(position, trace) {
590
604
  return __awaiter(this, void 0, void 0, function* () {
591
- const parseState = yield this.getParseState();
592
- if (parseState === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
593
- return undefined;
605
+ const activeNodeResult = yield this.getActiveNode(position);
606
+ if (powerquery_parser_1.ResultUtils.isError(activeNodeResult)) {
607
+ trace === null || trace === void 0 ? void 0 : trace.exit({ ["IsThrowing" /* IsThrowing */]: true });
608
+ throw activeNodeResult.error;
594
609
  }
595
- return yield __1.Inspection.tryScopeType(Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }), parseState.contextState.nodeIdMapCollection, inspection_1.ActiveNodeUtils.assertGetLeaf(activeNode).node.id, this.typeCache);
610
+ return activeNodeResult.value;
596
611
  });
597
612
  }
613
+ getParseErrorOkOrThrow(trace) {
614
+ return __awaiter(this, void 0, void 0, function* () {
615
+ const parseErrorResult = yield this.getParseError();
616
+ if (powerquery_parser_1.ResultUtils.isError(parseErrorResult)) {
617
+ trace === null || trace === void 0 ? void 0 : trace.exit({ ["IsThrowing" /* IsThrowing */]: true });
618
+ throw parseErrorResult.error;
619
+ }
620
+ return parseErrorResult.value;
621
+ });
622
+ }
623
+ getParseStateOkOrThrow(trace) {
624
+ return __awaiter(this, void 0, void 0, function* () {
625
+ const parseStateResult = yield this.getParseState();
626
+ if (powerquery_parser_1.ResultUtils.isError(parseStateResult)) {
627
+ trace === null || trace === void 0 ? void 0 : trace.exit({ ["IsThrowing" /* IsThrowing */]: true });
628
+ throw parseStateResult.error;
629
+ }
630
+ return parseStateResult.value;
631
+ });
632
+ }
633
+ applyAnalysisSettings(analysisSettings) {
634
+ this.initialCorrelationId = analysisSettings.initialCorrelationId;
635
+ this.inspectionSettings = analysisSettings.inspectionSettings;
636
+ this.locale = analysisSettings.inspectionSettings.locale;
637
+ this.traceManager = analysisSettings.traceManager;
638
+ }
598
639
  }
599
640
  exports.AnalysisBase = AnalysisBase;
600
641
  function addIdentifierPairedExpressionSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken) {
601
642
  var _a;
602
643
  const identifierPairedExpressionIds = (_a = nodeIdMapCollection.idsByNodeKind.get("IdentifierPairedExpression" /* IdentifierPairedExpression */)) !== null && _a !== void 0 ? _a : new Set();
603
644
  for (const nodeId of identifierPairedExpressionIds) {
604
- cancellationToken.throwIfCancelled();
605
- const xorNode = parser_1.NodeIdMapUtils.assertGetXorChecked(nodeIdMapCollection, nodeId, "IdentifierPairedExpression" /* IdentifierPairedExpression */);
606
- if (!parser_1.XorNodeUtils.isAstXor(xorNode)) {
645
+ cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.throwIfCancelled();
646
+ const xorNode = parser_1.NodeIdMapUtils.assertXorChecked(nodeIdMapCollection, nodeId, "IdentifierPairedExpression" /* IdentifierPairedExpression */);
647
+ if (!parser_1.XorNodeUtils.isAst(xorNode)) {
607
648
  continue;
608
649
  }
609
650
  const astNode = xorNode.node;
@@ -620,9 +661,9 @@ function addRecordSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById,
620
661
  ];
621
662
  for (const collection of recordIdCollections) {
622
663
  for (const nodeId of collection) {
623
- cancellationToken.throwIfCancelled();
624
- const xorNode = parser_1.NodeIdMapUtils.assertGetXorChecked(nodeIdMapCollection, nodeId, ["RecordExpression" /* RecordExpression */, "RecordLiteral" /* RecordLiteral */]);
625
- if (!parser_1.XorNodeUtils.isAstXor(xorNode)) {
664
+ cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.throwIfCancelled();
665
+ const xorNode = parser_1.NodeIdMapUtils.assertXorChecked(nodeIdMapCollection, nodeId, ["RecordExpression" /* RecordExpression */, "RecordLiteral" /* RecordLiteral */]);
666
+ if (!parser_1.XorNodeUtils.isAst(xorNode)) {
626
667
  continue;
627
668
  }
628
669
  const astNode = xorNode.node;