@microsoft/powerquery-language-services 0.2.17 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/powerquery-language-services/analysis/analysisBase.d.ts +4 -6
- package/lib/powerquery-language-services/analysis/analysisBase.js +120 -229
- package/lib/powerquery-language-services/analysis/analysisBase.js.map +1 -1
- package/lib/powerquery-language-services/analysis/analysisSettings.d.ts +2 -2
- package/lib/powerquery-language-services/analysis/analysisUtils.js +1 -1
- package/lib/powerquery-language-services/analysis/analysisUtils.js.map +1 -1
- package/lib/powerquery-language-services/analysis/documentAnalysis.d.ts +0 -2
- package/lib/powerquery-language-services/analysis/documentAnalysis.js +11 -32
- package/lib/powerquery-language-services/analysis/documentAnalysis.js.map +1 -1
- package/lib/powerquery-language-services/commonTypes.js +1 -1
- package/lib/powerquery-language-services/commonTypes.js.map +1 -1
- package/lib/powerquery-language-services/documentSymbols.d.ts +1 -1
- package/lib/powerquery-language-services/documentSymbols.js +62 -111
- package/lib/powerquery-language-services/documentSymbols.js.map +1 -1
- package/lib/powerquery-language-services/formatter.d.ts +1 -1
- package/lib/powerquery-language-services/formatter.js +35 -34
- package/lib/powerquery-language-services/formatter.js.map +1 -1
- package/lib/powerquery-language-services/index.js +2 -2
- package/lib/powerquery-language-services/index.js.map +1 -1
- package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js +74 -131
- package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js.map +1 -1
- package/lib/powerquery-language-services/inspection/activeNode/index.js +1 -1
- package/lib/powerquery-language-services/inspection/activeNode/index.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js +117 -187
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js +29 -31
- 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 -2
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js +97 -114
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js +11 -11
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js +9 -9
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js +5 -5
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js +43 -56
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js +10 -10
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js +11 -11
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js.map +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.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.js +28 -28
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/common.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js +28 -31
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js +19 -23
- package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteUtils.js +5 -5
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteUtils.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/common.js +2 -13
- package/lib/powerquery-language-services/inspection/autocomplete/common.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/index.js +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/index.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/task.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/task.js +36 -25
- package/lib/powerquery-language-services/inspection/autocomplete/task.js.map +1 -1
- package/lib/powerquery-language-services/inspection/commonTypes.d.ts +6 -5
- package/lib/powerquery-language-services/inspection/expectedType.js +66 -54
- package/lib/powerquery-language-services/inspection/expectedType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/externalType/externalType.d.ts +2 -2
- package/lib/powerquery-language-services/inspection/externalType/externalType.js +2 -1
- package/lib/powerquery-language-services/inspection/externalType/externalType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/externalType/externalTypeUtils.js +3 -3
- package/lib/powerquery-language-services/inspection/externalType/externalTypeUtils.js.map +1 -1
- package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js +49 -66
- package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js +74 -99
- package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/jaroWinkler.js +26 -42
- package/lib/powerquery-language-services/inspection/jaroWinkler.js.map +1 -1
- package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js +18 -51
- package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/scope/scopeInspection.d.ts +3 -3
- package/lib/powerquery-language-services/inspection/scope/scopeInspection.js +237 -282
- package/lib/powerquery-language-services/inspection/scope/scopeInspection.js.map +1 -1
- package/lib/powerquery-language-services/inspection/task.d.ts +2 -2
- package/lib/powerquery-language-services/inspection/task.js +52 -41
- package/lib/powerquery-language-services/inspection/task.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/index.js +1 -1
- package/lib/powerquery-language-services/inspection/type/index.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/common.d.ts +9 -9
- package/lib/powerquery-language-services/inspection/type/inspectType/common.js +353 -335
- 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 +31 -41
- package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeConstant.js +3 -3
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeConstant.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 +29 -19
- 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 +27 -17
- 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 +4 -0
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js +68 -0
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js.map +1 -0
- package/lib/powerquery-language-services/inspection/type/inspectType/{inspectTypeFieldProjection.d.ts → inspectTypeField/inspectTypeFieldProjection.d.ts} +2 -2
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js +103 -0
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js.map +1 -0
- package/lib/powerquery-language-services/inspection/type/inspectType/{inspectTypeFieldSelector.d.ts → inspectTypeField/inspectTypeFieldSelector.d.ts} +2 -2
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js +76 -0
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js.map +1 -0
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js +24 -12
- 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 +61 -53
- 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 +43 -35
- 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 +28 -18
- 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 +28 -18
- 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 +42 -30
- 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 +55 -64
- 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 +26 -16
- 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 +34 -24
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js +9 -10
- 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 +33 -23
- 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 +22 -23
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js +9 -10
- 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 +40 -30
- 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 +31 -41
- 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 +27 -28
- 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 +44 -54
- 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 +132 -179
- 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 +36 -37
- 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 +57 -105
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/task.d.ts +2 -2
- package/lib/powerquery-language-services/inspection/type/task.js +59 -104
- package/lib/powerquery-language-services/inspection/type/task.js.map +1 -1
- package/lib/powerquery-language-services/inspectionSettings.d.ts +2 -0
- package/lib/powerquery-language-services/inspectionUtils.d.ts +5 -4
- package/lib/powerquery-language-services/inspectionUtils.js +81 -137
- package/lib/powerquery-language-services/inspectionUtils.js.map +1 -1
- package/lib/powerquery-language-services/languageServiceUtils.js +1 -1
- package/lib/powerquery-language-services/languageServiceUtils.js.map +1 -1
- package/lib/powerquery-language-services/library/libraryUtils.js +11 -11
- package/lib/powerquery-language-services/library/libraryUtils.js.map +1 -1
- package/lib/powerquery-language-services/localization/localization.js +9 -13
- package/lib/powerquery-language-services/localization/localization.js.map +1 -1
- package/lib/powerquery-language-services/localization/localizationUtils.js +1 -1
- package/lib/powerquery-language-services/localization/localizationUtils.js.map +1 -1
- package/lib/powerquery-language-services/localization/templates.js +43 -43
- package/lib/powerquery-language-services/localization/templates.js.map +1 -1
- package/lib/powerquery-language-services/positionUtils.d.ts +5 -5
- package/lib/powerquery-language-services/positionUtils.js +53 -33
- package/lib/powerquery-language-services/positionUtils.js.map +1 -1
- package/lib/powerquery-language-services/providers/languageCompletionItemProvider.d.ts +3 -3
- package/lib/powerquery-language-services/providers/languageCompletionItemProvider.js +40 -94
- package/lib/powerquery-language-services/providers/languageCompletionItemProvider.js.map +1 -1
- package/lib/powerquery-language-services/providers/librarySymbolProvider.js +66 -138
- package/lib/powerquery-language-services/providers/librarySymbolProvider.js.map +1 -1
- package/lib/powerquery-language-services/providers/localDocumentSymbolProvider.d.ts +4 -6
- package/lib/powerquery-language-services/providers/localDocumentSymbolProvider.js +137 -213
- package/lib/powerquery-language-services/providers/localDocumentSymbolProvider.js.map +1 -1
- package/lib/powerquery-language-services/providers/nullSymbolProvider.js +21 -52
- package/lib/powerquery-language-services/providers/nullSymbolProvider.js.map +1 -1
- package/lib/powerquery-language-services/validate/validate.d.ts +1 -1
- package/lib/powerquery-language-services/validate/validate.js +38 -42
- package/lib/powerquery-language-services/validate/validate.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.d.ts +1 -1
- package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js +82 -129
- package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateFunctionExpression.d.ts +1 -1
- package/lib/powerquery-language-services/validate/validateFunctionExpression.js +61 -101
- 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 +61 -98
- package/lib/powerquery-language-services/validate/validateInvokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateLexAndParse.d.ts +1 -1
- package/lib/powerquery-language-services/validate/validateLexAndParse.js +114 -122
- package/lib/powerquery-language-services/validate/validateLexAndParse.js.map +1 -1
- package/lib/powerquery-language-services/validate/validationSettings/validationSettingsUtils.js +1 -12
- package/lib/powerquery-language-services/validate/validationSettings/validationSettingsUtils.js.map +1 -1
- package/lib/powerquery-language-services/workspaceCache/workspaceCache.d.ts +3 -13
- package/lib/powerquery-language-services/workspaceCache/workspaceCacheUtils.d.ts +7 -8
- package/lib/powerquery-language-services/workspaceCache/workspaceCacheUtils.js +93 -147
- package/lib/powerquery-language-services/workspaceCache/workspaceCacheUtils.js.map +1 -1
- package/package.json +5 -4
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldProjection.js +0 -124
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldProjection.js.map +0 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSelector.js +0 -68
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSelector.js.map +0 -1
|
@@ -1,74 +1,59 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// Copyright (c) Microsoft Corporation.
|
|
3
3
|
// Licensed under the MIT license.
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
};
|
|
13
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
14
|
-
};
|
|
15
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
16
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
17
|
-
if (!m) return o;
|
|
18
|
-
var i = m.call(o), r, ar = [], e;
|
|
19
|
-
try {
|
|
20
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
21
|
-
}
|
|
22
|
-
catch (error) { e = { error: error }; }
|
|
23
|
-
finally {
|
|
24
|
-
try {
|
|
25
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
26
|
-
}
|
|
27
|
-
finally { if (e) throw e.error; }
|
|
28
|
-
}
|
|
29
|
-
return ar;
|
|
4
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
5
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
6
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
8
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
9
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
10
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11
|
+
});
|
|
30
12
|
};
|
|
31
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
14
|
exports.maybeDereferencedIdentifier = exports.assertGetOrCreateNodeScope = exports.tryNodeScope = void 0;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
15
|
+
const parser_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/parser");
|
|
16
|
+
const powerquery_parser_1 = require("@microsoft/powerquery-parser");
|
|
17
|
+
const language_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/language");
|
|
18
|
+
const __1 = require("../..");
|
|
19
|
+
const pseudoFunctionExpressionType_1 = require("../pseudoFunctionExpressionType");
|
|
38
20
|
// Builds a scope for the given node.
|
|
39
21
|
function tryNodeScope(settings, nodeIdMapCollection, nodeId,
|
|
40
22
|
// scopeById may get mutated by adding new entries.
|
|
41
23
|
scopeById) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
const trace = settings.traceManager.entry("Scope" /* Scope */, tryNodeScope.name);
|
|
26
|
+
const result = yield powerquery_parser_1.ResultUtils.ensureResultAsync(settings.locale, () => __awaiter(this, void 0, void 0, function* () {
|
|
27
|
+
const ancestry = parser_1.AncestryUtils.assertGetAncestry(nodeIdMapCollection, nodeId);
|
|
28
|
+
if (ancestry.length === 0) {
|
|
29
|
+
return new Map();
|
|
30
|
+
}
|
|
31
|
+
const inspected = yield inspectScope(settings, nodeIdMapCollection, ancestry, scopeById);
|
|
32
|
+
return powerquery_parser_1.Assert.asDefined(inspected.get(nodeId), `expected nodeId in scope result`, { nodeId });
|
|
33
|
+
}));
|
|
34
|
+
trace.exit();
|
|
35
|
+
return result;
|
|
50
36
|
});
|
|
51
|
-
trace.exit();
|
|
52
|
-
return result;
|
|
53
37
|
}
|
|
54
38
|
exports.tryNodeScope = tryNodeScope;
|
|
55
39
|
function assertGetOrCreateNodeScope(settings, nodeIdMapCollection, nodeId,
|
|
56
40
|
// scopeById may get mutated by adding new entries.
|
|
57
41
|
scopeById) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
const trace = settings.traceManager.entry("Scope" /* Scope */, assertGetOrCreateNodeScope.name);
|
|
44
|
+
const maybeScope = scopeById.get(nodeId);
|
|
45
|
+
if (maybeScope !== undefined) {
|
|
46
|
+
trace.exit({ ["IsThrowing" /* IsThrowing */]: false });
|
|
47
|
+
return powerquery_parser_1.ResultUtils.boxOk(maybeScope);
|
|
48
|
+
}
|
|
49
|
+
const triedNodeScope = yield tryNodeScope(settings, nodeIdMapCollection, nodeId, scopeById);
|
|
50
|
+
if (powerquery_parser_1.ResultUtils.isError(triedNodeScope)) {
|
|
51
|
+
trace.exit({ ["IsThrowing" /* IsThrowing */]: true });
|
|
52
|
+
throw triedNodeScope;
|
|
53
|
+
}
|
|
54
|
+
trace.exit({ ["IsThrowing" /* IsThrowing */]: false });
|
|
55
|
+
return triedNodeScope;
|
|
56
|
+
});
|
|
72
57
|
}
|
|
73
58
|
exports.assertGetOrCreateNodeScope = assertGetOrCreateNodeScope;
|
|
74
59
|
// Recusrive deference of the identifier until it reaches the value node.
|
|
@@ -76,132 +61,138 @@ exports.assertGetOrCreateNodeScope = assertGetOrCreateNodeScope;
|
|
|
76
61
|
function maybeDereferencedIdentifier(settings, nodeIdMapCollection, xorNode,
|
|
77
62
|
// If a map is given, then it's mutated and returned.
|
|
78
63
|
// Else create a new Map instance and return that instead.
|
|
79
|
-
scopeById) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
64
|
+
scopeById = new Map()) {
|
|
65
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
const trace = settings.traceManager.entry("Scope" /* Scope */, maybeDereferencedIdentifier.name, __1.TraceUtils.createXorNodeDetails(xorNode));
|
|
67
|
+
parser_1.XorNodeUtils.assertIsIdentifier(xorNode);
|
|
68
|
+
if (parser_1.XorNodeUtils.isContextXor(xorNode)) {
|
|
69
|
+
trace.exit({ ["Result" /* Result */]: undefined });
|
|
70
|
+
return powerquery_parser_1.ResultUtils.boxOk(undefined);
|
|
71
|
+
}
|
|
72
|
+
const identifier = xorNode.node;
|
|
73
|
+
let identifierLiteral;
|
|
74
|
+
let isIdentifierRecurisve;
|
|
75
|
+
switch (identifier.kind) {
|
|
76
|
+
case "Identifier" /* Identifier */:
|
|
77
|
+
identifierLiteral = identifier.literal;
|
|
78
|
+
isIdentifierRecurisve = false;
|
|
79
|
+
break;
|
|
80
|
+
case "IdentifierExpression" /* IdentifierExpression */:
|
|
81
|
+
identifierLiteral = identifier.identifier.literal;
|
|
82
|
+
isIdentifierRecurisve = identifier.maybeInclusiveConstant !== undefined;
|
|
83
|
+
break;
|
|
84
|
+
default:
|
|
85
|
+
throw powerquery_parser_1.Assert.isNever(identifier);
|
|
86
|
+
}
|
|
87
|
+
const triedNodeScope = yield assertGetOrCreateNodeScope(settings, nodeIdMapCollection, xorNode.node.id, scopeById);
|
|
88
|
+
if (powerquery_parser_1.ResultUtils.isError(triedNodeScope)) {
|
|
89
|
+
trace.exit({ ["Result" /* Result */]: triedNodeScope.kind });
|
|
90
|
+
return triedNodeScope;
|
|
91
|
+
}
|
|
92
|
+
const nodeScope = triedNodeScope.value;
|
|
93
|
+
const maybeScopeItem = nodeScope.get(identifierLiteral);
|
|
94
|
+
if (
|
|
95
|
+
// If the identifier couldn't be found in the generated scope,
|
|
96
|
+
// then either the scope generation is incorrect or it's an external identifier.
|
|
97
|
+
(maybeScopeItem === null || maybeScopeItem === void 0 ? void 0 : maybeScopeItem.isRecursive) !== isIdentifierRecurisve) {
|
|
98
|
+
trace.exit({ ["Result" /* Result */]: undefined });
|
|
99
|
+
return powerquery_parser_1.ResultUtils.boxOk(undefined);
|
|
100
|
+
}
|
|
101
|
+
const scopeItem = maybeScopeItem;
|
|
102
|
+
let maybeNextXorNode;
|
|
103
|
+
switch (scopeItem.kind) {
|
|
104
|
+
case "Each" /* Each */:
|
|
105
|
+
case "Parameter" /* Parameter */:
|
|
106
|
+
case "Undefined" /* Undefined */:
|
|
107
|
+
break;
|
|
108
|
+
case "LetVariable" /* LetVariable */:
|
|
109
|
+
case "RecordField" /* RecordField */:
|
|
110
|
+
maybeNextXorNode = scopeItem.maybeValue;
|
|
111
|
+
break;
|
|
112
|
+
case "SectionMember" /* SectionMember */:
|
|
113
|
+
maybeNextXorNode = scopeItem.maybeValue;
|
|
114
|
+
break;
|
|
115
|
+
default:
|
|
116
|
+
throw powerquery_parser_1.Assert.isNever(scopeItem);
|
|
117
|
+
}
|
|
118
|
+
let result;
|
|
119
|
+
if (maybeNextXorNode === undefined) {
|
|
120
|
+
result = Promise.resolve(powerquery_parser_1.ResultUtils.boxOk(xorNode));
|
|
121
|
+
}
|
|
122
|
+
else if (parser_1.XorNodeUtils.isContextXor(maybeNextXorNode) ||
|
|
123
|
+
(maybeNextXorNode.node.kind !== "Identifier" /* Identifier */ &&
|
|
124
|
+
maybeNextXorNode.node.kind !== "IdentifierExpression" /* IdentifierExpression */)) {
|
|
125
|
+
result = Promise.resolve(powerquery_parser_1.ResultUtils.boxOk(xorNode));
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
result = maybeDereferencedIdentifier(settings, nodeIdMapCollection, maybeNextXorNode, scopeById);
|
|
129
|
+
}
|
|
130
|
+
trace.exit();
|
|
131
|
+
return result;
|
|
132
|
+
});
|
|
148
133
|
}
|
|
149
134
|
exports.maybeDereferencedIdentifier = maybeDereferencedIdentifier;
|
|
150
135
|
function inspectScope(settings, nodeIdMapCollection, ancestry,
|
|
151
136
|
// scopeById may get mutated by adding new entries.
|
|
152
137
|
scopeById) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
138
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
139
|
+
const trace = settings.traceManager.entry("Scope" /* Scope */, inspectScope.name);
|
|
140
|
+
const rootId = ancestry[0].node.id;
|
|
141
|
+
// A scope for the given ancestry has already been generated.
|
|
142
|
+
const maybeCached = scopeById.get(rootId);
|
|
143
|
+
if (maybeCached !== undefined) {
|
|
144
|
+
trace.exit();
|
|
145
|
+
return scopeById;
|
|
146
|
+
}
|
|
147
|
+
// Store the delta between the given scope and what's found in a temporary map.
|
|
148
|
+
// This will prevent mutation in the given map if an error is thrown.
|
|
149
|
+
const scopeChanges = new Map();
|
|
150
|
+
const state = {
|
|
151
|
+
traceManager: settings.traceManager,
|
|
152
|
+
givenScope: scopeById,
|
|
153
|
+
deltaScope: scopeChanges,
|
|
154
|
+
ancestry,
|
|
155
|
+
nodeIdMapCollection,
|
|
156
|
+
ancestryIndex: 0,
|
|
157
|
+
};
|
|
158
|
+
// Build up the scope through a top-down inspection.
|
|
159
|
+
const numNodes = ancestry.length;
|
|
160
|
+
for (let ancestryIndex = numNodes - 1; ancestryIndex >= 0; ancestryIndex -= 1) {
|
|
161
|
+
state.ancestryIndex = ancestryIndex;
|
|
162
|
+
const xorNode = ancestry[ancestryIndex];
|
|
163
|
+
// eslint-disable-next-line no-await-in-loop
|
|
164
|
+
yield inspectNode(state, xorNode);
|
|
165
|
+
}
|
|
158
166
|
trace.exit();
|
|
159
|
-
return
|
|
160
|
-
}
|
|
161
|
-
// Store the delta between the given scope and what's found in a temporary map.
|
|
162
|
-
// This will prevent mutation in the given map if an error is thrown.
|
|
163
|
-
var scopeChanges = new Map();
|
|
164
|
-
var state = {
|
|
165
|
-
traceManager: settings.traceManager,
|
|
166
|
-
givenScope: scopeById,
|
|
167
|
-
deltaScope: scopeChanges,
|
|
168
|
-
ancestry: ancestry,
|
|
169
|
-
nodeIdMapCollection: nodeIdMapCollection,
|
|
170
|
-
ancestryIndex: 0,
|
|
171
|
-
};
|
|
172
|
-
// Build up the scope through a top-down inspection.
|
|
173
|
-
var numNodes = ancestry.length;
|
|
174
|
-
for (var ancestryIndex = numNodes - 1; ancestryIndex >= 0; ancestryIndex -= 1) {
|
|
175
|
-
state.ancestryIndex = ancestryIndex;
|
|
176
|
-
var xorNode = ancestry[ancestryIndex];
|
|
177
|
-
inspectNode(state, xorNode);
|
|
178
|
-
}
|
|
179
|
-
trace.exit();
|
|
180
|
-
return state.deltaScope;
|
|
167
|
+
return state.deltaScope;
|
|
168
|
+
});
|
|
181
169
|
}
|
|
170
|
+
// eslint-disable-next-line require-await
|
|
182
171
|
function inspectNode(state, xorNode) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
172
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
173
|
+
const trace = state.traceManager.entry("Scope" /* Scope */, inspectNode.name, __1.TraceUtils.createXorNodeDetails(xorNode));
|
|
174
|
+
switch (xorNode.node.kind) {
|
|
175
|
+
case "EachExpression" /* EachExpression */:
|
|
176
|
+
inspectEachExpression(state, xorNode);
|
|
177
|
+
break;
|
|
178
|
+
case "FunctionExpression" /* FunctionExpression */:
|
|
179
|
+
inspectFunctionExpression(state, xorNode);
|
|
180
|
+
break;
|
|
181
|
+
case "LetExpression" /* LetExpression */:
|
|
182
|
+
inspectLetExpression(state, xorNode);
|
|
183
|
+
break;
|
|
184
|
+
case "RecordExpression" /* RecordExpression */:
|
|
185
|
+
case "RecordLiteral" /* RecordLiteral */:
|
|
186
|
+
inspectRecordExpressionOrRecordLiteral(state, xorNode);
|
|
187
|
+
break;
|
|
188
|
+
case "Section" /* Section */:
|
|
189
|
+
inspectSection(state, xorNode);
|
|
190
|
+
break;
|
|
191
|
+
default:
|
|
192
|
+
localGetOrCreateNodeScope(state, xorNode.node.id, undefined);
|
|
193
|
+
}
|
|
194
|
+
trace.exit();
|
|
195
|
+
});
|
|
205
196
|
}
|
|
206
197
|
function inspectEachExpression(state, eachExpr) {
|
|
207
198
|
parser_1.XorNodeUtils.assertIsNodeKind(eachExpr, "EachExpression" /* EachExpression */);
|
|
@@ -220,183 +211,147 @@ function inspectEachExpression(state, eachExpr) {
|
|
|
220
211
|
function inspectFunctionExpression(state, fnExpr) {
|
|
221
212
|
parser_1.XorNodeUtils.assertIsNodeKind(fnExpr, "FunctionExpression" /* FunctionExpression */);
|
|
222
213
|
// Propegates the parent's scope.
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
];
|
|
240
|
-
});
|
|
214
|
+
const nodeScope = localGetOrCreateNodeScope(state, fnExpr.node.id, undefined);
|
|
215
|
+
const pseudoType = (0, pseudoFunctionExpressionType_1.pseudoFunctionExpressionType)(state.nodeIdMapCollection, fnExpr);
|
|
216
|
+
const newEntries = pseudoType.parameters.map((parameter) => [
|
|
217
|
+
parameter.name.literal,
|
|
218
|
+
{
|
|
219
|
+
kind: "Parameter" /* Parameter */,
|
|
220
|
+
id: parameter.id,
|
|
221
|
+
isRecursive: false,
|
|
222
|
+
name: parameter.name,
|
|
223
|
+
isOptional: parameter.isOptional,
|
|
224
|
+
isNullable: parameter.isNullable,
|
|
225
|
+
maybeType: parameter.maybeType !== undefined
|
|
226
|
+
? language_1.TypeUtils.maybePrimitiveTypeConstantKindFromTypeKind(parameter.maybeType)
|
|
227
|
+
: undefined,
|
|
228
|
+
},
|
|
229
|
+
]);
|
|
241
230
|
expandChildScope(state, fnExpr, [3], newEntries, nodeScope);
|
|
242
231
|
}
|
|
243
232
|
function inspectLetExpression(state, letExpr) {
|
|
244
233
|
parser_1.XorNodeUtils.assertIsNodeKind(letExpr, "LetExpression" /* LetExpression */);
|
|
245
234
|
// Propegates the parent's scope.
|
|
246
|
-
|
|
247
|
-
|
|
235
|
+
const nodeScope = localGetOrCreateNodeScope(state, letExpr.node.id, undefined);
|
|
236
|
+
const keyValuePairs = parser_1.NodeIdMapIterator.iterLetExpression(state.nodeIdMapCollection, letExpr);
|
|
248
237
|
inspectKeyValuePairs(state, nodeScope, keyValuePairs, createLetVariableScopeItem);
|
|
249
238
|
// Places the assignments from the 'let' into LetExpression.expression
|
|
250
|
-
|
|
239
|
+
const newEntries = scopeItemsFromKeyValuePairs(keyValuePairs, -1, createLetVariableScopeItem);
|
|
251
240
|
expandChildScope(state, letExpr, [3], newEntries, nodeScope);
|
|
252
241
|
}
|
|
253
242
|
function inspectRecordExpressionOrRecordLiteral(state, record) {
|
|
254
243
|
parser_1.XorNodeUtils.assertIsRecord(record);
|
|
255
244
|
// Propegates the parent's scope.
|
|
256
|
-
|
|
257
|
-
|
|
245
|
+
const nodeScope = localGetOrCreateNodeScope(state, record.node.id, undefined);
|
|
246
|
+
const keyValuePairs = parser_1.NodeIdMapIterator.iterRecord(state.nodeIdMapCollection, record);
|
|
258
247
|
inspectKeyValuePairs(state, nodeScope, keyValuePairs, createRecordMemberScopeItem);
|
|
259
248
|
}
|
|
260
249
|
function inspectSection(state, section) {
|
|
261
|
-
var e_1, _a;
|
|
262
250
|
parser_1.XorNodeUtils.assertIsNodeKind(section, "Section" /* Section */);
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
if (kvp.maybeValue === undefined) {
|
|
268
|
-
continue;
|
|
269
|
-
}
|
|
270
|
-
var newScopeItems = scopeItemsFromKeyValuePairs(keyValuePairs, kvp.key.id, createSectionMemberScopeItem);
|
|
271
|
-
if (newScopeItems.length !== 0) {
|
|
272
|
-
expandScope(state, kvp.maybeValue, newScopeItems, new Map());
|
|
273
|
-
}
|
|
251
|
+
const keyValuePairs = parser_1.NodeIdMapIterator.iterSection(state.nodeIdMapCollection, section);
|
|
252
|
+
for (const kvp of keyValuePairs) {
|
|
253
|
+
if (kvp.maybeValue === undefined) {
|
|
254
|
+
continue;
|
|
274
255
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
try {
|
|
279
|
-
if (keyValuePairs_1_1 && !keyValuePairs_1_1.done && (_a = keyValuePairs_1.return)) _a.call(keyValuePairs_1);
|
|
256
|
+
const newScopeItems = scopeItemsFromKeyValuePairs(keyValuePairs, kvp.key.id, createSectionMemberScopeItem);
|
|
257
|
+
if (newScopeItems.length !== 0) {
|
|
258
|
+
expandScope(state, kvp.maybeValue, newScopeItems, new Map());
|
|
280
259
|
}
|
|
281
|
-
finally { if (e_1) throw e_1.error; }
|
|
282
260
|
}
|
|
283
261
|
}
|
|
284
|
-
// Expands the scope
|
|
262
|
+
// Expands the scope on the value part of the key value pair.
|
|
285
263
|
function inspectKeyValuePairs(state, parentScope, keyValuePairs, createFn) {
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
var kvp = keyValuePairs_2_1.value;
|
|
290
|
-
if (kvp.maybeValue === undefined) {
|
|
291
|
-
continue;
|
|
292
|
-
}
|
|
293
|
-
var newScopeItems = scopeItemsFromKeyValuePairs(keyValuePairs, kvp.key.id, createFn);
|
|
294
|
-
if (newScopeItems.length !== 0) {
|
|
295
|
-
expandScope(state, kvp.maybeValue, newScopeItems, parentScope);
|
|
296
|
-
}
|
|
264
|
+
for (const kvp of keyValuePairs) {
|
|
265
|
+
if (kvp.maybeValue === undefined) {
|
|
266
|
+
continue;
|
|
297
267
|
}
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
try {
|
|
302
|
-
if (keyValuePairs_2_1 && !keyValuePairs_2_1.done && (_a = keyValuePairs_2.return)) _a.call(keyValuePairs_2);
|
|
268
|
+
const newScopeItems = scopeItemsFromKeyValuePairs(keyValuePairs, kvp.key.id, createFn);
|
|
269
|
+
if (newScopeItems.length !== 0) {
|
|
270
|
+
expandScope(state, kvp.maybeValue, newScopeItems, parentScope);
|
|
303
271
|
}
|
|
304
|
-
finally { if (e_2) throw e_2.error; }
|
|
305
272
|
}
|
|
306
273
|
}
|
|
307
274
|
function expandScope(state, xorNode, newEntries, maybeDefaultScope) {
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
for (var newEntries_1 = __values(newEntries), newEntries_1_1 = newEntries_1.next(); !newEntries_1_1.done; newEntries_1_1 = newEntries_1.next()) {
|
|
312
|
-
var _b = __read(newEntries_1_1.value, 2), key = _b[0], value = _b[1];
|
|
313
|
-
nodeScope.set(key, value);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
317
|
-
finally {
|
|
318
|
-
try {
|
|
319
|
-
if (newEntries_1_1 && !newEntries_1_1.done && (_a = newEntries_1.return)) _a.call(newEntries_1);
|
|
320
|
-
}
|
|
321
|
-
finally { if (e_3) throw e_3.error; }
|
|
275
|
+
const nodeScope = localGetOrCreateNodeScope(state, xorNode.node.id, maybeDefaultScope);
|
|
276
|
+
for (const [key, value] of newEntries) {
|
|
277
|
+
nodeScope.set(value.isRecursive ? `@${key}` : key, value);
|
|
322
278
|
}
|
|
323
279
|
}
|
|
324
280
|
function expandChildScope(state, parent, childAttributeIds, newEntries, maybeDefaultScope) {
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
var maybeChild = parser_1.NodeIdMapUtils.maybeNthChild(nodeIdMapCollection, parentId, attributeId);
|
|
333
|
-
if (maybeChild !== undefined) {
|
|
334
|
-
expandScope(state, maybeChild, newEntries, maybeDefaultScope);
|
|
335
|
-
}
|
|
281
|
+
const nodeIdMapCollection = state.nodeIdMapCollection;
|
|
282
|
+
const parentId = parent.node.id;
|
|
283
|
+
// TODO: optimize this
|
|
284
|
+
for (const attributeId of childAttributeIds) {
|
|
285
|
+
const maybeChild = parser_1.NodeIdMapUtils.maybeNthChild(nodeIdMapCollection, parentId, attributeId);
|
|
286
|
+
if (maybeChild !== undefined) {
|
|
287
|
+
expandScope(state, maybeChild, newEntries, maybeDefaultScope);
|
|
336
288
|
}
|
|
337
289
|
}
|
|
338
|
-
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
339
|
-
finally {
|
|
340
|
-
try {
|
|
341
|
-
if (childAttributeIds_1_1 && !childAttributeIds_1_1.done && (_a = childAttributeIds_1.return)) _a.call(childAttributeIds_1);
|
|
342
|
-
}
|
|
343
|
-
finally { if (e_4) throw e_4.error; }
|
|
344
|
-
}
|
|
345
290
|
}
|
|
346
291
|
// Any operation done on a scope should first invoke `scopeFor` for data integrity.
|
|
347
292
|
function localGetOrCreateNodeScope(state, nodeId, maybeDefaultScope) {
|
|
293
|
+
const trace = state.traceManager.entry("Scope" /* Scope */, localGetOrCreateNodeScope.name, {
|
|
294
|
+
nodeId,
|
|
295
|
+
});
|
|
348
296
|
// If scopeFor has already been called then there should be a nodeId in the deltaScope.
|
|
349
|
-
|
|
297
|
+
const maybeDeltaScope = state.deltaScope.get(nodeId);
|
|
350
298
|
if (maybeDeltaScope !== undefined) {
|
|
299
|
+
trace.exit({ ["Result" /* Result */]: "deltaScope cache hit" });
|
|
351
300
|
return maybeDeltaScope;
|
|
352
301
|
}
|
|
353
302
|
// If given a scope with an existing value then assume it's valid.
|
|
354
303
|
// Cache and return.
|
|
355
|
-
|
|
304
|
+
const maybeGivenScope = state.givenScope.get(nodeId);
|
|
356
305
|
if (maybeGivenScope !== undefined) {
|
|
357
|
-
|
|
306
|
+
const shallowCopy = new Map(maybeGivenScope.entries());
|
|
358
307
|
state.deltaScope.set(nodeId, shallowCopy);
|
|
308
|
+
trace.exit({ ["Result" /* Result */]: "givenScope cache hit" });
|
|
359
309
|
return shallowCopy;
|
|
360
310
|
}
|
|
361
311
|
if (maybeDefaultScope !== undefined) {
|
|
362
|
-
|
|
312
|
+
const shallowCopy = new Map(maybeDefaultScope.entries());
|
|
363
313
|
state.deltaScope.set(nodeId, shallowCopy);
|
|
314
|
+
trace.exit({ ["Result" /* Result */]: "defaultScope entry" });
|
|
364
315
|
return shallowCopy;
|
|
365
316
|
}
|
|
366
317
|
// Default to a parent's scope if the node has a parent.
|
|
367
|
-
|
|
318
|
+
const maybeParent = parser_1.NodeIdMapUtils.maybeParentXor(state.nodeIdMapCollection, nodeId);
|
|
368
319
|
if (maybeParent !== undefined) {
|
|
369
|
-
|
|
370
|
-
|
|
320
|
+
const parentNodeId = maybeParent.node.id;
|
|
321
|
+
const maybeParentDeltaScope = state.deltaScope.get(parentNodeId);
|
|
371
322
|
if (maybeParentDeltaScope !== undefined) {
|
|
372
|
-
|
|
323
|
+
const shallowCopy = new Map(maybeParentDeltaScope.entries());
|
|
373
324
|
state.deltaScope.set(nodeId, shallowCopy);
|
|
325
|
+
trace.exit({ ["Result" /* Result */]: "parent deltaScope hit" });
|
|
374
326
|
return shallowCopy;
|
|
375
327
|
}
|
|
376
|
-
|
|
328
|
+
const maybeParentGivenScope = state.givenScope.get(parentNodeId);
|
|
377
329
|
if (maybeParentGivenScope !== undefined) {
|
|
378
|
-
|
|
330
|
+
const shallowCopy = new Map(maybeParentGivenScope.entries());
|
|
379
331
|
state.deltaScope.set(nodeId, shallowCopy);
|
|
332
|
+
trace.exit({ ["Result" /* Result */]: "parent givenScope hit" });
|
|
380
333
|
return shallowCopy;
|
|
381
334
|
}
|
|
382
335
|
}
|
|
383
336
|
// The node has no parent or it hasn't been visited.
|
|
384
|
-
|
|
337
|
+
const newScope = new Map();
|
|
385
338
|
state.deltaScope.set(nodeId, newScope);
|
|
339
|
+
trace.exit({ ["Result" /* Result */]: "set new entry" });
|
|
386
340
|
return newScope;
|
|
387
341
|
}
|
|
388
342
|
function scopeItemsFromKeyValuePairs(keyValuePairs, ancestorKeyNodeId, createFn) {
|
|
389
343
|
return keyValuePairs
|
|
390
|
-
.filter(
|
|
391
|
-
.map(
|
|
392
|
-
|
|
393
|
-
|
|
344
|
+
.filter((keyValuePair) => keyValuePair.maybeValue !== undefined)
|
|
345
|
+
.map((keyValuePair) => [
|
|
346
|
+
keyValuePair.keyLiteral,
|
|
347
|
+
createFn(keyValuePair, ancestorKeyNodeId === keyValuePair.key.id),
|
|
348
|
+
]);
|
|
394
349
|
}
|
|
395
350
|
function createSectionMemberScopeItem(keyValuePair, isRecursive) {
|
|
396
351
|
return {
|
|
397
352
|
kind: "SectionMember" /* SectionMember */,
|
|
398
353
|
id: keyValuePair.source.node.id,
|
|
399
|
-
isRecursive
|
|
354
|
+
isRecursive,
|
|
400
355
|
key: keyValuePair.key,
|
|
401
356
|
maybeValue: keyValuePair.maybeValue,
|
|
402
357
|
};
|
|
@@ -405,7 +360,7 @@ function createLetVariableScopeItem(keyValuePair, isRecursive) {
|
|
|
405
360
|
return {
|
|
406
361
|
kind: "LetVariable" /* LetVariable */,
|
|
407
362
|
id: keyValuePair.source.node.id,
|
|
408
|
-
isRecursive
|
|
363
|
+
isRecursive,
|
|
409
364
|
key: keyValuePair.key,
|
|
410
365
|
maybeValue: keyValuePair.maybeValue,
|
|
411
366
|
};
|
|
@@ -414,7 +369,7 @@ function createRecordMemberScopeItem(keyValuePair, isRecursive) {
|
|
|
414
369
|
return {
|
|
415
370
|
kind: "RecordField" /* RecordField */,
|
|
416
371
|
id: keyValuePair.source.node.id,
|
|
417
|
-
isRecursive
|
|
372
|
+
isRecursive,
|
|
418
373
|
key: keyValuePair.key,
|
|
419
374
|
maybeValue: keyValuePair.maybeValue,
|
|
420
375
|
};
|