clarity-pattern-parser 10.2.0 → 10.2.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clarity-pattern-parser",
3
- "version": "10.2.0",
3
+ "version": "10.2.1",
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
  });
@@ -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]);