@microsoft/powerquery-language-services 0.9.2 → 0.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/powerquery-language-services/analysis/analysisBase.js +51 -48
- package/lib/powerquery-language-services/analysis/analysisBase.js.map +1 -1
- package/lib/powerquery-language-services/documentSymbols.js +6 -5
- package/lib/powerquery-language-services/documentSymbols.js.map +1 -1
- package/lib/powerquery-language-services/externalType/externalType.d.ts +1 -1
- package/lib/powerquery-language-services/externalType/externalType.js.map +1 -1
- package/lib/powerquery-language-services/externalType/externalTypeUtils.js +3 -2
- package/lib/powerquery-language-services/externalType/externalTypeUtils.js.map +1 -1
- package/lib/powerquery-language-services/inspection/activeNode/activeNode.d.ts +2 -2
- package/lib/powerquery-language-services/inspection/activeNode/activeNode.js.map +1 -1
- package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js +41 -40
- package/lib/powerquery-language-services/inspection/activeNode/activeNodeUtils.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.d.ts +4 -2
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js +118 -95
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.d.ts +1 -3
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js +8 -31
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteItem/autocompleteItemUtils.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js +31 -31
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeyword.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js +23 -22
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordDefault.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js +6 -6
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordErrorHandlingExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js +2 -2
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordIdentifierPairedExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js +6 -6
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordLetExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordListExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js +6 -5
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordSectionMember.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.js +6 -5
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteKeyword/autocompleteKeywordTrailingText.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.d.ts +2 -2
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js +122 -78
- package/lib/powerquery-language-services/inspection/autocomplete/autocompleteLanguageConstant.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js +56 -54
- package/lib/powerquery-language-services/inspection/autocomplete/autocompletePrimitiveType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/commonTypes.d.ts +6 -4
- package/lib/powerquery-language-services/inspection/autocomplete/task.js +6 -9
- package/lib/powerquery-language-services/inspection/autocomplete/task.js.map +1 -1
- package/lib/powerquery-language-services/inspection/autocomplete/trailingToken.d.ts +0 -1
- package/lib/powerquery-language-services/inspection/autocomplete/trailingTokenUtils.js +3 -3
- package/lib/powerquery-language-services/inspection/autocomplete/trailingTokenUtils.js.map +1 -1
- package/lib/powerquery-language-services/inspection/deferenceIdentifier.js +17 -14
- package/lib/powerquery-language-services/inspection/deferenceIdentifier.js.map +1 -1
- package/lib/powerquery-language-services/inspection/expectedType.js +61 -60
- package/lib/powerquery-language-services/inspection/expectedType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js +15 -10
- package/lib/powerquery-language-services/inspection/invokeExpression/currentInvokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js +8 -6
- package/lib/powerquery-language-services/inspection/invokeExpression/invokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js +6 -6
- package/lib/powerquery-language-services/inspection/pseudoFunctionExpressionType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/scope/scope.d.ts +1 -1
- package/lib/powerquery-language-services/inspection/scope/scope.js.map +1 -1
- package/lib/powerquery-language-services/inspection/scope/scopeInspection.js +35 -33
- package/lib/powerquery-language-services/inspection/scope/scopeInspection.js.map +1 -1
- package/lib/powerquery-language-services/inspection/scope/scopeUtils.js +20 -18
- package/lib/powerquery-language-services/inspection/scope/scopeUtils.js.map +1 -1
- package/lib/powerquery-language-services/inspection/task.js +17 -14
- package/lib/powerquery-language-services/inspection/task.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/common.js +80 -79
- package/lib/powerquery-language-services/inspection/type/inspectType/common.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js +4 -3
- package/lib/powerquery-language-services/inspection/type/inspectType/examineFieldSpecificationList.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeConstant.js +20 -20
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeConstant.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js +5 -4
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeEachExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js +8 -7
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeErrorHandlingExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js +6 -5
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/common.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js +23 -22
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldProjection.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js +11 -10
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeField/inspectTypeFieldSelector.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js +4 -3
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFieldSpecification.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js +15 -13
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js +13 -11
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeFunctionType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js +4 -3
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifier.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js +4 -3
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIdentifierExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.js +10 -9
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeIfExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js +10 -9
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeInvokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js +8 -6
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeList.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js +9 -7
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeListType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js +9 -8
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeLiteralExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js +6 -5
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeNullCoalescingExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js +5 -4
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeParameter.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js +5 -4
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypePrimitiveType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js +10 -8
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRangeExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js +8 -6
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecord.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js +9 -7
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecordType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js +10 -9
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeRecursivePrimaryExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js +74 -73
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTBinOpExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js +11 -9
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeTableType.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js +12 -11
- package/lib/powerquery-language-services/inspection/type/inspectType/inspectTypeUnaryExpression.js.map +1 -1
- package/lib/powerquery-language-services/inspection/type/task.js +6 -4
- 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/inspectionSettings.js.map +1 -1
- package/lib/powerquery-language-services/inspectionUtils.js +22 -21
- 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/library.js.map +1 -1
- package/lib/powerquery-language-services/library/librarySymbolUtils.js +9 -9
- package/lib/powerquery-language-services/library/librarySymbolUtils.js.map +1 -1
- package/lib/powerquery-language-services/library/libraryUtils.js +12 -11
- package/lib/powerquery-language-services/library/libraryUtils.js.map +1 -1
- package/lib/powerquery-language-services/localization/templates.js +42 -42
- package/lib/powerquery-language-services/localization/templates.js.map +1 -1
- package/lib/powerquery-language-services/positionUtils.d.ts +1 -0
- package/lib/powerquery-language-services/positionUtils.js +20 -15
- package/lib/powerquery-language-services/positionUtils.js.map +1 -1
- package/lib/powerquery-language-services/providers/languageCompletionItemProvider.js +15 -15
- package/lib/powerquery-language-services/providers/languageCompletionItemProvider.js.map +1 -1
- package/lib/powerquery-language-services/providers/libraryProvider.js +7 -6
- package/lib/powerquery-language-services/providers/libraryProvider.js.map +1 -1
- package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js +15 -13
- package/lib/powerquery-language-services/providers/localDocumentProvider/foldingRanges.js.map +1 -1
- package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js +21 -20
- package/lib/powerquery-language-services/providers/localDocumentProvider/localDocumentProvider.js.map +1 -1
- package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js +63 -61
- package/lib/powerquery-language-services/providers/localDocumentProvider/partialSemanticToken.js.map +1 -1
- package/lib/powerquery-language-services/tokenPositionComparison.d.ts +1 -1
- package/lib/powerquery-language-services/tokenPositionComparison.js.map +1 -1
- package/lib/powerquery-language-services/trace.d.ts +4 -4
- package/lib/powerquery-language-services/trace.js.map +1 -1
- package/lib/powerquery-language-services/validate/validate.js +2 -1
- package/lib/powerquery-language-services/validate/validate.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js +13 -11
- package/lib/powerquery-language-services/validate/validateDuplicateIdentifiers.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateFunctionExpression.js +5 -3
- package/lib/powerquery-language-services/validate/validateFunctionExpression.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateInvokeExpression.js +5 -3
- package/lib/powerquery-language-services/validate/validateInvokeExpression.js.map +1 -1
- package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js +9 -6
- package/lib/powerquery-language-services/validate/validateUnknownIdentifiers.js.map +1 -1
- package/package.json +4 -4
|
@@ -8,6 +8,7 @@ exports.findNodeKind = exports.isPositionInBounds = exports.assertPositionInBoun
|
|
|
8
8
|
const parser_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/parser");
|
|
9
9
|
const powerquery_parser_1 = require("@microsoft/powerquery-parser");
|
|
10
10
|
const language_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/language");
|
|
11
|
+
const activeNode_1 = require("./activeNode");
|
|
11
12
|
const __1 = require("../..");
|
|
12
13
|
function activeNode(nodeIdMapCollection, position) {
|
|
13
14
|
const astSearched = leafSearch(nodeIdMapCollection, position);
|
|
@@ -32,13 +33,13 @@ function activeNode(nodeIdMapCollection, position) {
|
|
|
32
33
|
// `not |`
|
|
33
34
|
if (contextClosestOnOrAfterPosition !== undefined) {
|
|
34
35
|
leaf = parser_1.XorNodeUtils.boxContext(contextClosestOnOrAfterPosition);
|
|
35
|
-
leafKind =
|
|
36
|
+
leafKind = activeNode_1.ActiveNodeLeafKind.ContextNode;
|
|
36
37
|
}
|
|
37
38
|
// Without context
|
|
38
39
|
// `foo |`
|
|
39
40
|
else {
|
|
40
41
|
leaf = parser_1.XorNodeUtils.boxAst(nodeClosestBeforePosition);
|
|
41
|
-
leafKind =
|
|
42
|
+
leafKind = activeNode_1.ActiveNodeLeafKind.IsBeforePosition;
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
45
|
// Case 2b: truthy center
|
|
@@ -51,7 +52,7 @@ function activeNode(nodeIdMapCollection, position) {
|
|
|
51
52
|
nodeClosestAfterPosition === undefined) {
|
|
52
53
|
// With or without context
|
|
53
54
|
leaf = parser_1.XorNodeUtils.boxAst(nodeOnPosition);
|
|
54
|
-
leafKind =
|
|
55
|
+
leafKind = activeNode_1.ActiveNodeLeafKind.IsInAst;
|
|
55
56
|
}
|
|
56
57
|
// Case 2c: truthy right
|
|
57
58
|
// `| not`
|
|
@@ -73,20 +74,20 @@ function activeNode(nodeIdMapCollection, position) {
|
|
|
73
74
|
nodeClosestAfterPosition == undefined) {
|
|
74
75
|
// With or without context
|
|
75
76
|
leaf = parser_1.XorNodeUtils.boxAst(nodeOnPosition);
|
|
76
|
-
leafKind =
|
|
77
|
+
leafKind = activeNode_1.ActiveNodeLeafKind.IsInAst;
|
|
77
78
|
}
|
|
78
79
|
// Case 3b: truthy left and right
|
|
79
80
|
else if (nodeClosestBeforePosition !== undefined &&
|
|
80
81
|
nodeOnPosition === undefined &&
|
|
81
82
|
nodeClosestAfterPosition !== undefined) {
|
|
82
|
-
if (language_1.AstUtils.isNodeKind(nodeClosestBeforePosition,
|
|
83
|
+
if (language_1.AstUtils.isNodeKind(nodeClosestBeforePosition, language_1.Ast.NodeKind.Constant) &&
|
|
83
84
|
ShiftRightConstantKinds.includes(nodeClosestBeforePosition.constantKind)) {
|
|
84
85
|
leaf = parser_1.XorNodeUtils.boxAst(nodeClosestAfterPosition);
|
|
85
|
-
leafKind =
|
|
86
|
+
leafKind = activeNode_1.ActiveNodeLeafKind.IsAfterPosition;
|
|
86
87
|
}
|
|
87
88
|
else {
|
|
88
89
|
leaf = parser_1.XorNodeUtils.boxAst(nodeClosestBeforePosition);
|
|
89
|
-
leafKind =
|
|
90
|
+
leafKind = activeNode_1.ActiveNodeLeafKind.IsBeforePosition;
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
93
|
// Case 3c: truthy center and right
|
|
@@ -95,14 +96,14 @@ function activeNode(nodeIdMapCollection, position) {
|
|
|
95
96
|
nodeOnPosition !== undefined &&
|
|
96
97
|
nodeClosestAfterPosition !== undefined) {
|
|
97
98
|
leaf = parser_1.XorNodeUtils.boxAst(nodeOnPosition);
|
|
98
|
-
leafKind =
|
|
99
|
+
leafKind = activeNode_1.ActiveNodeLeafKind.IsInAst;
|
|
99
100
|
}
|
|
100
101
|
// Case 4: There's 3 leafs
|
|
101
102
|
else if (nodeClosestBeforePosition !== undefined &&
|
|
102
103
|
nodeOnPosition !== undefined &&
|
|
103
104
|
nodeClosestAfterPosition !== undefined) {
|
|
104
105
|
leaf = parser_1.XorNodeUtils.boxAst(nodeOnPosition);
|
|
105
|
-
leafKind =
|
|
106
|
+
leafKind = activeNode_1.ActiveNodeLeafKind.IsInAst;
|
|
106
107
|
}
|
|
107
108
|
// Case 5: TypeScript can't tell this is exhaustive.
|
|
108
109
|
else {
|
|
@@ -115,7 +116,7 @@ function activeNode(nodeIdMapCollection, position) {
|
|
|
115
116
|
: undefined;
|
|
116
117
|
const ancestry = parser_1.AncestryUtils.assertAncestry(nodeIdMapCollection, leaf.node.id);
|
|
117
118
|
return {
|
|
118
|
-
kind:
|
|
119
|
+
kind: activeNode_1.ActiveNodeKind.ActiveNode,
|
|
119
120
|
leafKind,
|
|
120
121
|
position,
|
|
121
122
|
ancestry,
|
|
@@ -127,7 +128,7 @@ function activeNode(nodeIdMapCollection, position) {
|
|
|
127
128
|
exports.activeNode = activeNode;
|
|
128
129
|
function createOutOfBoundPosition(position) {
|
|
129
130
|
return {
|
|
130
|
-
kind:
|
|
131
|
+
kind: activeNode_1.ActiveNodeKind.OutOfBoundPosition,
|
|
131
132
|
position,
|
|
132
133
|
};
|
|
133
134
|
}
|
|
@@ -139,7 +140,7 @@ function assertActiveNode(nodeIdMapCollection, position) {
|
|
|
139
140
|
}
|
|
140
141
|
exports.assertActiveNode = assertActiveNode;
|
|
141
142
|
function assertGetLeaf(activeNode) {
|
|
142
|
-
return parser_1.AncestryUtils.
|
|
143
|
+
return parser_1.AncestryUtils.assertNth(activeNode.ancestry, 0);
|
|
143
144
|
}
|
|
144
145
|
exports.assertGetLeaf = assertGetLeaf;
|
|
145
146
|
function assertPositionInBounds(value) {
|
|
@@ -149,7 +150,7 @@ function assertPositionInBounds(value) {
|
|
|
149
150
|
}
|
|
150
151
|
exports.assertPositionInBounds = assertPositionInBounds;
|
|
151
152
|
function isPositionInBounds(value) {
|
|
152
|
-
return value.kind ===
|
|
153
|
+
return value.kind === activeNode_1.ActiveNodeKind.ActiveNode;
|
|
153
154
|
}
|
|
154
155
|
exports.isPositionInBounds = isPositionInBounds;
|
|
155
156
|
function findNodeKind(activeNode, nodeKind) {
|
|
@@ -157,23 +158,23 @@ function findNodeKind(activeNode, nodeKind) {
|
|
|
157
158
|
}
|
|
158
159
|
exports.findNodeKind = findNodeKind;
|
|
159
160
|
const ShiftLeftConstantKinds = [
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
161
|
+
language_1.Constant.WrapperConstant.RightBrace,
|
|
162
|
+
language_1.Constant.WrapperConstant.RightBracket,
|
|
163
|
+
language_1.Constant.WrapperConstant.RightParenthesis,
|
|
163
164
|
];
|
|
164
165
|
const ShiftRightConstantKinds = [
|
|
165
166
|
...language_1.Constant.BinOpExpressionOperators,
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
167
|
+
language_1.Constant.MiscConstant.Ampersand,
|
|
168
|
+
language_1.Constant.MiscConstant.Comma,
|
|
169
|
+
language_1.Constant.MiscConstant.DotDot,
|
|
170
|
+
language_1.Constant.MiscConstant.Equal,
|
|
171
|
+
language_1.Constant.MiscConstant.FatArrow,
|
|
172
|
+
language_1.Constant.MiscConstant.NullCoalescingOperator,
|
|
173
|
+
language_1.Constant.MiscConstant.QuestionMark,
|
|
174
|
+
language_1.Constant.MiscConstant.Semicolon,
|
|
175
|
+
language_1.Constant.WrapperConstant.LeftBrace,
|
|
176
|
+
language_1.Constant.WrapperConstant.LeftBracket,
|
|
177
|
+
language_1.Constant.WrapperConstant.LeftParenthesis,
|
|
177
178
|
];
|
|
178
179
|
// Searches for the closest leaf to the left, right, and on the given position if such an option exists.
|
|
179
180
|
function leafSearch(nodeIdMapCollection, position) {
|
|
@@ -192,7 +193,7 @@ function leafSearch(nodeIdMapCollection, position) {
|
|
|
192
193
|
}
|
|
193
194
|
let includeLowerBound = true;
|
|
194
195
|
let includeUpperBound = true;
|
|
195
|
-
if (language_1.AstUtils.isNodeKind(candidate,
|
|
196
|
+
if (language_1.AstUtils.isNodeKind(candidate, language_1.Ast.NodeKind.Constant)) {
|
|
196
197
|
if (ShiftRightConstantKinds.includes(candidate.constantKind)) {
|
|
197
198
|
includeLowerBound = false;
|
|
198
199
|
includeUpperBound = false;
|
|
@@ -272,16 +273,16 @@ function findLeafIdentifier(nodeIdMapCollection, leafXorNode) {
|
|
|
272
273
|
const leaf = leafXorNode.node;
|
|
273
274
|
let identifier;
|
|
274
275
|
const parentId = nodeIdMapCollection.parentIdById.get(leaf.id);
|
|
275
|
-
if (leaf.kind ===
|
|
276
|
+
if (leaf.kind === language_1.Ast.NodeKind.Identifier) {
|
|
276
277
|
if (parentId === undefined) {
|
|
277
278
|
identifier = leaf;
|
|
278
279
|
}
|
|
279
280
|
else {
|
|
280
281
|
const parent = parser_1.NodeIdMapUtils.ast(nodeIdMapCollection, parentId);
|
|
281
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.kind) ===
|
|
282
|
+
if ((parent === null || parent === void 0 ? void 0 : parent.kind) === language_1.Ast.NodeKind.IdentifierPairedExpression) {
|
|
282
283
|
identifier = leaf;
|
|
283
284
|
}
|
|
284
|
-
else if ((parent === null || parent === void 0 ? void 0 : parent.kind) ===
|
|
285
|
+
else if ((parent === null || parent === void 0 ? void 0 : parent.kind) === language_1.Ast.NodeKind.IdentifierExpression) {
|
|
285
286
|
identifier = parent;
|
|
286
287
|
}
|
|
287
288
|
else {
|
|
@@ -290,19 +291,19 @@ function findLeafIdentifier(nodeIdMapCollection, leafXorNode) {
|
|
|
290
291
|
}
|
|
291
292
|
}
|
|
292
293
|
// If '@', then check if it's part of an IdentifierExpression.
|
|
293
|
-
else if (leaf.kind ===
|
|
294
|
+
else if (leaf.kind === language_1.Ast.NodeKind.Constant && leaf.constantKind === language_1.Constant.MiscConstant.AtSign) {
|
|
294
295
|
if (parentId === undefined) {
|
|
295
296
|
return undefined;
|
|
296
297
|
}
|
|
297
298
|
const parent = parser_1.NodeIdMapUtils.ast(nodeIdMapCollection, parentId);
|
|
298
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.kind) ===
|
|
299
|
+
if ((parent === null || parent === void 0 ? void 0 : parent.kind) === language_1.Ast.NodeKind.IdentifierExpression) {
|
|
299
300
|
identifier = parent;
|
|
300
301
|
}
|
|
301
302
|
else {
|
|
302
303
|
return undefined;
|
|
303
304
|
}
|
|
304
305
|
}
|
|
305
|
-
else if (leaf.kind ===
|
|
306
|
+
else if (leaf.kind === language_1.Ast.NodeKind.GeneralizedIdentifier) {
|
|
306
307
|
identifier = leaf;
|
|
307
308
|
}
|
|
308
309
|
else {
|
|
@@ -310,8 +311,8 @@ function findLeafIdentifier(nodeIdMapCollection, leafXorNode) {
|
|
|
310
311
|
}
|
|
311
312
|
let result;
|
|
312
313
|
switch (identifier.kind) {
|
|
313
|
-
case
|
|
314
|
-
case
|
|
314
|
+
case language_1.Ast.NodeKind.Identifier:
|
|
315
|
+
case language_1.Ast.NodeKind.GeneralizedIdentifier:
|
|
315
316
|
result = {
|
|
316
317
|
node: identifier,
|
|
317
318
|
isRecursive: false,
|
|
@@ -319,7 +320,7 @@ function findLeafIdentifier(nodeIdMapCollection, leafXorNode) {
|
|
|
319
320
|
normalizedRecursiveLiteral: undefined,
|
|
320
321
|
};
|
|
321
322
|
break;
|
|
322
|
-
case
|
|
323
|
+
case language_1.Ast.NodeKind.IdentifierExpression: {
|
|
323
324
|
const normalizedLiteral = language_1.TextUtils.normalizeIdentifier(identifier.identifier.literal);
|
|
324
325
|
result = {
|
|
325
326
|
node: identifier,
|
|
@@ -341,9 +342,9 @@ function isInKey(ancestry) {
|
|
|
341
342
|
const parent = powerquery_parser_1.ArrayUtils.assertGet(ancestry, 1);
|
|
342
343
|
// Return true if we're in the key portion of a key-value pair.
|
|
343
344
|
return ([
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
345
|
+
language_1.Ast.NodeKind.GeneralizedIdentifierPairedAnyLiteral,
|
|
346
|
+
language_1.Ast.NodeKind.GeneralizedIdentifierPairedExpression,
|
|
347
|
+
language_1.Ast.NodeKind.IdentifierPairedExpression,
|
|
347
348
|
].includes(parent.node.kind) && child.node.attributeIndex === 0);
|
|
348
349
|
}
|
|
349
350
|
//# sourceMappingURL=activeNodeUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activeNodeUtils.js","sourceRoot":"","sources":["../../../../src/powerquery-language-services/inspection/activeNode/activeNodeUtils.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,4BAA4B;AAC5B,uCAAuC;AACvC,kCAAkC;;;AAElC,sFAQmE;AACnE,oEAA+E;AAC/E,0FAAiH;
|
|
1
|
+
{"version":3,"file":"activeNodeUtils.js","sourceRoot":"","sources":["../../../../src/powerquery-language-services/inspection/activeNode/activeNodeUtils.ts"],"names":[],"mappings":"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"}
|
package/lib/powerquery-language-services/inspection/autocomplete/autocompleteFieldAccess.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as PQP from "@microsoft/powerquery-parser";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { NodeIdMap } from "@microsoft/powerquery-parser/lib/powerquery-parser/parser";
|
|
3
|
+
import { ActiveNode, TActiveNode } from "../activeNode";
|
|
4
|
+
import { InspectedFieldAccess, TriedAutocompleteFieldAccess } from "./commonTypes";
|
|
4
5
|
import { InspectionSettings } from "../../inspectionSettings";
|
|
5
6
|
import { TypeCache } from "../typeCache";
|
|
7
|
+
export declare function inspectFieldAccess(lexerSnapshot: PQP.Lexer.LexerSnapshot, nodeIdMapCollection: NodeIdMap.Collection, activeNode: ActiveNode): InspectedFieldAccess | undefined;
|
|
6
8
|
export declare function tryAutocompleteFieldAccess(settings: InspectionSettings, parseState: PQP.Parser.ParseState, activeNode: TActiveNode, typeCache: TypeCache): Promise<TriedAutocompleteFieldAccess>;
|
|
@@ -11,17 +11,33 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
});
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.tryAutocompleteFieldAccess = void 0;
|
|
14
|
+
exports.tryAutocompleteFieldAccess = exports.inspectFieldAccess = void 0;
|
|
15
15
|
const PQP = require("@microsoft/powerquery-parser");
|
|
16
16
|
const parser_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/parser");
|
|
17
17
|
const powerquery_parser_1 = require("@microsoft/powerquery-parser");
|
|
18
|
+
const language_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/language");
|
|
19
|
+
const token_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/language/token");
|
|
20
|
+
const trace_1 = require("@microsoft/powerquery-parser/lib/powerquery-parser/common/trace");
|
|
18
21
|
const activeNode_1 = require("../activeNode");
|
|
19
|
-
const autocompleteItem_1 = require("./autocompleteItem");
|
|
20
22
|
const __1 = require("../..");
|
|
21
23
|
const type_1 = require("../type");
|
|
24
|
+
function inspectFieldAccess(lexerSnapshot, nodeIdMapCollection, activeNode) {
|
|
25
|
+
const fieldProjection = parser_1.AncestryUtils.findNodeKind(activeNode.ancestry, language_1.Ast.NodeKind.FieldProjection);
|
|
26
|
+
const fieldSelector = parser_1.AncestryUtils.findNodeKind(activeNode.ancestry, language_1.Ast.NodeKind.FieldSelector);
|
|
27
|
+
if (fieldProjection) {
|
|
28
|
+
return inspectFieldProjection(lexerSnapshot, nodeIdMapCollection, activeNode.position, fieldProjection);
|
|
29
|
+
}
|
|
30
|
+
else if (fieldSelector) {
|
|
31
|
+
return inspectFieldSelector(lexerSnapshot, nodeIdMapCollection, activeNode.position, fieldSelector);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.inspectFieldAccess = inspectFieldAccess;
|
|
22
38
|
function tryAutocompleteFieldAccess(settings, parseState, activeNode, typeCache) {
|
|
23
39
|
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
-
const trace = settings.traceManager.entry(
|
|
40
|
+
const trace = settings.traceManager.entry(__1.AutocompleteTraceConstant.AutocompleteFieldAccess, tryAutocompleteFieldAccess.name, settings.initialCorrelationId);
|
|
25
41
|
const updatedSettings = Object.assign(Object.assign({}, settings), { initialCorrelationId: trace.id });
|
|
26
42
|
let result;
|
|
27
43
|
if (!activeNode_1.ActiveNodeUtils.isPositionInBounds(activeNode)) {
|
|
@@ -30,40 +46,22 @@ function tryAutocompleteFieldAccess(settings, parseState, activeNode, typeCache)
|
|
|
30
46
|
else {
|
|
31
47
|
result = yield powerquery_parser_1.ResultUtils.ensureResultAsync(() => autocompleteFieldAccess(updatedSettings, parseState, activeNode, typeCache), updatedSettings.locale);
|
|
32
48
|
}
|
|
33
|
-
trace.exit({ [
|
|
49
|
+
trace.exit({ [trace_1.TraceConstant.IsError]: powerquery_parser_1.ResultUtils.isError(result) });
|
|
34
50
|
return result;
|
|
35
51
|
});
|
|
36
52
|
}
|
|
37
53
|
exports.tryAutocompleteFieldAccess = tryAutocompleteFieldAccess;
|
|
38
54
|
const AllowedExtendedTypeKindsForFieldEntries = [
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
55
|
+
language_1.Type.ExtendedTypeKind.AnyUnion,
|
|
56
|
+
language_1.Type.ExtendedTypeKind.DefinedRecord,
|
|
57
|
+
language_1.Type.ExtendedTypeKind.DefinedTable,
|
|
42
58
|
];
|
|
43
59
|
function autocompleteFieldAccess(settings, parseState, activeNode, typeCache) {
|
|
44
60
|
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
-
|
|
46
|
-
// Option 1: Find a field access node in the ancestry.
|
|
47
|
-
let fieldAccessAncestor;
|
|
48
|
-
for (const ancestor of activeNode.ancestry) {
|
|
49
|
-
if (parser_1.XorNodeUtils.isNodeKind(ancestor, [
|
|
50
|
-
"FieldSelector" /* FieldSelector */,
|
|
51
|
-
"FieldProjection" /* FieldProjection */,
|
|
52
|
-
])) {
|
|
53
|
-
fieldAccessAncestor = ancestor;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
if (fieldAccessAncestor !== undefined) {
|
|
57
|
-
inspectedFieldAccess = inspectFieldAccess(parseState.lexerSnapshot, parseState.contextState.nodeIdMapCollection, activeNode.position, fieldAccessAncestor);
|
|
58
|
-
}
|
|
61
|
+
const inspectedFieldAccess = inspectFieldAccess(parseState.lexerSnapshot, parseState.contextState.nodeIdMapCollection, activeNode);
|
|
59
62
|
// No field access was found, or the field access reports no autocomplete is possible.
|
|
60
63
|
// Eg. `[x = 1][x |]`
|
|
61
|
-
if (inspectedFieldAccess ===
|
|
62
|
-
return undefined;
|
|
63
|
-
}
|
|
64
|
-
// Don't waste time on type analysis if the field access
|
|
65
|
-
// reports it's in an invalid location for an autocomplete.
|
|
66
|
-
if (!inspectedFieldAccess.isAutocompleteAllowed) {
|
|
64
|
+
if (!(inspectedFieldAccess === null || inspectedFieldAccess === void 0 ? void 0 : inspectedFieldAccess.isAutocompleteAllowed)) {
|
|
67
65
|
return undefined;
|
|
68
66
|
}
|
|
69
67
|
// After a field access was found then find the field it's accessing and inspect the field's Type.
|
|
@@ -92,9 +90,38 @@ function autocompleteFieldAccess(settings, parseState, activeNode, typeCache) {
|
|
|
92
90
|
};
|
|
93
91
|
});
|
|
94
92
|
}
|
|
93
|
+
function createAutocompleteItems(fieldEntries, inspectedFieldAccess) {
|
|
94
|
+
const autocompleteItems = [];
|
|
95
|
+
const { textUnderPosition, textEditRange } = inspectedFieldAccess;
|
|
96
|
+
for (const [label, powerQueryType] of fieldEntries) {
|
|
97
|
+
autocompleteItems.push(createAutocompleteItem(label, powerQueryType, textUnderPosition, textEditRange));
|
|
98
|
+
}
|
|
99
|
+
return autocompleteItems;
|
|
100
|
+
}
|
|
101
|
+
function createAutocompleteItem(label, powerQueryType, textUnderPosition, textEditRange) {
|
|
102
|
+
const jaroWinklerScore = textUnderPosition ? (0, __1.calculateJaroWinkler)(label, textUnderPosition) : 1;
|
|
103
|
+
// If the key is a quoted identifier but doesn't need to be one then slice out the quote contents.
|
|
104
|
+
const identifierKind = PQP.Language.TextUtils.identifierKind(label, false);
|
|
105
|
+
const normalizedLabel = identifierKind === PQP.Language.TextUtils.IdentifierKind.Quote ? label.slice(2, -1) : label;
|
|
106
|
+
return {
|
|
107
|
+
jaroWinklerScore,
|
|
108
|
+
kind: __1.CompletionItemKind.Field,
|
|
109
|
+
label: normalizedLabel,
|
|
110
|
+
powerQueryType,
|
|
111
|
+
textEdit: textEditRange ? __1.TextEdit.replace(textEditRange, label) : undefined,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function emptyInspectedFieldAccess(isAutocompleteAllowed) {
|
|
115
|
+
return {
|
|
116
|
+
fieldNames: [],
|
|
117
|
+
isAutocompleteAllowed,
|
|
118
|
+
textEditRange: undefined,
|
|
119
|
+
textUnderPosition: undefined,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
95
122
|
function fieldEntriesFromFieldType(type) {
|
|
96
123
|
switch (type.extendedKind) {
|
|
97
|
-
case
|
|
124
|
+
case language_1.Type.ExtendedTypeKind.AnyUnion: {
|
|
98
125
|
let fields = [];
|
|
99
126
|
for (const field of type.unionedTypePairs) {
|
|
100
127
|
if (field.extendedKind && AllowedExtendedTypeKindsForFieldEntries.includes(field.extendedKind)) {
|
|
@@ -103,102 +130,98 @@ function fieldEntriesFromFieldType(type) {
|
|
|
103
130
|
}
|
|
104
131
|
return fields;
|
|
105
132
|
}
|
|
106
|
-
case
|
|
107
|
-
case
|
|
133
|
+
case language_1.Type.ExtendedTypeKind.DefinedRecord:
|
|
134
|
+
case language_1.Type.ExtendedTypeKind.DefinedTable:
|
|
108
135
|
return [...type.fields.entries()];
|
|
109
136
|
default:
|
|
110
137
|
return [];
|
|
111
138
|
}
|
|
112
139
|
}
|
|
113
|
-
function inspectFieldAccess(lexerSnapshot, nodeIdMapCollection, position, fieldAccess) {
|
|
114
|
-
switch (fieldAccess.node.kind) {
|
|
115
|
-
case "FieldProjection" /* FieldProjection */:
|
|
116
|
-
return inspectFieldProjection(lexerSnapshot, nodeIdMapCollection, position, fieldAccess);
|
|
117
|
-
case "FieldSelector" /* FieldSelector */:
|
|
118
|
-
return inspectFieldSelector(lexerSnapshot, nodeIdMapCollection, position, fieldAccess);
|
|
119
|
-
default:
|
|
120
|
-
throw powerquery_parser_1.Assert.isNever(fieldAccess.node);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
140
|
function inspectFieldProjection(lexerSnapshot, nodeIdMapCollection, position, fieldProjection) {
|
|
124
|
-
|
|
125
|
-
let
|
|
126
|
-
|
|
141
|
+
const fieldNamesResult = [];
|
|
142
|
+
let isAutocompleteAllowedResult = false;
|
|
143
|
+
let textEditRangeResult;
|
|
144
|
+
let textUnderPositionResult;
|
|
127
145
|
for (const fieldSelector of parser_1.NodeIdMapIterator.iterFieldProjection(nodeIdMapCollection, fieldProjection)) {
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
146
|
+
const inspectedFieldAccess = inspectFieldSelector(lexerSnapshot, nodeIdMapCollection, position, fieldSelector);
|
|
147
|
+
fieldNamesResult.push(...inspectedFieldAccess.fieldNames);
|
|
148
|
+
if (inspectedFieldAccess.isAutocompleteAllowed) {
|
|
149
|
+
isAutocompleteAllowedResult = true;
|
|
150
|
+
textEditRangeResult = inspectedFieldAccess.textEditRange;
|
|
151
|
+
textUnderPositionResult = inspectedFieldAccess.textUnderPosition;
|
|
132
152
|
}
|
|
133
|
-
fieldNames.push(...inspectedFieldSelector.fieldNames);
|
|
134
153
|
}
|
|
135
154
|
return {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
function createInspectedFieldAccess(isAutocompleteAllowed) {
|
|
142
|
-
return {
|
|
143
|
-
isAutocompleteAllowed,
|
|
144
|
-
identifierUnderPosition: undefined,
|
|
145
|
-
fieldNames: [],
|
|
155
|
+
fieldNames: fieldNamesResult,
|
|
156
|
+
isAutocompleteAllowed: isAutocompleteAllowedResult,
|
|
157
|
+
textEditRange: textEditRangeResult,
|
|
158
|
+
textUnderPosition: textUnderPositionResult,
|
|
146
159
|
};
|
|
147
160
|
}
|
|
148
161
|
function inspectFieldSelector(lexerSnapshot, nodeIdMapCollection, position, fieldSelector) {
|
|
149
|
-
var _a;
|
|
150
162
|
const childIds = nodeIdMapCollection.childIdsById.get(fieldSelector.node.id);
|
|
151
163
|
if (childIds === undefined) {
|
|
152
|
-
return
|
|
164
|
+
return emptyInspectedFieldAccess(false);
|
|
153
165
|
}
|
|
154
166
|
else if (childIds.length === 1) {
|
|
155
|
-
return
|
|
167
|
+
return emptyInspectedFieldAccess(nodeIdMapCollection.astNodeById.has(childIds[0]));
|
|
156
168
|
}
|
|
157
|
-
const
|
|
158
|
-
const generalizedIdentifierXor = parser_1.NodeIdMapUtils.assertXorChecked(nodeIdMapCollection, generalizedIdentifierId, "GeneralizedIdentifier" /* GeneralizedIdentifier */);
|
|
169
|
+
const generalizedIdentifierXor = parser_1.NodeIdMapUtils.assertXorChecked(nodeIdMapCollection, PQP.ArrayUtils.assertGet(childIds, 1), language_1.Ast.NodeKind.GeneralizedIdentifier);
|
|
159
170
|
switch (generalizedIdentifierXor.kind) {
|
|
160
|
-
|
|
171
|
+
// There isn't a perfect way to determine if an autocomplete should be allowed.
|
|
172
|
+
// Take the following scenario, staring with start with: `let foo = [key = 1] in foo`
|
|
173
|
+
// Now the user wants to add a field selector: `let [key = 1][|in foo`
|
|
174
|
+
// The parser rules generate the GeneralizedIdentifier `in foo`, even though the user wouldn't expect it.
|
|
175
|
+
//
|
|
176
|
+
// The best solution I can think of is the following:
|
|
177
|
+
// - if it' a fully parsed Ast (ie. there exists a closing bracket) then the entire field is fair game.
|
|
178
|
+
// - if it's a partial Ast (ie. there is no closing bracket) then only operate on the first identifier token
|
|
179
|
+
case PQP.Parser.XorNodeKind.Ast: {
|
|
161
180
|
const generalizedIdentifier = generalizedIdentifierXor.node;
|
|
162
|
-
const
|
|
181
|
+
const generalizedIdentifierLiteral = generalizedIdentifier.literal;
|
|
182
|
+
let isPositionInOrOnIdentifier;
|
|
183
|
+
let textEditRange;
|
|
184
|
+
let textUnderPosition;
|
|
185
|
+
const firstToken = lexerSnapshot.tokens[generalizedIdentifier.tokenRange.tokenIndexStart];
|
|
186
|
+
if (!generalizedIdentifierLiteral.includes(" ")) {
|
|
187
|
+
isPositionInOrOnIdentifier = __1.PositionUtils.isInAst(position, generalizedIdentifier, true, true);
|
|
188
|
+
textUnderPosition = isPositionInOrOnIdentifier ? generalizedIdentifierLiteral : undefined;
|
|
189
|
+
textEditRange = __1.PositionUtils.rangeFromTokenRange(generalizedIdentifier.tokenRange);
|
|
190
|
+
}
|
|
191
|
+
// Given `let _ = [key with space = 1][#"key with space"| in _`
|
|
192
|
+
// assume the user wants to autocomplete the identifier `#"key with space"`
|
|
193
|
+
//
|
|
194
|
+
// Given: `let _ = [key with space = 1][key| in _`
|
|
195
|
+
// assume the user wants to autocomplete the identifier `key`
|
|
196
|
+
else if ((firstToken === null || firstToken === void 0 ? void 0 : firstToken.kind) === token_1.TokenKind.Identifier) {
|
|
197
|
+
isPositionInOrOnIdentifier = __1.PositionUtils.isInToken(position, firstToken, true, true);
|
|
198
|
+
textUnderPosition = isPositionInOrOnIdentifier ? firstToken.data : undefined;
|
|
199
|
+
textEditRange = isPositionInOrOnIdentifier ? __1.PositionUtils.rangeFromToken(firstToken) : undefined;
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
isPositionInOrOnIdentifier = false;
|
|
203
|
+
textEditRange = undefined;
|
|
204
|
+
textUnderPosition = undefined;
|
|
205
|
+
}
|
|
163
206
|
return {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
207
|
+
fieldNames: [generalizedIdentifierLiteral],
|
|
208
|
+
isAutocompleteAllowed: isPositionInOrOnIdentifier,
|
|
209
|
+
textEditRange,
|
|
210
|
+
textUnderPosition,
|
|
167
211
|
};
|
|
168
212
|
}
|
|
169
|
-
case
|
|
170
|
-
// TODO [Autocomplete]:
|
|
171
|
-
// This doesn't take into account of generalized identifiers consisting of multiple tokens.
|
|
172
|
-
// Eg. `foo[bar baz]` or `foo[#"bar baz"].
|
|
173
|
-
const openBracketConstant = parser_1.NodeIdMapUtils.assertNthChildAstChecked(nodeIdMapCollection, fieldSelector.node.id, 0, "Constant" /* Constant */);
|
|
174
|
-
const nextTokenPosition = (_a = lexerSnapshot.tokens[openBracketConstant.tokenRange.tokenIndexEnd + 1]) === null || _a === void 0 ? void 0 : _a.positionStart;
|
|
175
|
-
const isAutocompleteAllowed = __1.PositionUtils.isAfterAst(position, openBracketConstant, false) &&
|
|
176
|
-
(nextTokenPosition === undefined ||
|
|
177
|
-
__1.PositionUtils.isOnTokenPosition(position, nextTokenPosition) ||
|
|
178
|
-
__1.PositionUtils.isBeforeTokenPosition(position, nextTokenPosition, true));
|
|
213
|
+
case PQP.Parser.XorNodeKind.Context: {
|
|
179
214
|
return {
|
|
180
|
-
isAutocompleteAllowed,
|
|
181
|
-
identifierUnderPosition: undefined,
|
|
182
215
|
fieldNames: [],
|
|
216
|
+
isAutocompleteAllowed: true,
|
|
217
|
+
textEditRange: undefined,
|
|
218
|
+
textUnderPosition: undefined,
|
|
183
219
|
};
|
|
184
220
|
}
|
|
185
221
|
default:
|
|
186
222
|
throw powerquery_parser_1.Assert.isNever(generalizedIdentifierXor);
|
|
187
223
|
}
|
|
188
224
|
}
|
|
189
|
-
function createAutocompleteItems(fieldEntries, inspectedFieldAccess) {
|
|
190
|
-
var _a;
|
|
191
|
-
const fieldAccessNames = inspectedFieldAccess.fieldNames;
|
|
192
|
-
const autocompleteItems = [];
|
|
193
|
-
const identifierUnderPositionLiteral = (_a = inspectedFieldAccess.identifierUnderPosition) === null || _a === void 0 ? void 0 : _a.literal;
|
|
194
|
-
for (const [label, powerQueryType] of fieldEntries) {
|
|
195
|
-
if (fieldAccessNames.includes(label) && label !== identifierUnderPositionLiteral) {
|
|
196
|
-
continue;
|
|
197
|
-
}
|
|
198
|
-
autocompleteItems.push(autocompleteItem_1.AutocompleteItemUtils.fromFieldAccess(label, powerQueryType, identifierUnderPositionLiteral));
|
|
199
|
-
}
|
|
200
|
-
return autocompleteItems;
|
|
201
|
-
}
|
|
202
225
|
function typablePrimaryExpression(nodeIdMapCollection, activeNode) {
|
|
203
226
|
const ancestry = activeNode.ancestry;
|
|
204
227
|
const numAncestors = ancestry.length;
|
|
@@ -206,7 +229,7 @@ function typablePrimaryExpression(nodeIdMapCollection, activeNode) {
|
|
|
206
229
|
let matchingContiguousPrimaryExpression = true;
|
|
207
230
|
for (let index = 0; index < numAncestors; index += 1) {
|
|
208
231
|
const xorNode = ancestry[index];
|
|
209
|
-
if (xorNode.node.kind ===
|
|
232
|
+
if (xorNode.node.kind === language_1.Ast.NodeKind.RecursivePrimaryExpression) {
|
|
210
233
|
// The previous ancestor must be an attribute of Rpe, which is either its head or ArrrayWrapper.
|
|
211
234
|
const xorNodeBeforeRpe = parser_1.AncestryUtils.assertNth(ancestry, index - 1);
|
|
212
235
|
// If we're coming from the head node,
|
|
@@ -221,7 +244,7 @@ function typablePrimaryExpression(nodeIdMapCollection, activeNode) {
|
|
|
221
244
|
return parser_1.NodeIdMapUtils.assertRecursiveExpressionPreviousSibling(nodeIdMapCollection, rpeChild.node.id);
|
|
222
245
|
}
|
|
223
246
|
else {
|
|
224
|
-
throw new PQP.CommonError.InvariantError(`the child of a ${
|
|
247
|
+
throw new PQP.CommonError.InvariantError(`the child of a ${language_1.Ast.NodeKind.RecursivePrimaryExpression} should have an attribute index of either 1 or 2`, {
|
|
225
248
|
parentId: xorNode.node.id,
|
|
226
249
|
childId: xorNodeBeforeRpe.node.id,
|
|
227
250
|
});
|