···
it('supports parsing expressions', () => {
expect(parseTag`${1}`).toEqual({
10
+
quantifier: undefined,
13
+
alternation: undefined,
···
23
-
expect(ast).toHaveProperty('sequence.0.type', 'expression');
expect(ast).toHaveProperty('sequence.0.quantifier', '?');
27
-
expect(ast).toHaveProperty('sequence.0.type', 'expression');
expect(ast).toHaveProperty('sequence.0.quantifier', '+');
31
-
expect(ast).toHaveProperty('sequence.0.type', 'expression');
expect(ast).toHaveProperty('sequence.0.quantifier', '*');
···
ast = parseTag`${1} | ${2}`;
expect(ast).toHaveProperty('sequence.length', 1);
40
-
expect(ast).toHaveProperty('sequence.0.type', 'expression');
expect(ast).toHaveProperty('sequence.0.expression', 1);
42
-
expect(ast).toHaveProperty('alternation.type', 'sequence');
expect(ast).toHaveProperty('alternation.sequence.0.expression', 2);
ast = parseTag`${1}? | ${2}?`;
···
ast = parseTag`(${1} ${2})`;
expect(ast).toHaveProperty('sequence.length', 1);
54
-
expect(ast).toHaveProperty('sequence.0.type', 'group');
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 2);
expect(ast).toHaveProperty('sequence.0.sequence.sequence.0.expression', 1);
expect(ast).toHaveProperty('sequence.0.sequence.sequence.1.expression', 2);
ast = parseTag`(${1} ${2}?)?`;
expect(ast).toHaveProperty('sequence.length', 1);
61
-
expect(ast).toHaveProperty('sequence.0.type', 'group');
expect(ast).toHaveProperty('sequence.0.quantifier', '?');
63
-
expect(ast).toHaveProperty('sequence.0.sequence.sequence.0.quantifier', null);
54
+
expect(ast).toHaveProperty(
55
+
'sequence.0.sequence.sequence.0.quantifier',
it('supports non-capturing groups', () => {
const ast = parseTag`(?: ${1})`;
expect(ast).toHaveProperty('sequence.length', 1);
69
-
expect(ast).toHaveProperty('sequence.0.type', 'group');
expect(ast).toHaveProperty('sequence.0.capture', ':');
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 1);
···
it('supports positive lookahead groups', () => {
const ast = parseTag`(?= ${1})`;
expect(ast).toHaveProperty('sequence.length', 1);
77
-
expect(ast).toHaveProperty('sequence.0.type', 'group');
expect(ast).toHaveProperty('sequence.0.capture', '=');
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 1);
···
it('supports negative lookahead groups', () => {
const ast = parseTag`(?! ${1})`;
expect(ast).toHaveProperty('sequence.length', 1);
85
-
expect(ast).toHaveProperty('sequence.0.type', 'group');
expect(ast).toHaveProperty('sequence.0.capture', '!');
expect(ast).toHaveProperty('sequence.0.sequence.sequence.length', 1);
···
it('supports groups with alternates', () => {
expect(parseTag`(${1} | ${2}) ${3}`).toMatchInlineSnapshot(`
93
-
"alternation": null,
100
-
"alternation": null,
104
-
"quantifier": null,
105
-
"type": "expression",
108
-
"type": "sequence",
113
-
"quantifier": null,
114
-
"type": "expression",
117
-
"type": "sequence",
123
-
"quantifier": null,
124
-
"type": "expression",
127
-
"type": "sequence",