@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.
- package/lib/powerquery-language-services/analysis/analysis.d.ts +12 -11
- package/lib/powerquery-language-services/analysis/analysisBase.d.ts +31 -25
- package/lib/powerquery-language-services/analysis/analysisBase.js +210 -169
- package/lib/powerquery-language-services/analysis/analysisBase.js.map +1 -1
- package/lib/powerquery-language-services/analysis/analysisUtils.d.ts +1 -1
- package/lib/powerquery-language-services/analysis/analysisUtils.js +3 -3
- package/lib/powerquery-language-services/analysis/analysisUtils.js.map +1 -1
- package/lib/powerquery-language-services/analysis/memoizedAnalysis.d.ts +6 -6
- package/lib/powerquery-language-services/analysis/memoizedAnalysis.js.map +1 -1
- package/lib/powerquery-language-services/documentSymbols.js +7 -7
- package/lib/powerquery-language-services/documentSymbols.js.map +1 -1
- package/lib/powerquery-language-services/externalType/externalType.js.map +1 -0
- package/lib/powerquery-language-services/externalType/externalTypeUtils.d.ts +5 -0
- package/lib/powerquery-language-services/externalType/externalTypeUtils.js +33 -0
- package/lib/powerquery-language-services/externalType/externalTypeUtils.js.map +1 -0
- package/lib/powerquery-language-services/externalType/index.js.map +1 -0
- package/lib/powerquery-language-services/index.d.ts +3 -1
- package/lib/powerquery-language-services/index.js +5 -3
- package/lib/powerquery-language-services/index.js.map +1 -1
- package/lib/powerquery-language-services/inspection/activeNode/activeNode.d.ts +5 -6
- package/lib/powerquery-language-services/inspection/activeNode/activeNode.js +3 -4
- package/lib/powerquery-language-services/inspection/activeNode/activeNode.js.map +1 -1
- package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js +212 -179
- package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js +6 -6
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.d.ts +4 -5
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js +10 -20
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.d.ts +2 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js +22 -23
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js +3 -3
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js +5 -5
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js +3 -3
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js +5 -7
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.js +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.js +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/commonTypes.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.d.ts +2 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js +14 -14
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.d.ts +5 -3
- package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js +302 -52
- package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/commonTypes.d.ts +0 -3
- package/lib/powerquery-language-services/inspection/autocomplete/task.js +3 -3
- package/lib/powerquery-language-services/inspection/autocomplete/task.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/trailingToken.d.ts +8 -0
- package/lib/powerquery-language-services/inspection/autocomplete/trailingToken.js +5 -0
- package/lib/powerquery-language-services/inspection/autocomplete/trailingToken.js.map +1 -0
- package/lib/powerquery-language-services/inspection/autocomplete/{common.d.ts → trailingTokenUtils.d.ts} +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/trailingTokenUtils.js +19 -0
- package/lib/powerquery-language-services/inspection/autocomplete/trailingTokenUtils.js.map +1 -0
- package/lib/powerquery-language-services/inspection/deferenceIdentifier.js +7 -7
- package/lib/powerquery-language-services/inspection/deferenceIdentifier.js.map +1 -1
- package/lib/powerquery-language-services/inspection/expectedType.js +2 -2
- package/lib/powerquery-language-services/inspection/expectedType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/index.d.ts +0 -1
- package/lib/powerquery-language-services/inspection/index.js +0 -1
- package/lib/powerquery-language-services/inspection/index.js.map +1 -1
- package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js +8 -8
- package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js +5 -5
- package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js +5 -5
- package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/scope/scopeInspection.js +4 -4
- package/lib/powerquery-language-services/inspection/scope/scopeInspection.js.map +1 -1
- package/lib/powerquery-language-services/inspection/task.js +8 -8
- package/lib/powerquery-language-services/inspection/task.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/common.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/common.js +9 -9
- package/lib/powerquery-language-services/inspection/type/inspectType/common.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js +2 -2
- package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeConstant.js +18 -18
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeConstant.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js +3 -3
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js +5 -5
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js +2 -2
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js +5 -5
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js +5 -5
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js +3 -3
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js +3 -3
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js +7 -7
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js +3 -3
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js +3 -3
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.js +4 -4
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js +7 -7
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js +2 -2
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js +3 -3
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js +5 -5
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js +7 -4
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js +3 -3
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js +4 -4
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js +2 -2
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js +2 -2
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js +3 -3
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js +8 -8
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js +46 -46
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js +3 -3
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js +5 -5
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/task.js +3 -3
- package/lib/powerquery-language-services/inspection/type/task.js.map +1 -1
- package/lib/powerquery-language-services/inspection/typeCache/typeCacheUtils.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/typeCache/typeCacheUtils.js +3 -3
- package/lib/powerquery-language-services/inspection/typeCache/typeCacheUtils.js.map +1 -1
- package/lib/powerquery-language-services/inspectionUtils.d.ts +3 -3
- package/lib/powerquery-language-services/inspectionUtils.js +29 -31
- package/lib/powerquery-language-services/inspectionUtils.js.map +1 -1
- package/lib/powerquery-language-services/library/index.d.ts +2 -0
- package/lib/powerquery-language-services/library/index.js +3 -1
- package/lib/powerquery-language-services/library/index.js.map +1 -1
- package/lib/powerquery-language-services/library/library.d.ts +1 -1
- package/lib/powerquery-language-services/library/library.js +2 -2
- package/lib/powerquery-language-services/library/library.js.map +1 -1
- package/lib/powerquery-language-services/library/librarySymbol.d.ts +33 -0
- package/lib/powerquery-language-services/library/librarySymbol.js +5 -0
- package/lib/powerquery-language-services/library/librarySymbol.js.map +1 -0
- package/lib/powerquery-language-services/library/librarySymbolUtils.d.ts +15 -0
- package/lib/powerquery-language-services/library/librarySymbolUtils.js +237 -0
- package/lib/powerquery-language-services/library/librarySymbolUtils.js.map +1 -0
- package/lib/powerquery-language-services/library/libraryUtils.d.ts +7 -5
- package/lib/powerquery-language-services/library/libraryUtils.js +14 -10
- package/lib/powerquery-language-services/library/libraryUtils.js.map +1 -1
- package/lib/powerquery-language-services/positionUtils.d.ts +8 -4
- package/lib/powerquery-language-services/positionUtils.js +40 -13
- package/lib/powerquery-language-services/positionUtils.js.map +1 -1
- package/lib/powerquery-language-services/providers/libraryProvider.d.ts +2 -2
- package/lib/powerquery-language-services/providers/libraryProvider.js +2 -2
- package/lib/powerquery-language-services/providers/libraryProvider.js.map +1 -1
- package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js +1 -1
- package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js.map +1 -1
- package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js +3 -3
- package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js.map +1 -1
- package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js +12 -12
- package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js.map +1 -1
- package/lib/powerquery-language-services/providers/nullSymbolProvider.d.ts +2 -2
- package/lib/powerquery-language-services/providers/nullSymbolProvider.js +7 -7
- package/lib/powerquery-language-services/providers/nullSymbolProvider.js.map +1 -1
- package/lib/powerquery-language-services/tokenPositionComparison.d.ts +5 -0
- package/lib/powerquery-language-services/tokenPositionComparison.js +13 -0
- package/lib/powerquery-language-services/tokenPositionComparison.js.map +1 -0
- package/lib/powerquery-language-services/traceUtils.d.ts +2 -2
- package/lib/powerquery-language-services/traceUtils.js +5 -5
- package/lib/powerquery-language-services/traceUtils.js.map +1 -1
- package/lib/powerquery-language-services/validate/validate.js +4 -4
- package/lib/powerquery-language-services/validate/validate.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js +3 -3
- package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateFunctionExpression.js +2 -2
- package/lib/powerquery-language-services/validate/validateFunctionExpression.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateInvokeExpression.js +2 -2
- package/lib/powerquery-language-services/validate/validateInvokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js +1 -1
- package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js.map +1 -1
- package/package.json +9 -7
- package/lib/powerquery-language-services/inspection/autocomplete/common.js +0 -11
- package/lib/powerquery-language-services/inspection/autocomplete/common.js.map +0 -1
- package/lib/powerquery-language-services/inspection/externalType/externalType.js.map +0 -1
- package/lib/powerquery-language-services/inspection/externalType/externalTypeUtils.d.ts +0 -4
- package/lib/powerquery-language-services/inspection/externalType/externalTypeUtils.js +0 -21
- package/lib/powerquery-language-services/inspection/externalType/externalTypeUtils.js.map +0 -1
- package/lib/powerquery-language-services/inspection/externalType/index.js.map +0 -1
- /package/lib/powerquery-language-services/{inspection/externalType → externalType}/externalType.d.ts +0 -0
- /package/lib/powerquery-language-services/{inspection/externalType → externalType}/externalType.js +0 -0
- /package/lib/powerquery-language-services/{inspection/externalType → externalType}/index.d.ts +0 -0
- /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
|
|
24
|
-
//
|
|
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
|
-
|
|
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
|
-
|
|
48
|
+
this.triedLexParse = this.tryLexParse();
|
|
47
49
|
}
|
|
48
|
-
getAutocompleteItems(position,
|
|
50
|
+
getAutocompleteItems(position, cancellationTokenOverride) {
|
|
49
51
|
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
50
|
-
const trace = this.
|
|
51
|
-
const context = yield this.getAutocompleteItemProviderContext(position, trace.id,
|
|
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.
|
|
75
|
+
}), this.locale);
|
|
74
76
|
}
|
|
75
|
-
getDefinition(position,
|
|
77
|
+
getDefinition(position, cancellationTokenOverride) {
|
|
76
78
|
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
77
|
-
const trace = this.
|
|
78
|
-
const identifierContext = yield this.getDefinitionProviderContext(position, trace.id,
|
|
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.
|
|
92
|
+
}), this.locale);
|
|
90
93
|
}
|
|
91
|
-
getDocumentSymbols(
|
|
94
|
+
getDocumentSymbols(cancellationTokenOverride) {
|
|
92
95
|
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
93
|
-
const parseState = yield this.
|
|
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.
|
|
107
|
+
}), this.locale);
|
|
104
108
|
}
|
|
105
|
-
getFoldingRanges(
|
|
109
|
+
getFoldingRanges(cancellationTokenOverride) {
|
|
106
110
|
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
107
|
-
const trace = this.
|
|
108
|
-
const parseState = yield this.
|
|
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.
|
|
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.
|
|
129
|
+
}), this.locale);
|
|
125
130
|
}
|
|
126
|
-
getHover(position,
|
|
131
|
+
getHover(position, cancellationTokenOverride) {
|
|
127
132
|
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
128
|
-
const trace = this.
|
|
129
|
-
const hoverProviderContext = yield this.getHoverProviderContext(position, trace.id,
|
|
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
|
-
|
|
157
|
+
trace.exit({ ["IsThrowing" /* IsThrowing */]: true });
|
|
154
158
|
throw firstError;
|
|
155
159
|
}
|
|
156
|
-
|
|
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
|
-
|
|
171
|
+
return inspection_1.ActiveNodeUtils.activeNode(parseState.contextState.nodeIdMapCollection, position);
|
|
172
|
+
}), this.locale);
|
|
160
173
|
}
|
|
161
|
-
//
|
|
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
|
-
|
|
165
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
174
|
-
|
|
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
|
-
|
|
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(
|
|
207
|
+
getPartialSemanticTokens(cancellationTokenOverride) {
|
|
180
208
|
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
181
|
-
const trace = this.
|
|
182
|
-
const parseState = yield this.
|
|
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.
|
|
216
|
+
traceManager: this.traceManager,
|
|
188
217
|
initialCorrelationId: trace.id,
|
|
189
|
-
cancellationToken,
|
|
190
|
-
library: this.
|
|
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.
|
|
228
|
+
}), this.locale);
|
|
199
229
|
}
|
|
200
|
-
getSignatureHelp(position,
|
|
230
|
+
getSignatureHelp(position, cancellationTokenOverride) {
|
|
201
231
|
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
202
|
-
const trace = this.
|
|
203
|
-
const signatureProviderContext = yield this.getSignatureProviderContext(position, trace.id,
|
|
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.
|
|
250
|
+
}), this.locale);
|
|
221
251
|
}
|
|
222
|
-
getRenameEdits(position, newName,
|
|
252
|
+
getRenameEdits(position, newName, cancellationTokenOverride) {
|
|
223
253
|
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
224
|
-
const trace = this.
|
|
225
|
-
const
|
|
226
|
-
|
|
227
|
-
if (
|
|
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
|
-
|
|
233
|
-
|
|
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.
|
|
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(
|
|
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.
|
|
332
|
+
range: __1.PositionUtils.rangeFromTokenRange(one.tokenRange),
|
|
303
333
|
newText: newName,
|
|
304
334
|
}));
|
|
305
335
|
trace.exit();
|
|
306
336
|
return result;
|
|
307
|
-
}), this.
|
|
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
|
-
|
|
318
|
-
|
|
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,
|
|
352
|
+
getAutocompleteItemProviderContext(position, correlationId, cancellationTokenOverride) {
|
|
338
353
|
return __awaiter(this, void 0, void 0, function* () {
|
|
339
|
-
const trace = this.
|
|
340
|
-
const activeNode = yield this.
|
|
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,
|
|
346
|
-
const triedNodeScope = powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id,
|
|
347
|
-
const triedScopeType = powerquery_parser_1.Assert.asDefined(yield this.inspectScopeType(activeNode, trace.id,
|
|
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.
|
|
358
|
-
cancellationToken
|
|
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.
|
|
371
|
-
cancellationToken
|
|
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,
|
|
395
|
+
getDefinitionProviderContext(position, correlationId, cancellationTokenOverride) {
|
|
380
396
|
return __awaiter(this, void 0, void 0, function* () {
|
|
381
|
-
const trace = this.
|
|
382
|
-
const activeNode = yield this.
|
|
383
|
-
if (activeNode === undefined ||
|
|
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.
|
|
412
|
+
traceManager: this.traceManager,
|
|
397
413
|
range: __1.CommonTypesUtils.rangeFromTokenRange(identifier.tokenRange),
|
|
398
|
-
identifier,
|
|
399
|
-
cancellationToken,
|
|
400
414
|
initialCorrelationId: trace.id,
|
|
401
|
-
|
|
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,
|
|
423
|
+
getHoverProviderContext(position, correlationId, cancellationTokenOverride) {
|
|
408
424
|
return __awaiter(this, void 0, void 0, function* () {
|
|
409
|
-
const trace = this.
|
|
410
|
-
const
|
|
411
|
-
|
|
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.
|
|
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.
|
|
431
|
-
parseState
|
|
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,
|
|
457
|
+
getSignatureProviderContext(position, correlationId, cancellationTokenOverride) {
|
|
440
458
|
return __awaiter(this, void 0, void 0, function* () {
|
|
441
|
-
const trace = this.
|
|
442
|
-
const
|
|
443
|
-
|
|
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.
|
|
462
|
-
cancellationToken
|
|
484
|
+
traceManager: this.traceManager,
|
|
485
|
+
cancellationToken,
|
|
463
486
|
initialCorrelationId: trace.id,
|
|
464
|
-
triedCurrentInvokeExpression: yield __1.Inspection.tryCurrentInvokeExpression(Object.assign(Object.assign({}, this.
|
|
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.
|
|
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
|
-
|
|
555
|
+
tryLexParse() {
|
|
533
556
|
return __awaiter(this, void 0, void 0, function* () {
|
|
534
|
-
const trace = this.
|
|
535
|
-
const updatedSettings = Object.assign(Object.assign({}, this.
|
|
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
|
-
|
|
552
|
-
getActiveNode(position) {
|
|
564
|
+
inspectAutocomplete(activeNode, correlationId, cancellationTokenOverride) {
|
|
553
565
|
return __awaiter(this, void 0, void 0, function* () {
|
|
554
|
-
const parseState = yield this.
|
|
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
|
|
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
|
-
|
|
574
|
+
inspectCurrentInvokeExpression(position, correlationId, cancellationTokenOverride) {
|
|
562
575
|
return __awaiter(this, void 0, void 0, function* () {
|
|
563
|
-
const parseState = yield this.
|
|
564
|
-
|
|
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.
|
|
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
|
-
|
|
585
|
+
inspectNodeScope(activeNode, correlationId, cancellationTokenOverride) {
|
|
571
586
|
return __awaiter(this, void 0, void 0, function* () {
|
|
572
|
-
const
|
|
573
|
-
|
|
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.
|
|
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
|
-
|
|
594
|
+
inspectScopeType(activeNode, correlationId, cancellationTokenOverride) {
|
|
581
595
|
return __awaiter(this, void 0, void 0, function* () {
|
|
582
|
-
const parseState = yield this.
|
|
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.
|
|
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
|
-
|
|
603
|
+
getActiveNodeOkOrThrow(position, trace) {
|
|
590
604
|
return __awaiter(this, void 0, void 0, function* () {
|
|
591
|
-
const
|
|
592
|
-
if (
|
|
593
|
-
|
|
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
|
|
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.
|
|
606
|
-
if (!parser_1.XorNodeUtils.
|
|
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.
|
|
625
|
-
if (!parser_1.XorNodeUtils.
|
|
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;
|