clarity-pattern-parser 10.2.0 → 10.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clarity-pattern-parser",
3
- "version": "10.2.0",
3
+ "version": "10.2.2",
4
4
  "description": "Parsing Library for Typescript and Javascript.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.esm.js",
@@ -99,16 +99,16 @@ function createOptionsExpression() {
99
99
  describe("Expression Pattern", () => {
100
100
  test("Single Expression", () => {
101
101
  const expression = createExpressionPattern();
102
- let result = expression.exec("a");
103
- result = expression.exec("a + b");
104
- result = expression.exec("a + b * c * d");
105
- result = expression.exec("a + b * c || d + e");
106
- result = expression.exec("(a + b) * (c + d)");
107
- result = expression.exec("(a + b) * c + (d + e)");
108
- result = expression.exec("a + b * c ? d : e");
109
- result = expression.exec("a + b * (a + b * c ? d : e) ? d : e");
110
- result = expression.exec("a + b * a + b * c ? d : e ? d : e");
111
- result = expression.exec("a + b * ?");
102
+ let result = expression.exec("a || c || b / c * a + d");
103
+ result = expression.exec("a + b");
104
+ result = expression.exec("a + b * c * d");
105
+ result = expression.exec("a + b * c || d + e");
106
+ result = expression.exec("(a + b) * (c + d)");
107
+ result = expression.exec("(a + b) * c + (d + e)");
108
+ result = expression.exec("a + b * c ? d : e");
109
+ result = expression.exec("a + b * (a + b * c ? d : e) ? d : e");
110
+ result = expression.exec("a + b * a + b * c ? d : e ? d : e");
111
+ result = expression.exec("a + b * ?");
112
112
 
113
113
  expect(result).toBe(result);
114
114
  });
@@ -125,7 +125,7 @@ describe("Expression Pattern", () => {
125
125
  const expression = createExpressionPattern();
126
126
 
127
127
  const autoComplete = new AutoComplete(expression);
128
- const suggestion = autoComplete.suggestFor("a ? b ");
128
+ const suggestion = autoComplete.suggestFor("a");
129
129
 
130
130
  expect(suggestion).toBe(suggestion);
131
131
  });
@@ -144,11 +144,11 @@ export class ExpressionPattern implements Pattern {
144
144
 
145
145
  private _isBinaryPattern(pattern: Pattern) {
146
146
  return pattern.type === "sequence" &&
147
+ pattern.children.length === 3 &&
147
148
  pattern.children[0].type === "reference" &&
148
149
  pattern.children[0].name === this.name &&
149
150
  pattern.children[2].type === "reference" &&
150
- pattern.children[2].name === this.name &&
151
- pattern.children.length === 3;
151
+ pattern.children[2].name === this.name;
152
152
  }
153
153
 
154
154
  private _extractDelimiter(pattern: Pattern) {
@@ -310,11 +310,26 @@ export class ExpressionPattern implements Pattern {
310
310
  node.append(lastBinaryNode, delimiterNode);
311
311
  lastBinaryNode = node;
312
312
  } else if (precedence > lastPrecendece) {
313
- const root = lastBinaryNode.findRoot();
313
+ let ancestor = lastBinaryNode.parent;
314
+ let root: Node | null = lastBinaryNode;
315
+
316
+ while (ancestor != null) {
317
+ const nodePrecedence = this._precedenceMap[ancestor.name];
318
+
319
+ if (nodePrecedence > precedence) {
320
+ break;
321
+ }
322
+ root = ancestor;
323
+ ancestor = ancestor.parent;
324
+ }
325
+
314
326
  lastBinaryNode.appendChild(lastUnaryNode);
315
327
 
316
328
  if (root != null) {
317
- const node = createNode(name, [root, delimiterNode]);
329
+ const node = createNode(name, []);
330
+ root.replaceWith(node);
331
+ node.append(root, delimiterNode);
332
+
318
333
  lastBinaryNode = node;
319
334
  } else {
320
335
  const node = createNode(name, [lastUnaryNode, delimiterNode]);
@@ -338,7 +353,7 @@ export class ExpressionPattern implements Pattern {
338
353
  break;
339
354
  }
340
355
 
341
- if (lastBinaryNode == null){
356
+ if (lastBinaryNode == null) {
342
357
  break;
343
358
  }
344
359
  }