@microsoft/powerquery-language-services 0.3.41 → 0.5.0
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 +17 -9
- package/lib/powerquery-language-services/analysis/analysisBase.d.ts +41 -27
- package/lib/powerquery-language-services/analysis/analysisBase.js +519 -179
- package/lib/powerquery-language-services/analysis/analysisBase.js.map +1 -1
- package/lib/powerquery-language-services/analysis/analysisSettings.d.ts +8 -11
- package/lib/powerquery-language-services/analysis/analysisUtils.d.ts +1 -2
- package/lib/powerquery-language-services/analysis/analysisUtils.js +20 -2
- package/lib/powerquery-language-services/analysis/analysisUtils.js.map +1 -1
- package/lib/powerquery-language-services/analysis/documentAnalysis.d.ts +4 -6
- package/lib/powerquery-language-services/analysis/documentAnalysis.js +4 -11
- package/lib/powerquery-language-services/analysis/documentAnalysis.js.map +1 -1
- package/lib/powerquery-language-services/analysis/memoizedAnalysis.d.ts +18 -0
- package/lib/powerquery-language-services/analysis/memoizedAnalysis.js +66 -0
- package/lib/powerquery-language-services/analysis/memoizedAnalysis.js.map +1 -0
- package/lib/powerquery-language-services/formatter.d.ts +1 -1
- package/lib/powerquery-language-services/formatter.js +2 -4
- package/lib/powerquery-language-services/formatter.js.map +1 -1
- package/lib/powerquery-language-services/index.d.ts +0 -1
- package/lib/powerquery-language-services/index.js +0 -1
- package/lib/powerquery-language-services/index.js.map +1 -1
- package/lib/powerquery-language-services/inspection/activeNode/activeNode.d.ts +5 -5
- package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.d.ts +5 -5
- package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js +78 -83
- package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.d.ts +2 -2
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js +37 -40
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.d.ts +7 -7
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js +17 -17
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.d.ts +3 -3
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js +43 -43
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js +7 -7
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js +7 -7
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js +4 -4
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js +20 -22
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js +4 -4
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js +9 -9
- 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 +5 -5
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.js +4 -4
- 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 -2
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js +21 -26
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.d.ts +2 -2
- package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js +21 -21
- package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/commonTypes.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/task.d.ts +2 -2
- package/lib/powerquery-language-services/inspection/autocomplete/task.js +12 -12
- package/lib/powerquery-language-services/inspection/autocomplete/task.js.map +1 -1
- package/lib/powerquery-language-services/inspection/commonTypes.d.ts +2 -2
- package/lib/powerquery-language-services/inspection/deferenceIdentifier.js +12 -13
- package/lib/powerquery-language-services/inspection/deferenceIdentifier.js.map +1 -1
- package/lib/powerquery-language-services/inspection/expectedType.d.ts +3 -3
- package/lib/powerquery-language-services/inspection/expectedType.js +8 -8
- package/lib/powerquery-language-services/inspection/expectedType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/invokeExpression/common.d.ts +2 -2
- package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.d.ts +2 -2
- package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js +24 -24
- package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js +17 -18
- package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js +20 -22
- package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/scope/scope.d.ts +2 -2
- package/lib/powerquery-language-services/inspection/scope/scopeInspection.js +47 -45
- package/lib/powerquery-language-services/inspection/scope/scopeInspection.js.map +1 -1
- package/lib/powerquery-language-services/inspection/scope/scopeUtils.d.ts +7 -7
- package/lib/powerquery-language-services/inspection/scope/scopeUtils.js +15 -15
- package/lib/powerquery-language-services/inspection/scope/scopeUtils.js.map +1 -1
- package/lib/powerquery-language-services/inspection/task.d.ts +4 -4
- package/lib/powerquery-language-services/inspection/task.js +17 -18
- package/lib/powerquery-language-services/inspection/task.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/common.d.ts +7 -7
- package/lib/powerquery-language-services/inspection/type/inspectType/common.js +56 -59
- package/lib/powerquery-language-services/inspection/type/inspectType/common.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js +4 -5
- package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js +4 -4
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js +14 -12
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js +13 -13
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js +9 -9
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js +13 -14
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js +6 -6
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js +8 -8
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js +9 -9
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js +5 -5
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js +5 -5
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.d.ts +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.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js +18 -18
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js +4 -4
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js +7 -7
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js +2 -2
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js +10 -10
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js +6 -6
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js +3 -3
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js +10 -10
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js +7 -6
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js +6 -6
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js +10 -10
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js +35 -41
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js +9 -9
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js +10 -12
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/task.js +5 -5
- package/lib/powerquery-language-services/inspection/type/task.js.map +1 -1
- package/lib/powerquery-language-services/inspectionSettings.d.ts +1 -1
- package/lib/powerquery-language-services/inspectionUtils.d.ts +3 -6
- package/lib/powerquery-language-services/inspectionUtils.js +20 -75
- package/lib/powerquery-language-services/inspectionUtils.js.map +1 -1
- package/lib/powerquery-language-services/library/library.d.ts +1 -1
- package/lib/powerquery-language-services/library/libraryUtils.d.ts +9 -9
- package/lib/powerquery-language-services/library/libraryUtils.js +21 -21
- package/lib/powerquery-language-services/library/libraryUtils.js.map +1 -1
- package/lib/powerquery-language-services/localization/localization.d.ts +3 -3
- package/lib/powerquery-language-services/localization/localization.js +9 -9
- package/lib/powerquery-language-services/localization/localization.js.map +1 -1
- package/lib/powerquery-language-services/positionUtils.js +16 -17
- package/lib/powerquery-language-services/positionUtils.js.map +1 -1
- package/lib/powerquery-language-services/providers/commonTypes.d.ts +38 -13
- package/lib/powerquery-language-services/providers/index.d.ts +2 -2
- package/lib/powerquery-language-services/providers/index.js +4 -4
- package/lib/powerquery-language-services/providers/index.js.map +1 -1
- package/lib/powerquery-language-services/providers/languageCompletionItemProvider.d.ts +4 -4
- package/lib/powerquery-language-services/providers/languageCompletionItemProvider.js +22 -19
- package/lib/powerquery-language-services/providers/languageCompletionItemProvider.js.map +1 -1
- package/lib/powerquery-language-services/providers/libraryProvider.d.ts +17 -0
- package/lib/powerquery-language-services/providers/libraryProvider.js +129 -0
- package/lib/powerquery-language-services/providers/libraryProvider.js.map +1 -0
- package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js +3 -3
- package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js.map +1 -1
- package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.d.ts +18 -20
- package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js +127 -127
- package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js.map +1 -1
- package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js +45 -43
- package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js.map +1 -1
- package/lib/powerquery-language-services/providers/nullSymbolProvider.d.ts +10 -8
- package/lib/powerquery-language-services/providers/nullSymbolProvider.js +7 -6
- package/lib/powerquery-language-services/providers/nullSymbolProvider.js.map +1 -1
- package/lib/powerquery-language-services/traceUtils.d.ts +1 -1
- package/lib/powerquery-language-services/traceUtils.js +1 -1
- package/lib/powerquery-language-services/traceUtils.js.map +1 -1
- package/lib/powerquery-language-services/validate/validate.d.ts +2 -2
- package/lib/powerquery-language-services/validate/validate.js +19 -20
- package/lib/powerquery-language-services/validate/validate.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.d.ts +2 -1
- package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js +24 -54
- package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateFunctionExpression.js +6 -6
- package/lib/powerquery-language-services/validate/validateFunctionExpression.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateInvokeExpression.d.ts +1 -1
- package/lib/powerquery-language-services/validate/validateInvokeExpression.js +23 -23
- package/lib/powerquery-language-services/validate/validateInvokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateParse.d.ts +4 -0
- package/lib/powerquery-language-services/validate/validateParse.js +74 -0
- package/lib/powerquery-language-services/validate/validateParse.js.map +1 -0
- package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js +13 -14
- package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js.map +1 -1
- package/lib/powerquery-language-services/workspaceCache/workspaceCache.d.ts +2 -2
- package/lib/powerquery-language-services/workspaceCache/workspaceCacheUtils.js +31 -31
- package/lib/powerquery-language-services/workspaceCache/workspaceCacheUtils.js.map +1 -1
- package/package.json +3 -3
- package/lib/powerquery-language-services/documentSymbols.d.ts +0 -3
- package/lib/powerquery-language-services/documentSymbols.js +0 -100
- package/lib/powerquery-language-services/documentSymbols.js.map +0 -1
- package/lib/powerquery-language-services/providers/librarySymbolProvider.d.ts +0 -15
- package/lib/powerquery-language-services/providers/librarySymbolProvider.js +0 -117
- package/lib/powerquery-language-services/providers/librarySymbolProvider.js.map +0 -1
- package/lib/powerquery-language-services/validate/validateLexAndParse.d.ts +0 -4
- package/lib/powerquery-language-services/validate/validateLexAndParse.js +0 -130
- package/lib/powerquery-language-services/validate/validateLexAndParse.js.map +0 -1
|
@@ -12,156 +12,237 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.AnalysisBase = void 0;
|
|
15
|
+
const PQP = require("@microsoft/powerquery-parser/lib/powerquery-parser");
|
|
15
16
|
const powerquery_parser_1 = require("@microsoft/powerquery-parser");
|
|
16
|
-
const
|
|
17
|
-
const
|
|
17
|
+
const vscode_languageserver_types_1 = require("vscode-languageserver-types");
|
|
18
|
+
const parser_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/parser");
|
|
18
19
|
const inspection_1 = require("../inspection");
|
|
19
20
|
const __1 = require("..");
|
|
20
|
-
const commonTypes_1 = require("../commonTypes");
|
|
21
21
|
const scopeUtils_1 = require("../inspection/scope/scopeUtils");
|
|
22
22
|
const providers_1 = require("../providers");
|
|
23
|
+
// Implementation of Analysis, subclass it as needed.
|
|
24
|
+
// Does not implement `dispose`.
|
|
23
25
|
class AnalysisBase {
|
|
24
|
-
constructor(
|
|
25
|
-
this.
|
|
26
|
+
constructor(textDocument, analysisSettings) {
|
|
27
|
+
this.textDocument = textDocument;
|
|
26
28
|
this.analysisSettings = analysisSettings;
|
|
27
|
-
this.
|
|
28
|
-
|
|
29
|
-
this.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
analysisSettings.
|
|
39
|
-
|
|
40
|
-
|
|
29
|
+
this.cancellableTokensByAction = new Map();
|
|
30
|
+
// Shared across actions
|
|
31
|
+
this.parseError = undefined;
|
|
32
|
+
this.parseState = undefined;
|
|
33
|
+
this.triedLexParse = undefined;
|
|
34
|
+
this.typeCache = {
|
|
35
|
+
scopeById: new Map(),
|
|
36
|
+
typeById: new Map(),
|
|
37
|
+
};
|
|
38
|
+
this.languageAutocompleteItemProvider = analysisSettings.languageAutocompleteItemProviderFactory
|
|
39
|
+
? analysisSettings.languageAutocompleteItemProviderFactory(analysisSettings.inspectionSettings.locale)
|
|
40
|
+
: new providers_1.LanguageAutocompleteItemProvider(analysisSettings.inspectionSettings.locale);
|
|
41
|
+
this.libraryProvider = analysisSettings.libraryProviderFactory
|
|
42
|
+
? analysisSettings.libraryProviderFactory(analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale)
|
|
43
|
+
: new providers_1.LibraryProvider(analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale);
|
|
44
|
+
this.localDocumentProvider = analysisSettings.localDocumentProviderFactory
|
|
45
|
+
? analysisSettings.localDocumentProviderFactory(textDocument.uri.toString(), this.typeCache, analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale)
|
|
46
|
+
: new providers_1.LocalDocumentProvider(this.textDocument.uri.toString(), this.typeCache, analysisSettings.inspectionSettings.library, analysisSettings.inspectionSettings.locale);
|
|
47
|
+
void this.initializeState();
|
|
41
48
|
}
|
|
42
|
-
getAutocompleteItems() {
|
|
43
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
44
|
-
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getAutocompleteItems.name, this.analysisSettings.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const maybeActiveLeafIdentifier = yield this.getActiveLeafIdentifier();
|
|
50
|
-
if (maybeActiveLeafIdentifier !== undefined) {
|
|
51
|
-
context = Object.assign(Object.assign({}, context), { range: __1.CommonTypesUtils.rangeFromTokenRange(maybeActiveLeafIdentifier.node.tokenRange), text: maybeActiveLeafIdentifier.normalizedLiteral, tokenKind: maybeActiveLeafIdentifier.node.kind });
|
|
49
|
+
getAutocompleteItems(position, cancellationToken) {
|
|
50
|
+
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
51
|
+
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getAutocompleteItems.name, this.analysisSettings.initialCorrelationId);
|
|
52
|
+
const context = yield this.getAutocompleteItemProviderContext(position, trace.id, cancellationToken);
|
|
53
|
+
if (context === undefined) {
|
|
54
|
+
trace.exit();
|
|
55
|
+
return undefined;
|
|
52
56
|
}
|
|
57
|
+
const autocompleteItemTasks = [
|
|
58
|
+
this.languageAutocompleteItemProvider.getAutocompleteItems(context),
|
|
59
|
+
this.libraryProvider.getAutocompleteItems(context),
|
|
60
|
+
this.localDocumentProvider.getAutocompleteItems(context),
|
|
61
|
+
];
|
|
62
|
+
const autocompleteItems = [];
|
|
53
63
|
// TODO: intellisense improvements
|
|
54
64
|
// - honor expected data type
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
for (const item of collection) {
|
|
60
|
-
if (partial.find((partialItem) => partialItem.label === item.label) === undefined) {
|
|
61
|
-
partial.push(item);
|
|
65
|
+
for (const result of yield Promise.all(autocompleteItemTasks)) {
|
|
66
|
+
if (powerquery_parser_1.ResultUtils.isOk(result) && result.value !== undefined) {
|
|
67
|
+
for (const item of result.value) {
|
|
68
|
+
autocompleteItems.push(item);
|
|
62
69
|
}
|
|
63
70
|
}
|
|
64
71
|
}
|
|
65
|
-
const result = partial.sort(inspection_1.AutocompleteItemUtils.compareFn);
|
|
66
72
|
trace.exit();
|
|
67
|
-
return
|
|
68
|
-
});
|
|
73
|
+
return autocompleteItems;
|
|
74
|
+
}), this.analysisSettings.inspectionSettings.locale);
|
|
69
75
|
}
|
|
70
|
-
getDefinition() {
|
|
71
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getDefinition.name, this.analysisSettings.
|
|
73
|
-
const
|
|
74
|
-
if (!
|
|
76
|
+
getDefinition(position, cancellationToken) {
|
|
77
|
+
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
78
|
+
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getDefinition.name, this.analysisSettings.initialCorrelationId);
|
|
79
|
+
const identifierContext = yield this.getDefinitionProviderContext(position, trace.id, cancellationToken);
|
|
80
|
+
if (!identifierContext) {
|
|
75
81
|
trace.exit();
|
|
76
|
-
return
|
|
82
|
+
return undefined;
|
|
77
83
|
}
|
|
78
|
-
const result = yield this.localDocumentProvider.getDefinition(
|
|
84
|
+
const result = yield this.localDocumentProvider.getDefinition(identifierContext);
|
|
79
85
|
trace.exit();
|
|
80
|
-
|
|
81
|
-
|
|
86
|
+
if (powerquery_parser_1.ResultUtils.isError(result)) {
|
|
87
|
+
throw result.error;
|
|
88
|
+
}
|
|
89
|
+
return result.value;
|
|
90
|
+
}), this.analysisSettings.inspectionSettings.locale);
|
|
82
91
|
}
|
|
83
|
-
|
|
84
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
85
|
-
const
|
|
92
|
+
getDocumentSymbols(cancellationToken) {
|
|
93
|
+
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
94
|
+
const parseState = yield this.getParseState();
|
|
95
|
+
if (parseState === undefined) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
const nodeIdMapCollection = parseState.contextState.nodeIdMapCollection;
|
|
99
|
+
const currentSymbols = [];
|
|
100
|
+
const parentSymbolById = new Map();
|
|
101
|
+
addIdentifierPairedExpressionSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken);
|
|
102
|
+
addRecordSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken);
|
|
103
|
+
return currentSymbols;
|
|
104
|
+
}), this.analysisSettings.inspectionSettings.locale);
|
|
105
|
+
}
|
|
106
|
+
getFoldingRanges(cancellationToken) {
|
|
107
|
+
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
108
|
+
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getFoldingRanges.name, this.analysisSettings.initialCorrelationId);
|
|
109
|
+
const parseState = yield this.getParseState();
|
|
110
|
+
if (parseState === undefined) {
|
|
111
|
+
trace.exit();
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
86
114
|
const result = yield this.localDocumentProvider.getFoldingRanges({
|
|
87
115
|
traceManager: this.analysisSettings.traceManager,
|
|
88
|
-
|
|
116
|
+
initialCorrelationId: trace.id,
|
|
117
|
+
cancellationToken,
|
|
118
|
+
nodeIdMapCollection: parseState.contextState.nodeIdMapCollection,
|
|
89
119
|
});
|
|
90
120
|
trace.exit();
|
|
91
|
-
|
|
92
|
-
|
|
121
|
+
if (powerquery_parser_1.ResultUtils.isError(result)) {
|
|
122
|
+
throw result.error;
|
|
123
|
+
}
|
|
124
|
+
return result.value;
|
|
125
|
+
}), this.analysisSettings.inspectionSettings.locale);
|
|
93
126
|
}
|
|
94
|
-
getHover() {
|
|
95
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
96
|
-
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getHover.name, this.analysisSettings.
|
|
97
|
-
const
|
|
98
|
-
if (!
|
|
127
|
+
getHover(position, cancellationToken) {
|
|
128
|
+
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
129
|
+
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getHover.name, this.analysisSettings.initialCorrelationId);
|
|
130
|
+
const hoverProviderContext = yield this.getHoverProviderContext(position, trace.id, cancellationToken);
|
|
131
|
+
if (!hoverProviderContext) {
|
|
99
132
|
trace.exit();
|
|
100
|
-
return
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
const triedHovers = yield Promise.all([
|
|
136
|
+
this.localDocumentProvider.getHover(hoverProviderContext),
|
|
137
|
+
this.libraryProvider.getHover(hoverProviderContext),
|
|
138
|
+
]);
|
|
139
|
+
// Keep track if any error was thrown, prioritized by the order of the providers
|
|
140
|
+
let firstError;
|
|
141
|
+
for (const triedHover of triedHovers) {
|
|
142
|
+
if (powerquery_parser_1.ResultUtils.isOk(triedHover)) {
|
|
143
|
+
if (triedHover.value !== undefined) {
|
|
144
|
+
trace.exit();
|
|
145
|
+
return triedHover.value;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else if (firstError === undefined) {
|
|
149
|
+
firstError = triedHover.error;
|
|
150
|
+
}
|
|
101
151
|
}
|
|
102
|
-
// Result priority is based on the order of the symbol providers
|
|
103
|
-
const result = AnalysisBase.resolveProviders(AnalysisBase.createHoverCalls(maybeIdentifierContext, [this.localDocumentProvider, this.librarySymbolProvider], this.analysisSettings.symbolProviderTimeoutInMS), commonTypes_1.EmptyHover);
|
|
104
152
|
trace.exit();
|
|
105
|
-
|
|
153
|
+
if (firstError !== undefined) {
|
|
154
|
+
// This is safe as the ensureResultAsync function catch the error.
|
|
155
|
+
throw firstError;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
}), this.analysisSettings.inspectionSettings.locale);
|
|
161
|
+
}
|
|
162
|
+
// Assumes that initializeState sets parseError to some value, which may include undefined.
|
|
163
|
+
getParseError() {
|
|
164
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
165
|
+
if (this.triedLexParse === undefined) {
|
|
166
|
+
yield this.initializeState();
|
|
167
|
+
}
|
|
168
|
+
return this.parseError;
|
|
106
169
|
});
|
|
107
170
|
}
|
|
108
|
-
|
|
171
|
+
// Assumes that initializeState sets parseState to some value, which may include undefined.
|
|
172
|
+
getParseState() {
|
|
109
173
|
return __awaiter(this, void 0, void 0, function* () {
|
|
110
|
-
|
|
174
|
+
if (this.triedLexParse === undefined) {
|
|
175
|
+
yield this.initializeState();
|
|
176
|
+
}
|
|
177
|
+
return this.parseState;
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
getPartialSemanticTokens(cancellationToken) {
|
|
181
|
+
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
182
|
+
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getPartialSemanticTokens.name, this.analysisSettings.initialCorrelationId);
|
|
111
183
|
const result = yield this.localDocumentProvider.getPartialSemanticTokens({
|
|
112
184
|
traceManager: this.analysisSettings.traceManager,
|
|
113
|
-
|
|
185
|
+
initialCorrelationId: trace.id,
|
|
186
|
+
cancellationToken,
|
|
187
|
+
library: this.analysisSettings.inspectionSettings.library,
|
|
188
|
+
parseState: powerquery_parser_1.Assert.asDefined(yield this.getParseState()),
|
|
114
189
|
});
|
|
115
190
|
trace.exit();
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
getSignatureHelp() {
|
|
120
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
121
|
-
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getSignatureHelp.name, this.analysisSettings.maybeInitialCorrelationId);
|
|
122
|
-
const maybeInspected = yield this.promiseMaybeInspected;
|
|
123
|
-
if (maybeInspected === undefined) {
|
|
124
|
-
trace.exit();
|
|
125
|
-
return commonTypes_1.EmptySignatureHelp;
|
|
191
|
+
if (powerquery_parser_1.ResultUtils.isError(result)) {
|
|
192
|
+
throw result.error;
|
|
126
193
|
}
|
|
127
|
-
|
|
128
|
-
|
|
194
|
+
return result.value;
|
|
195
|
+
}), this.analysisSettings.inspectionSettings.locale);
|
|
196
|
+
}
|
|
197
|
+
getSignatureHelp(position, cancellationToken) {
|
|
198
|
+
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
199
|
+
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getSignatureHelp.name, this.analysisSettings.initialCorrelationId);
|
|
200
|
+
const signatureProviderContext = yield this.getSignatureProviderContext(position, trace.id, cancellationToken);
|
|
201
|
+
if (signatureProviderContext === undefined) {
|
|
129
202
|
trace.exit();
|
|
130
|
-
return
|
|
203
|
+
return undefined;
|
|
131
204
|
}
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
205
|
+
const signatureTasks = yield Promise.all([
|
|
206
|
+
this.localDocumentProvider.getSignatureHelp(signatureProviderContext),
|
|
207
|
+
this.libraryProvider.getSignatureHelp(signatureProviderContext),
|
|
208
|
+
]);
|
|
209
|
+
for (const task of signatureTasks) {
|
|
210
|
+
if (powerquery_parser_1.ResultUtils.isOk(task) && task.value !== undefined) {
|
|
211
|
+
trace.exit();
|
|
212
|
+
return task.value;
|
|
213
|
+
}
|
|
136
214
|
}
|
|
137
|
-
// Result priority is based on the order of the symbol providers
|
|
138
|
-
const result = AnalysisBase.resolveProviders(AnalysisBase.createSignatureHelpCalls(context, [this.localDocumentProvider, this.librarySymbolProvider], this.analysisSettings.symbolProviderTimeoutInMS), commonTypes_1.EmptySignatureHelp);
|
|
139
215
|
trace.exit();
|
|
140
|
-
return
|
|
141
|
-
});
|
|
216
|
+
return undefined;
|
|
217
|
+
}), this.analysisSettings.inspectionSettings.locale);
|
|
142
218
|
}
|
|
143
|
-
getRenameEdits(newName) {
|
|
144
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
145
|
-
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getRenameEdits.name, this.analysisSettings.
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
219
|
+
getRenameEdits(position, newName, cancellationToken) {
|
|
220
|
+
return powerquery_parser_1.ResultUtils.ensureResultAsync(() => __awaiter(this, void 0, void 0, function* () {
|
|
221
|
+
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getRenameEdits.name, this.analysisSettings.initialCorrelationId);
|
|
222
|
+
const activeNode = powerquery_parser_1.Assert.asDefined(yield this.getActiveNode(position));
|
|
223
|
+
let leafIdentifier;
|
|
224
|
+
if (!inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode) ||
|
|
225
|
+
activeNode.inclusiveIdentifierUnderPosition === undefined) {
|
|
150
226
|
trace.exit();
|
|
151
|
-
return
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
leafIdentifier = activeNode.inclusiveIdentifierUnderPosition;
|
|
152
231
|
}
|
|
232
|
+
void (yield this.inspectNodeScope(activeNode, trace.id, cancellationToken));
|
|
233
|
+
const scopeById = this.typeCache.scopeById;
|
|
153
234
|
const identifiersToBeEdited = [];
|
|
154
235
|
let valueCreator = undefined;
|
|
155
|
-
if (
|
|
156
|
-
valueCreator =
|
|
236
|
+
if (leafIdentifier.node.kind === "GeneralizedIdentifier" /* GeneralizedIdentifier */) {
|
|
237
|
+
valueCreator = leafIdentifier.node;
|
|
157
238
|
}
|
|
158
|
-
else if ((
|
|
159
|
-
|
|
239
|
+
else if ((leafIdentifier.node.kind === "Identifier" /* Identifier */ ||
|
|
240
|
+
leafIdentifier.node.kind === "IdentifierExpression" /* IdentifierExpression */) &&
|
|
160
241
|
scopeById) {
|
|
161
242
|
// need to find this key value and modify all referring it
|
|
162
|
-
const identifierExpression =
|
|
163
|
-
?
|
|
164
|
-
:
|
|
243
|
+
const identifierExpression = leafIdentifier.node.kind === "IdentifierExpression" /* IdentifierExpression */
|
|
244
|
+
? leafIdentifier.node.identifier
|
|
245
|
+
: leafIdentifier.node;
|
|
165
246
|
switch (identifierExpression.identifierContextKind) {
|
|
166
247
|
case "Key" /* Key */:
|
|
167
248
|
case "Parameter" /* Parameter */:
|
|
@@ -170,29 +251,29 @@ class AnalysisBase {
|
|
|
170
251
|
break;
|
|
171
252
|
case "Value" /* Value */: {
|
|
172
253
|
// it is the identifier referring the value
|
|
173
|
-
let nodeScope =
|
|
254
|
+
let nodeScope = scopeById.get(identifierExpression.id);
|
|
174
255
|
// there might be a chance that its scope did not get populated yet, do another try
|
|
175
256
|
if (!nodeScope) {
|
|
176
|
-
yield
|
|
177
|
-
nodeScope =
|
|
257
|
+
void (yield __1.Inspection.tryNodeScope(this.analysisSettings.inspectionSettings, powerquery_parser_1.Assert.asDefined(yield this.getParseState()).contextState.nodeIdMapCollection, identifierExpression.id, scopeById));
|
|
258
|
+
nodeScope = scopeById.get(identifierExpression.id);
|
|
178
259
|
}
|
|
179
|
-
const scopeItem = (0, scopeUtils_1.findScopeItemByLiteral)(nodeScope,
|
|
260
|
+
const scopeItem = (0, scopeUtils_1.findScopeItemByLiteral)(nodeScope, leafIdentifier.normalizedLiteral);
|
|
180
261
|
if (scopeItem) {
|
|
181
|
-
const
|
|
182
|
-
if ((
|
|
183
|
-
if (
|
|
184
|
-
|
|
185
|
-
valueCreator =
|
|
262
|
+
const valueCreatorSearch = (0, scopeUtils_1.scopeCreatorIdentifier)(scopeItem);
|
|
263
|
+
if ((valueCreatorSearch === null || valueCreatorSearch === void 0 ? void 0 : valueCreatorSearch.kind) === "Identifier" /* Identifier */) {
|
|
264
|
+
if (valueCreatorSearch.identifierContextKind === "Key" /* Key */ ||
|
|
265
|
+
valueCreatorSearch.identifierContextKind === "Parameter" /* Parameter */) {
|
|
266
|
+
valueCreator = valueCreatorSearch;
|
|
186
267
|
}
|
|
187
268
|
else {
|
|
188
|
-
identifiersToBeEdited.push(
|
|
269
|
+
identifiersToBeEdited.push(valueCreatorSearch);
|
|
189
270
|
}
|
|
190
271
|
}
|
|
191
|
-
else if ((
|
|
192
|
-
valueCreator =
|
|
272
|
+
else if ((valueCreatorSearch === null || valueCreatorSearch === void 0 ? void 0 : valueCreatorSearch.kind) === "GeneralizedIdentifier" /* GeneralizedIdentifier */) {
|
|
273
|
+
valueCreator = valueCreatorSearch;
|
|
193
274
|
}
|
|
194
|
-
else if (
|
|
195
|
-
identifiersToBeEdited.push(
|
|
275
|
+
else if (valueCreatorSearch) {
|
|
276
|
+
identifiersToBeEdited.push(valueCreatorSearch);
|
|
196
277
|
}
|
|
197
278
|
}
|
|
198
279
|
break;
|
|
@@ -206,58 +287,31 @@ class AnalysisBase {
|
|
|
206
287
|
}
|
|
207
288
|
if (valueCreator) {
|
|
208
289
|
// need to populate the other identifiers referring it
|
|
209
|
-
identifiersToBeEdited.push(...(yield
|
|
290
|
+
identifiersToBeEdited.push(...(yield this.collectAllIdentifiersBeneath(powerquery_parser_1.Assert.asDefined(yield this.getParseState()).contextState.nodeIdMapCollection, valueCreator)));
|
|
210
291
|
}
|
|
211
|
-
// if none found, directly put
|
|
212
|
-
if (identifiersToBeEdited.length === 0 &&
|
|
213
|
-
identifiersToBeEdited.push(
|
|
214
|
-
?
|
|
215
|
-
:
|
|
292
|
+
// if none found, directly put inclusiveIdentifierUnderPosition in if it exists
|
|
293
|
+
if (identifiersToBeEdited.length === 0 && leafIdentifier) {
|
|
294
|
+
identifiersToBeEdited.push(leafIdentifier.node.kind === "IdentifierExpression" /* IdentifierExpression */
|
|
295
|
+
? leafIdentifier.node.identifier
|
|
296
|
+
: leafIdentifier.node);
|
|
216
297
|
}
|
|
217
298
|
const result = identifiersToBeEdited.map((one) => ({
|
|
218
|
-
range: PositionUtils.createRangeFromTokenRange(one.tokenRange),
|
|
299
|
+
range: __1.PositionUtils.createRangeFromTokenRange(one.tokenRange),
|
|
219
300
|
newText: newName,
|
|
220
301
|
}));
|
|
221
302
|
trace.exit();
|
|
222
303
|
return result;
|
|
223
|
-
});
|
|
304
|
+
}), this.analysisSettings.inspectionSettings.locale);
|
|
224
305
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
new Promise((resolve) => setTimeout(() => {
|
|
231
|
-
resolve(timeoutReturnValue);
|
|
232
|
-
}, timeoutInMS)),
|
|
233
|
-
]);
|
|
306
|
+
dispose() {
|
|
307
|
+
this.typeCache.scopeById.clear();
|
|
308
|
+
this.typeCache.typeById.clear();
|
|
309
|
+
for (const token of this.cancellableTokensByAction.values()) {
|
|
310
|
+
token.cancel();
|
|
234
311
|
}
|
|
235
|
-
|
|
236
|
-
}
|
|
237
|
-
static resolveProviders(calls, defaultReturnValue) {
|
|
238
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
239
|
-
const results = yield Promise.all(calls);
|
|
240
|
-
for (let i = 0; i < results.length; i += 1) {
|
|
241
|
-
const result = results[i];
|
|
242
|
-
if (result !== null) {
|
|
243
|
-
return result;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
return defaultReturnValue;
|
|
247
|
-
});
|
|
248
|
-
}
|
|
249
|
-
static createAutocompleteItemCalls(context, providers, timeoutInMS) {
|
|
250
|
-
// TODO: add tracing to the catch case
|
|
251
|
-
return providers.map((provider) => this.promiseWithTimeout(() => provider.getAutocompleteItems(context), [], timeoutInMS));
|
|
252
|
-
}
|
|
253
|
-
static createHoverCalls(context, providers, timeoutInMS) {
|
|
254
|
-
// TODO: add tracing to the catch case
|
|
255
|
-
return providers.map((provider) => this.promiseWithTimeout(() => provider.getHover(context), null, timeoutInMS));
|
|
256
|
-
}
|
|
257
|
-
static createSignatureHelpCalls(context, providers, timeoutInMS) {
|
|
258
|
-
// TODO: add tracing to the catch case
|
|
259
|
-
return providers.map((provider) => this.promiseWithTimeout(() => provider.getSignatureHelp(context), null, timeoutInMS));
|
|
312
|
+
this.cancellableTokensByAction.clear();
|
|
260
313
|
}
|
|
314
|
+
// protected abstract getText(range?: Range): string;
|
|
261
315
|
static isValidHoverIdentifier(activeNode) {
|
|
262
316
|
var _a;
|
|
263
317
|
const ancestry = activeNode.ancestry;
|
|
@@ -276,52 +330,338 @@ class AnalysisBase {
|
|
|
276
330
|
"GeneralizedIdentifierPairedExpression" /* GeneralizedIdentifierPairedExpression */,
|
|
277
331
|
"IdentifierPairedExpression" /* IdentifierPairedExpression */,
|
|
278
332
|
].includes(followingNode.node.kind) &&
|
|
279
|
-
[undefined, 1].includes(powerquery_parser_1.Assert.asDefined(leaf.node.
|
|
333
|
+
[undefined, 1].includes(powerquery_parser_1.Assert.asDefined(leaf.node.attributeIndex))) {
|
|
280
334
|
return false;
|
|
281
335
|
}
|
|
282
336
|
return true;
|
|
283
337
|
}
|
|
284
|
-
|
|
338
|
+
getAutocompleteItemProviderContext(position, correlationId, newCancellationToken) {
|
|
285
339
|
return __awaiter(this, void 0, void 0, function* () {
|
|
286
|
-
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.
|
|
287
|
-
const
|
|
288
|
-
|
|
289
|
-
if (maybeActiveNode === undefined ||
|
|
290
|
-
maybeIdentifierUnderPosition === undefined ||
|
|
291
|
-
!AnalysisBase.isValidHoverIdentifier(maybeActiveNode)) {
|
|
340
|
+
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getAutocompleteItemProviderContext.name, correlationId);
|
|
341
|
+
const activeNode = yield this.getActiveNode(position);
|
|
342
|
+
if (activeNode === undefined) {
|
|
292
343
|
trace.exit();
|
|
293
344
|
return undefined;
|
|
294
345
|
}
|
|
295
|
-
const
|
|
296
|
-
|
|
297
|
-
|
|
346
|
+
const autocomplete = powerquery_parser_1.Assert.asDefined(yield this.inspectAutocomplete(activeNode, trace.id, newCancellationToken));
|
|
347
|
+
const triedNodeScope = powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id, newCancellationToken));
|
|
348
|
+
const triedScopeType = powerquery_parser_1.Assert.asDefined(yield this.inspectScopeType(activeNode, trace.id, newCancellationToken));
|
|
349
|
+
const activeLeafIdentifier = inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)
|
|
350
|
+
? activeNode.inclusiveIdentifierUnderPosition
|
|
351
|
+
: undefined;
|
|
352
|
+
let result;
|
|
353
|
+
if (activeLeafIdentifier !== undefined) {
|
|
354
|
+
result = {
|
|
355
|
+
autocomplete,
|
|
356
|
+
triedNodeScope,
|
|
357
|
+
triedScopeType,
|
|
358
|
+
traceManager: this.analysisSettings.traceManager,
|
|
359
|
+
cancellationToken: newCancellationToken,
|
|
360
|
+
initialCorrelationId: trace.id,
|
|
361
|
+
range: __1.CommonTypesUtils.rangeFromTokenRange(activeLeafIdentifier.node.tokenRange),
|
|
362
|
+
text: activeLeafIdentifier.normalizedLiteral,
|
|
363
|
+
tokenKind: activeLeafIdentifier.node.kind,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
result = {
|
|
368
|
+
autocomplete,
|
|
369
|
+
triedNodeScope,
|
|
370
|
+
triedScopeType,
|
|
371
|
+
traceManager: this.analysisSettings.traceManager,
|
|
372
|
+
cancellationToken: newCancellationToken,
|
|
373
|
+
initialCorrelationId: trace.id,
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
trace.exit();
|
|
377
|
+
return result;
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
getDefinitionProviderContext(position, correlationId, cancellationToken) {
|
|
381
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
382
|
+
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getDefinitionProviderContext.name, correlationId);
|
|
383
|
+
const activeNode = yield this.getActiveNode(position);
|
|
384
|
+
if (activeNode === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
|
|
385
|
+
trace.exit();
|
|
386
|
+
return undefined;
|
|
387
|
+
}
|
|
388
|
+
const identifierUnderPosition = activeNode.exclusiveIdentifierUnderPosition;
|
|
389
|
+
if (identifierUnderPosition === undefined || !AnalysisBase.isValidHoverIdentifier(activeNode)) {
|
|
390
|
+
trace.exit();
|
|
391
|
+
return undefined;
|
|
392
|
+
}
|
|
393
|
+
const identifier = identifierUnderPosition.node.kind === "IdentifierExpression" /* IdentifierExpression */
|
|
394
|
+
? identifierUnderPosition.node.identifier
|
|
395
|
+
: identifierUnderPosition.node;
|
|
298
396
|
const context = {
|
|
299
397
|
traceManager: this.analysisSettings.traceManager,
|
|
300
398
|
range: __1.CommonTypesUtils.rangeFromTokenRange(identifier.tokenRange),
|
|
301
399
|
identifier,
|
|
302
|
-
|
|
400
|
+
cancellationToken,
|
|
401
|
+
initialCorrelationId: trace.id,
|
|
402
|
+
triedNodeScope: powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id, cancellationToken)),
|
|
303
403
|
};
|
|
304
404
|
trace.exit();
|
|
305
405
|
return context;
|
|
306
406
|
});
|
|
307
407
|
}
|
|
308
|
-
|
|
408
|
+
getHoverProviderContext(position, correlationId, cancellationToken) {
|
|
309
409
|
return __awaiter(this, void 0, void 0, function* () {
|
|
310
|
-
const
|
|
311
|
-
|
|
410
|
+
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getHoverProviderContext.name, correlationId);
|
|
411
|
+
const activeNode = yield this.getActiveNode(position);
|
|
412
|
+
if (activeNode === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
|
|
413
|
+
trace.exit();
|
|
312
414
|
return undefined;
|
|
313
415
|
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
416
|
+
const identifierUnderPosition = activeNode.exclusiveIdentifierUnderPosition;
|
|
417
|
+
if (identifierUnderPosition === undefined || !AnalysisBase.isValidHoverIdentifier(activeNode)) {
|
|
418
|
+
trace.exit();
|
|
419
|
+
return undefined;
|
|
420
|
+
}
|
|
421
|
+
const identifier = identifierUnderPosition.node.kind === "IdentifierExpression" /* IdentifierExpression */
|
|
422
|
+
? identifierUnderPosition.node.identifier
|
|
423
|
+
: identifierUnderPosition.node;
|
|
424
|
+
const context = {
|
|
425
|
+
traceManager: this.analysisSettings.traceManager,
|
|
426
|
+
range: __1.CommonTypesUtils.rangeFromTokenRange(identifier.tokenRange),
|
|
427
|
+
identifier,
|
|
428
|
+
cancellationToken,
|
|
429
|
+
initialCorrelationId: trace.id,
|
|
430
|
+
activeNode,
|
|
431
|
+
inspectionSettings: Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }),
|
|
432
|
+
parseState: powerquery_parser_1.Assert.asDefined(yield this.getParseState()),
|
|
433
|
+
triedNodeScope: powerquery_parser_1.Assert.asDefined(yield this.inspectNodeScope(activeNode, trace.id, cancellationToken)),
|
|
434
|
+
triedScopeType: powerquery_parser_1.Assert.asDefined(yield this.inspectScopeType(activeNode, trace.id, cancellationToken)),
|
|
435
|
+
};
|
|
436
|
+
trace.exit();
|
|
437
|
+
return context;
|
|
317
438
|
});
|
|
318
439
|
}
|
|
319
|
-
|
|
320
|
-
|
|
440
|
+
getSignatureProviderContext(position, correlationId, newCancellationToken) {
|
|
441
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
442
|
+
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.getSignatureProviderContext.name, correlationId);
|
|
443
|
+
const triedCurrentInvokeExpression = yield this.inspectCurrentInvokeExpression(position, trace.id, newCancellationToken);
|
|
444
|
+
if (triedCurrentInvokeExpression === undefined ||
|
|
445
|
+
powerquery_parser_1.ResultUtils.isError(triedCurrentInvokeExpression) ||
|
|
446
|
+
triedCurrentInvokeExpression.value === undefined) {
|
|
447
|
+
trace.exit();
|
|
448
|
+
return undefined;
|
|
449
|
+
}
|
|
450
|
+
const invokeExpression = triedCurrentInvokeExpression.value;
|
|
451
|
+
const functionName = invokeExpression.name !== undefined ? invokeExpression.name : undefined;
|
|
452
|
+
const argumentOrdinal = invokeExpression.arguments !== undefined ? invokeExpression.arguments.argumentOrdinal : undefined;
|
|
453
|
+
if (functionName === undefined || argumentOrdinal === undefined) {
|
|
454
|
+
trace.exit();
|
|
455
|
+
return undefined;
|
|
456
|
+
}
|
|
457
|
+
const result = {
|
|
458
|
+
argumentOrdinal,
|
|
459
|
+
functionName,
|
|
460
|
+
isNameInLocalScope: invokeExpression.isNameInLocalScope,
|
|
461
|
+
functionType: invokeExpression.functionType,
|
|
462
|
+
traceManager: this.analysisSettings.traceManager,
|
|
463
|
+
cancellationToken: newCancellationToken,
|
|
464
|
+
initialCorrelationId: trace.id,
|
|
465
|
+
triedCurrentInvokeExpression: yield __1.Inspection.tryCurrentInvokeExpression(Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken: newCancellationToken, initialCorrelationId: trace.id }), powerquery_parser_1.Assert.asDefined(yield this.getParseState()).contextState.nodeIdMapCollection, powerquery_parser_1.Assert.asDefined(yield this.getActiveNode(position)), this.typeCache),
|
|
466
|
+
};
|
|
467
|
+
trace.exit();
|
|
468
|
+
return result;
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
getTypeCache() {
|
|
472
|
+
return this.typeCache;
|
|
473
|
+
}
|
|
474
|
+
collectAllIdentifiersBeneath(nodeIdMapCollection, valueCreator) {
|
|
475
|
+
var _a, _b, _c, _d, _e;
|
|
476
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
477
|
+
const astNodeById = nodeIdMapCollection.astNodeById;
|
|
478
|
+
const childIdsById = nodeIdMapCollection.childIdsById;
|
|
479
|
+
const originLiteral = valueCreator.literal;
|
|
480
|
+
const entry = (0, scopeUtils_1.findDirectUpperScopeExpression)(nodeIdMapCollection, valueCreator.id);
|
|
481
|
+
if (entry) {
|
|
482
|
+
const allIdentifierIdSet = (_a = nodeIdMapCollection.idsByNodeKind.get("Identifier" /* Identifier */)) !== null && _a !== void 0 ? _a : new Set();
|
|
483
|
+
const allGeneralizedIdentifierIdSet = (_b = nodeIdMapCollection.idsByNodeKind.get("GeneralizedIdentifier" /* GeneralizedIdentifier */)) !== null && _b !== void 0 ? _b : new Set();
|
|
484
|
+
const current = entry;
|
|
485
|
+
const idsByTiers = [];
|
|
486
|
+
let currentTier = ((_c = childIdsById.get(current.id)) !== null && _c !== void 0 ? _c : []).slice();
|
|
487
|
+
while (currentTier.length) {
|
|
488
|
+
const toBePushed = currentTier.filter((one) => allIdentifierIdSet.has(one) || allGeneralizedIdentifierIdSet.has(one));
|
|
489
|
+
toBePushed.length && idsByTiers.push(toBePushed);
|
|
490
|
+
currentTier = currentTier.slice();
|
|
491
|
+
let nextTier = [];
|
|
492
|
+
while (currentTier.length) {
|
|
493
|
+
const oneNode = (_d = currentTier.shift()) !== null && _d !== void 0 ? _d : -1;
|
|
494
|
+
const childrenOfTheNode = ((_e = childIdsById.get(oneNode)) !== null && _e !== void 0 ? _e : []).slice();
|
|
495
|
+
nextTier = nextTier.concat(childrenOfTheNode);
|
|
496
|
+
}
|
|
497
|
+
currentTier = nextTier;
|
|
498
|
+
}
|
|
499
|
+
// filter literal names
|
|
500
|
+
const completeIdentifierNodes = idsByTiers
|
|
501
|
+
.flat(1)
|
|
502
|
+
.map((one) => astNodeById.get(one))
|
|
503
|
+
.filter(Boolean);
|
|
504
|
+
let filteredIdentifierNodes = completeIdentifierNodes.filter((one) => one.literal === originLiteral);
|
|
505
|
+
// populate the scope items for each
|
|
506
|
+
yield Promise.all(filteredIdentifierNodes
|
|
507
|
+
.filter((oneIdentifier) => oneIdentifier.kind === "GeneralizedIdentifier" /* GeneralizedIdentifier */ ||
|
|
508
|
+
oneIdentifier.identifierContextKind === "Value" /* Value */)
|
|
509
|
+
.map((oneIdentifier) => __1.Inspection.tryNodeScope(this.analysisSettings.inspectionSettings, nodeIdMapCollection, oneIdentifier.id, this.typeCache.scopeById)));
|
|
510
|
+
filteredIdentifierNodes = filteredIdentifierNodes.filter((oneIdentifierNode) => {
|
|
511
|
+
if (oneIdentifierNode.kind === "GeneralizedIdentifier" /* GeneralizedIdentifier */) {
|
|
512
|
+
return oneIdentifierNode.id === valueCreator.id;
|
|
513
|
+
}
|
|
514
|
+
else if (oneIdentifierNode.identifierContextKind === "Value" /* Value */) {
|
|
515
|
+
const theScope = this.typeCache.scopeById.get(oneIdentifierNode.id);
|
|
516
|
+
const theScopeItem = (0, scopeUtils_1.findScopeItemByLiteral)(theScope, originLiteral);
|
|
517
|
+
const theCreatorIdentifier = (0, scopeUtils_1.scopeCreatorIdentifier)(theScopeItem);
|
|
518
|
+
return theCreatorIdentifier && theCreatorIdentifier.id === valueCreator.id;
|
|
519
|
+
}
|
|
520
|
+
else if (oneIdentifierNode.identifierContextKind === "Key" /* Key */ ||
|
|
521
|
+
oneIdentifierNode.identifierContextKind === "Parameter" /* Parameter */) {
|
|
522
|
+
return oneIdentifierNode.id === valueCreator.id;
|
|
523
|
+
}
|
|
524
|
+
return false;
|
|
525
|
+
});
|
|
526
|
+
return filteredIdentifierNodes;
|
|
527
|
+
}
|
|
528
|
+
return [];
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
// Performs a lex + parse of the document, then caches the results into local variables.
|
|
532
|
+
// Any code which operates on the parse state should use this method to ensure that the parse state is initialized.
|
|
533
|
+
initializeState() {
|
|
534
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
535
|
+
const trace = this.analysisSettings.traceManager.entry("AnalysisBase" /* AnalysisBase */, this.initializeState.name, this.analysisSettings.initialCorrelationId);
|
|
536
|
+
const updatedSettings = Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { initialCorrelationId: trace.id });
|
|
537
|
+
const triedLexParse = yield PQP.TaskUtils.tryLexParse(updatedSettings, this.textDocument.getText());
|
|
538
|
+
this.triedLexParse = triedLexParse;
|
|
539
|
+
if (PQP.TaskUtils.isLexStageError(triedLexParse) || PQP.TaskUtils.isParseStageCommonError(triedLexParse)) {
|
|
540
|
+
trace.exit({ ["IsError" /* IsError */]: true });
|
|
541
|
+
}
|
|
542
|
+
else if (PQP.TaskUtils.isParseStageError(triedLexParse)) {
|
|
543
|
+
this.parseState = triedLexParse.parseState;
|
|
544
|
+
this.parseError = triedLexParse.error;
|
|
545
|
+
}
|
|
546
|
+
else {
|
|
547
|
+
this.parseState = triedLexParse.parseState;
|
|
548
|
+
}
|
|
549
|
+
trace.exit();
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
// We should only get an undefined for an activeNode iff a parse pass hasn't been done.
|
|
553
|
+
getActiveNode(position) {
|
|
554
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
555
|
+
const parseState = yield this.getParseState();
|
|
556
|
+
if (parseState === undefined) {
|
|
557
|
+
return undefined;
|
|
558
|
+
}
|
|
559
|
+
return inspection_1.ActiveNodeUtils.activeNode(parseState.contextState.nodeIdMapCollection, position);
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
inspectAutocomplete(activeNode, correlationId, cancellationToken) {
|
|
563
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
564
|
+
const parseState = yield this.getParseState();
|
|
565
|
+
if (parseState === undefined) {
|
|
566
|
+
return undefined;
|
|
567
|
+
}
|
|
568
|
+
return yield __1.Inspection.autocomplete(Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }), parseState, this.typeCache, activeNode, yield this.getParseError());
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
inspectCurrentInvokeExpression(position, correlationId, cancellationToken) {
|
|
572
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
573
|
+
const activeNode = yield this.getActiveNode(position);
|
|
574
|
+
const parseState = yield this.getParseState();
|
|
575
|
+
if (activeNode === undefined || parseState === undefined) {
|
|
576
|
+
return undefined;
|
|
577
|
+
}
|
|
578
|
+
return yield __1.Inspection.tryCurrentInvokeExpression(Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }), parseState.contextState.nodeIdMapCollection, activeNode, this.typeCache);
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
inspectNodeScope(activeNode, correlationId, cancellationToken) {
|
|
321
582
|
return __awaiter(this, void 0, void 0, function* () {
|
|
322
|
-
|
|
583
|
+
const parseState = yield this.getParseState();
|
|
584
|
+
if (parseState === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
|
|
585
|
+
return undefined;
|
|
586
|
+
}
|
|
587
|
+
return yield __1.Inspection.tryNodeScope(Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }), parseState.contextState.nodeIdMapCollection, inspection_1.ActiveNodeUtils.assertGetLeaf(activeNode).node.id, this.typeCache.scopeById);
|
|
588
|
+
});
|
|
589
|
+
}
|
|
590
|
+
inspectScopeType(activeNode, correlationId, cancellationToken) {
|
|
591
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
592
|
+
const parseState = yield this.getParseState();
|
|
593
|
+
if (parseState === undefined || !inspection_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
|
|
594
|
+
return undefined;
|
|
595
|
+
}
|
|
596
|
+
return yield __1.Inspection.tryScopeType(Object.assign(Object.assign({}, this.analysisSettings.inspectionSettings), { cancellationToken, initialCorrelationId: correlationId }), parseState.contextState.nodeIdMapCollection, inspection_1.ActiveNodeUtils.assertGetLeaf(activeNode).node.id, this.typeCache);
|
|
323
597
|
});
|
|
324
598
|
}
|
|
325
599
|
}
|
|
326
600
|
exports.AnalysisBase = AnalysisBase;
|
|
601
|
+
function addIdentifierPairedExpressionSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken) {
|
|
602
|
+
var _a;
|
|
603
|
+
const identifierPairedExpressionIds = (_a = nodeIdMapCollection.idsByNodeKind.get("IdentifierPairedExpression" /* IdentifierPairedExpression */)) !== null && _a !== void 0 ? _a : new Set();
|
|
604
|
+
for (const nodeId of identifierPairedExpressionIds) {
|
|
605
|
+
cancellationToken.throwIfCancelled();
|
|
606
|
+
const xorNode = parser_1.NodeIdMapUtils.assertGetXorChecked(nodeIdMapCollection, nodeId, "IdentifierPairedExpression" /* IdentifierPairedExpression */);
|
|
607
|
+
if (!parser_1.XorNodeUtils.isAstXor(xorNode)) {
|
|
608
|
+
continue;
|
|
609
|
+
}
|
|
610
|
+
const astNode = xorNode.node;
|
|
611
|
+
const documentSymbol = __1.InspectionUtils.getSymbolForIdentifierPairedExpression(astNode);
|
|
612
|
+
addDocumentSymbols(nodeIdMapCollection, parentSymbolById, nodeId, currentSymbols, documentSymbol);
|
|
613
|
+
parentSymbolById.set(nodeId, documentSymbol);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
function addRecordSymbols(nodeIdMapCollection, currentSymbols, parentSymbolById, cancellationToken) {
|
|
617
|
+
var _a, _b;
|
|
618
|
+
const recordIdCollections = [
|
|
619
|
+
(_a = nodeIdMapCollection.idsByNodeKind.get("RecordExpression" /* RecordExpression */)) !== null && _a !== void 0 ? _a : new Set(),
|
|
620
|
+
(_b = nodeIdMapCollection.idsByNodeKind.get("RecordLiteral" /* RecordLiteral */)) !== null && _b !== void 0 ? _b : new Set(),
|
|
621
|
+
];
|
|
622
|
+
for (const collection of recordIdCollections) {
|
|
623
|
+
for (const nodeId of collection) {
|
|
624
|
+
cancellationToken.throwIfCancelled();
|
|
625
|
+
const xorNode = parser_1.NodeIdMapUtils.assertGetXorChecked(nodeIdMapCollection, nodeId, ["RecordExpression" /* RecordExpression */, "RecordLiteral" /* RecordLiteral */]);
|
|
626
|
+
if (!parser_1.XorNodeUtils.isAstXor(xorNode)) {
|
|
627
|
+
continue;
|
|
628
|
+
}
|
|
629
|
+
const astNode = xorNode.node;
|
|
630
|
+
// Process the record if the immediate parent is a Struct
|
|
631
|
+
const parentId = nodeIdMapCollection.parentIdById.get(astNode.id);
|
|
632
|
+
const parentSymbol = parentId ? parentSymbolById.get(parentId) : undefined;
|
|
633
|
+
if (parentSymbol && parentSymbol.kind === vscode_languageserver_types_1.SymbolKind.Struct) {
|
|
634
|
+
const fieldSymbols = __1.InspectionUtils.getSymbolsForRecord(astNode);
|
|
635
|
+
if (fieldSymbols.length > 0) {
|
|
636
|
+
addDocumentSymbols(nodeIdMapCollection, parentSymbolById, astNode.id, currentSymbols, ...fieldSymbols);
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
function addDocumentSymbols(nodeIdMapCollection, parentSymbolById, nodeId, currentSymbols, ...newSymbols) {
|
|
643
|
+
const parentSymbol = findParentSymbol(nodeIdMapCollection, parentSymbolById, nodeId);
|
|
644
|
+
if (parentSymbol) {
|
|
645
|
+
if (!parentSymbol.children) {
|
|
646
|
+
parentSymbol.children = [];
|
|
647
|
+
}
|
|
648
|
+
parentSymbol.children.push(...newSymbols);
|
|
649
|
+
return;
|
|
650
|
+
}
|
|
651
|
+
// Add to the top level
|
|
652
|
+
currentSymbols.push(...newSymbols);
|
|
653
|
+
}
|
|
654
|
+
function findParentSymbol(nodeIdMapCollection, parentSymbolById, nodeId) {
|
|
655
|
+
// Get parent for current node
|
|
656
|
+
const parentNodeId = nodeIdMapCollection.parentIdById.get(nodeId);
|
|
657
|
+
if (!parentNodeId) {
|
|
658
|
+
// No more parents to check
|
|
659
|
+
return undefined;
|
|
660
|
+
}
|
|
661
|
+
let parentSymbol = parentSymbolById.get(parentNodeId);
|
|
662
|
+
if (!parentSymbol) {
|
|
663
|
+
parentSymbol = findParentSymbol(nodeIdMapCollection, parentSymbolById, parentNodeId);
|
|
664
|
+
}
|
|
665
|
+
return parentSymbol;
|
|
666
|
+
}
|
|
327
667
|
//# sourceMappingURL=analysisBase.js.map
|