clarity-pattern-parser 3.0.7 → 3.0.9
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/dist/Cursor.js +105 -0
- package/dist/Cursor.js.map +1 -0
- package/dist/CursorHistory.js +104 -0
- package/dist/CursorHistory.js.map +1 -0
- package/dist/Permutor.js +52 -0
- package/dist/Permutor.js.map +1 -0
- package/dist/TextSuggester.js +223 -0
- package/dist/TextSuggester.js.map +1 -0
- package/dist/ast/CompositeNode.js +17 -0
- package/dist/ast/CompositeNode.js.map +1 -0
- package/dist/ast/Node.js +16 -0
- package/dist/ast/Node.js.map +1 -0
- package/dist/ast/ValueNode.js +14 -0
- package/dist/ast/ValueNode.js.map +1 -0
- package/dist/ast/Visitor.d.ts +2 -2
- package/dist/ast/Visitor.js +209 -0
- package/dist/ast/Visitor.js.map +1 -0
- package/dist/index.browser.js +38 -32
- package/dist/index.browser.js.map +1 -1
- package/dist/index.esm.js +38 -32
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +38 -32
- package/dist/index.js.map +1 -1
- package/dist/patterns/ParseError.js +9 -0
- package/dist/patterns/ParseError.js.map +1 -0
- package/dist/patterns/Pattern.js +127 -0
- package/dist/patterns/Pattern.js.map +1 -0
- package/dist/patterns/RecursivePattern.js +65 -0
- package/dist/patterns/RecursivePattern.js.map +1 -0
- package/dist/patterns/composite/AndComposite.js +117 -0
- package/dist/patterns/composite/AndComposite.js.map +1 -0
- package/dist/patterns/composite/CompositePattern.js +7 -0
- package/dist/patterns/composite/CompositePattern.js.map +1 -0
- package/dist/patterns/composite/OptionalComposite.js +29 -0
- package/dist/patterns/composite/OptionalComposite.js.map +1 -0
- package/dist/patterns/composite/OrComposite.js +69 -0
- package/dist/patterns/composite/OrComposite.js.map +1 -0
- package/dist/patterns/composite/RepeatComposite.js +83 -0
- package/dist/patterns/composite/RepeatComposite.js.map +1 -0
- package/dist/patterns/value/AndValue.js +118 -0
- package/dist/patterns/value/AndValue.js.map +1 -0
- package/dist/patterns/value/AnyOfThese.js +59 -0
- package/dist/patterns/value/AnyOfThese.js.map +1 -0
- package/dist/patterns/value/Literal.js +63 -0
- package/dist/patterns/value/Literal.js.map +1 -0
- package/dist/patterns/value/NotValue.js +70 -0
- package/dist/patterns/value/NotValue.js.map +1 -0
- package/dist/patterns/value/OptionalValue.js +32 -0
- package/dist/patterns/value/OptionalValue.js.map +1 -0
- package/dist/patterns/value/OrValue.js +73 -0
- package/dist/patterns/value/OrValue.js.map +1 -0
- package/dist/patterns/value/RegexValue.js +69 -0
- package/dist/patterns/value/RegexValue.js.map +1 -0
- package/dist/patterns/value/RepeatValue.js +84 -0
- package/dist/patterns/value/RepeatValue.js.map +1 -0
- package/dist/patterns/value/ValuePattern.js +7 -0
- package/dist/patterns/value/ValuePattern.js.map +1 -0
- package/package.json +1 -1
- package/src/TextSuggester.ts +15 -7
- package/src/ast/Visitor.ts +40 -40
- package/src/tests/TextSuggester.test.ts +15 -0
- package/src/tests/javascriptPatterns/json.ts +1 -0
package/src/ast/Visitor.ts
CHANGED
|
@@ -14,7 +14,7 @@ export default class Visitor {
|
|
|
14
14
|
if (node.isComposite) {
|
|
15
15
|
const children: Node[] = [];
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Visitor.walkUp(node, (descendant: Node) => {
|
|
18
18
|
if (!descendant.isComposite) {
|
|
19
19
|
children.push(descendant);
|
|
20
20
|
}
|
|
@@ -68,7 +68,7 @@ export default class Visitor {
|
|
|
68
68
|
return this;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
Visitor.walkDown(this.root, (node, stack) => {
|
|
72
72
|
if (this.selectedNodes.includes(node)) {
|
|
73
73
|
const parent = stack[stack.length - 1];
|
|
74
74
|
const grandParent = stack[stack.length - 2];
|
|
@@ -90,7 +90,7 @@ export default class Visitor {
|
|
|
90
90
|
return this;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
Visitor.walkUp(this.root, (node, stack) => {
|
|
94
94
|
if (this.selectedNodes.includes(node)) {
|
|
95
95
|
const parent = stack[stack.length - 1];
|
|
96
96
|
|
|
@@ -111,7 +111,7 @@ export default class Visitor {
|
|
|
111
111
|
return this;
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
Visitor.walkDown(this.root, (node, stack) => {
|
|
115
115
|
if (this.selectedNodes.includes(node)) {
|
|
116
116
|
const parent = stack[stack.length - 1];
|
|
117
117
|
|
|
@@ -147,41 +147,6 @@ export default class Visitor {
|
|
|
147
147
|
return callback(node);
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
walkUp(
|
|
151
|
-
node: Node,
|
|
152
|
-
callback: (node: Node, ancestors: Node[]) => void,
|
|
153
|
-
ancestors: Node[] = []
|
|
154
|
-
) {
|
|
155
|
-
ancestors.push(node);
|
|
156
|
-
|
|
157
|
-
if (node.isComposite && Array.isArray(node.children)) {
|
|
158
|
-
const children = node.children.slice();
|
|
159
|
-
children.forEach((c) => this.walkUp(c, callback, ancestors));
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
ancestors.pop();
|
|
163
|
-
callback(node, ancestors);
|
|
164
|
-
|
|
165
|
-
return this;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
walkDown(
|
|
169
|
-
node: Node,
|
|
170
|
-
callback: (node: Node, ancestors: Node[]) => void,
|
|
171
|
-
ancestors: Node[] = []
|
|
172
|
-
) {
|
|
173
|
-
callback(node, ancestors);
|
|
174
|
-
ancestors.push(node);
|
|
175
|
-
|
|
176
|
-
if (node.isComposite && Array.isArray(node.children)) {
|
|
177
|
-
const children = node.children.slice();
|
|
178
|
-
children.forEach((c) => this.walkDown(c, callback, ancestors));
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
ancestors.pop();
|
|
182
|
-
return this;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
150
|
selectAll() {
|
|
186
151
|
return this.select((n) => true);
|
|
187
152
|
}
|
|
@@ -204,7 +169,7 @@ export default class Visitor {
|
|
|
204
169
|
const selectedNodes: Node[] = [];
|
|
205
170
|
|
|
206
171
|
if (node.isComposite) {
|
|
207
|
-
|
|
172
|
+
Visitor.walkDown(node, (descendant: Node) => {
|
|
208
173
|
if (callback(descendant)) {
|
|
209
174
|
selectedNodes.push(descendant);
|
|
210
175
|
}
|
|
@@ -272,4 +237,39 @@ export default class Visitor {
|
|
|
272
237
|
return new Visitor(root);
|
|
273
238
|
}
|
|
274
239
|
}
|
|
240
|
+
|
|
241
|
+
static walkUp(
|
|
242
|
+
node: Node,
|
|
243
|
+
callback: (node: Node, ancestors: Node[]) => void,
|
|
244
|
+
ancestors: Node[] = []
|
|
245
|
+
) {
|
|
246
|
+
ancestors.push(node);
|
|
247
|
+
|
|
248
|
+
if (node.isComposite && Array.isArray(node.children)) {
|
|
249
|
+
const children = node.children.slice();
|
|
250
|
+
children.forEach((c) => this.walkUp(c, callback, ancestors));
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
ancestors.pop();
|
|
254
|
+
callback(node, ancestors);
|
|
255
|
+
|
|
256
|
+
return this;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
static walkDown(
|
|
260
|
+
node: Node,
|
|
261
|
+
callback: (node: Node, ancestors: Node[]) => void,
|
|
262
|
+
ancestors: Node[] = []
|
|
263
|
+
) {
|
|
264
|
+
callback(node, ancestors);
|
|
265
|
+
ancestors.push(node);
|
|
266
|
+
|
|
267
|
+
if (node.isComposite && Array.isArray(node.children)) {
|
|
268
|
+
const children = node.children.slice();
|
|
269
|
+
children.forEach((c) => this.walkDown(c, callback, ancestors));
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
ancestors.pop();
|
|
273
|
+
return this;
|
|
274
|
+
}
|
|
275
275
|
}
|
|
@@ -80,6 +80,21 @@ describe("TextInspector", () => {
|
|
|
80
80
|
expect(inspection.error).toBe(null);
|
|
81
81
|
});
|
|
82
82
|
|
|
83
|
+
test("Partial Half Match On First Token", () => {
|
|
84
|
+
const text = "Pa";
|
|
85
|
+
const textInspector = new TextSuggester();
|
|
86
|
+
|
|
87
|
+
const inspection = textInspector.suggest(text, sentence);
|
|
88
|
+
|
|
89
|
+
expect(inspection.match?.startIndex).toBe(0);
|
|
90
|
+
expect(inspection.match?.endIndex).toBe(1);
|
|
91
|
+
expect(inspection.match?.text).toBe("Pa");
|
|
92
|
+
expect(inspection.options.values.length).toBe(1);
|
|
93
|
+
expect(inspection.options.values[0]).toBe("t");
|
|
94
|
+
expect(inspection.isComplete).toBe(false);
|
|
95
|
+
expect(inspection.error).toBe(null);
|
|
96
|
+
});
|
|
97
|
+
|
|
83
98
|
test("Empty String", () => {
|
|
84
99
|
const text = "";
|
|
85
100
|
const textInspector = new TextSuggester();
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
import string from "./string";
|
|
14
14
|
import number from "./number";
|
|
15
15
|
import boolean from "./boolean";
|
|
16
|
+
import Cursor from "../../Cursor";
|
|
16
17
|
|
|
17
18
|
const openCurlyBracket = new Literal("open-curly-bracket", "{");
|
|
18
19
|
const closeCurlyBracket = new Literal("close-curly-bracket", "}");
|