parseman 0.23.0 → 0.24.0
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/combinators/keywords.d.ts.map +1 -1
- package/dist/combinators/literal.d.ts.map +1 -1
- package/dist/combinators/parser.d.ts +6 -0
- package/dist/combinators/parser.d.ts.map +1 -1
- package/dist/combinators/regex.d.ts.map +1 -1
- package/dist/combinators/trivia-skip.d.ts.map +1 -1
- package/dist/index.cjs +156 -39
- package/dist/index.cjs.map +3 -3
- package/dist/index.js +156 -39
- package/dist/index.js.map +3 -3
- package/dist/plugin/index.cjs +156 -39
- package/dist/plugin/index.cjs.map +3 -3
- package/dist/plugin/index.js +156 -39
- package/dist/plugin/index.js.map +3 -3
- package/dist/spec/ebnf.d.ts +13 -0
- package/dist/spec/ebnf.d.ts.map +1 -0
- package/dist/spec/index.cjs +977 -0
- package/dist/spec/index.cjs.map +7 -0
- package/dist/spec/index.d.ts +15 -0
- package/dist/spec/index.d.ts.map +1 -0
- package/dist/spec/index.js +954 -0
- package/dist/spec/index.js.map +7 -0
- package/dist/spec/model.d.ts +117 -0
- package/dist/spec/model.d.ts.map +1 -0
- package/dist/spec/railroad-lib.d.ts +11 -0
- package/dist/spec/railroad-lib.d.ts.map +1 -0
- package/dist/spec/railroad.d.ts +18 -0
- package/dist/spec/railroad.d.ts.map +1 -0
- package/package.json +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keywords.d.ts","sourceRoot":"","sources":["../../src/combinators/keywords.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAmD,MAAM,aAAa,CAAA;AAK9F,MAAM,MAAM,eAAe,GAAG;IAC5B,gCAAgC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,SAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAE7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,SAAe,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC,CAErF;AAMD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,GAAE,eAAoB,GAAG,UAAU,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"keywords.d.ts","sourceRoot":"","sources":["../../src/combinators/keywords.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAmD,MAAM,aAAa,CAAA;AAK9F,MAAM,MAAM,eAAe,GAAG;IAC5B,gCAAgC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,SAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAE7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,SAAe,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC,CAErF;AAMD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,GAAE,eAAoB,GAAG,UAAU,CAAC,MAAM,CAAC,CA0CjG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"literal.d.ts","sourceRoot":"","sources":["../../src/combinators/literal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAyC,MAAM,aAAa,CAAA;AAwBpF,MAAM,MAAM,cAAc,GAAG;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,UAAU,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"literal.d.ts","sourceRoot":"","sources":["../../src/combinators/literal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAyC,MAAM,aAAa,CAAA;AAwBpF,MAAM,MAAM,cAAc,GAAG;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,UAAU,CAAC,MAAM,CAAC,CAqEpF"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { Combinator } from '../types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Non-enumerable key on a `rules()` result holding the factory's declaration
|
|
4
|
+
* order (the returned object's key order), which differs from the result's own
|
|
5
|
+
* reference-creation key order. Read by `parseman/spec` for source-order output.
|
|
6
|
+
*/
|
|
7
|
+
export declare const RULE_ORDER = "__parsemanRuleOrder";
|
|
2
8
|
/**
|
|
3
9
|
* Define named grammar rules without forward declarations.
|
|
4
10
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/combinators/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/combinators/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAI7C;;;;GAIG;AACH,eAAO,MAAM,UAAU,wBAAwB,CAAA;AAO/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,oFAAoF;IACpF,MAAM,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;CAC7B,CAAA;AAKD,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;AAClG,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regex.d.ts","sourceRoot":"","sources":["../../src/combinators/regex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAyC,QAAQ,EAAE,MAAM,aAAa,CAAA;AAM9F;;;;;;;;;GASG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAAA;AAIzG,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAE3E;AA2DD,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,SAAK,GAAG,UAAU,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"regex.d.ts","sourceRoot":"","sources":["../../src/combinators/regex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAyC,QAAQ,EAAE,MAAM,aAAa,CAAA;AAM9F;;;;;;;;;GASG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAAA;AAIzG,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAE3E;AA2DD,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,SAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAiC9E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trivia-skip.d.ts","sourceRoot":"","sources":["../../src/combinators/trivia-skip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"trivia-skip.d.ts","sourceRoot":"","sources":["../../src/combinators/trivia-skip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,aAAa,CAAA;AAe3D;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,CAAA;AAE5D,iEAAiE;AACjE,MAAM,MAAM,kBAAkB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAM3G,oFAAoF;AACpF,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAEpE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,kBAAkB,CAGpE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAGhF;AAiBD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAWnF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU,CAkCpF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAKnF"}
|
package/dist/index.cjs
CHANGED
|
@@ -431,24 +431,35 @@ function literal(value, opts = {}) {
|
|
|
431
431
|
{ lo: firstUpper, hi: firstUpper }
|
|
432
432
|
] } : firstSet2;
|
|
433
433
|
}
|
|
434
|
+
const expected = [JSON.stringify(value)];
|
|
435
|
+
const parse2 = !caseInsensitive && value.length === 1 ? (() => {
|
|
436
|
+
const code = value.charCodeAt(0);
|
|
437
|
+
return function parse3(input, pos, ctx) {
|
|
438
|
+
if (input.charCodeAt(pos) === code) {
|
|
439
|
+
const span = { start: pos, end: pos + 1 };
|
|
440
|
+
if (cstCaptureActive(ctx)) pushCstLeaf(ctx, { _tag: "leaf", value, span });
|
|
441
|
+
return { ok: true, value, span };
|
|
442
|
+
}
|
|
443
|
+
return failAt(ctx, expected, pos);
|
|
444
|
+
};
|
|
445
|
+
})() : function parse3(input, pos, ctx) {
|
|
446
|
+
const end = pos + value.length;
|
|
447
|
+
if (end > input.length) {
|
|
448
|
+
return failAt(ctx, expected, pos);
|
|
449
|
+
}
|
|
450
|
+
const matchedValue = caseInsensitive ? input.slice(pos, end) : value;
|
|
451
|
+
if (caseInsensitive ? asciiFoldEq(matchedValue, value) : input.startsWith(value, pos)) {
|
|
452
|
+
const span = { start: pos, end };
|
|
453
|
+
if (cstCaptureActive(ctx)) pushCstLeaf(ctx, { _tag: "leaf", value: matchedValue, span });
|
|
454
|
+
return { ok: true, value: matchedValue, span };
|
|
455
|
+
}
|
|
456
|
+
return failAt(ctx, expected, pos);
|
|
457
|
+
};
|
|
434
458
|
return {
|
|
435
459
|
_tag: "literal",
|
|
436
460
|
_meta: meta,
|
|
437
461
|
_def: { tag: "literal", value, caseInsensitive },
|
|
438
|
-
parse
|
|
439
|
-
const end = pos + value.length;
|
|
440
|
-
if (end > input.length) {
|
|
441
|
-
return failAt(ctx, [JSON.stringify(value)], pos);
|
|
442
|
-
}
|
|
443
|
-
const matchedValue = caseInsensitive ? input.slice(pos, end) : value;
|
|
444
|
-
if (caseInsensitive ? asciiFoldEq(matchedValue, value) : input.startsWith(value, pos)) {
|
|
445
|
-
const span = { start: pos, end };
|
|
446
|
-
const leaf = { _tag: "leaf", value: matchedValue, span };
|
|
447
|
-
if (cstCaptureActive(ctx)) pushCstLeaf(ctx, leaf);
|
|
448
|
-
return { ok: true, value: matchedValue, span };
|
|
449
|
-
}
|
|
450
|
-
return failAt(ctx, [JSON.stringify(value)], pos);
|
|
451
|
-
}
|
|
462
|
+
parse: parse2
|
|
452
463
|
};
|
|
453
464
|
}
|
|
454
465
|
|
|
@@ -583,8 +594,7 @@ function regex(pattern, flags = "") {
|
|
|
583
594
|
if (scanEnd === null) return failAt(ctx, [`/${source}/`], pos);
|
|
584
595
|
const value = input.slice(pos, scanEnd);
|
|
585
596
|
const span2 = { start: pos, end: scanEnd };
|
|
586
|
-
|
|
587
|
-
if (cstCaptureActive(ctx)) pushCstLeaf(ctx, leaf2);
|
|
597
|
+
if (cstCaptureActive(ctx)) pushCstLeaf(ctx, { _tag: "leaf", value, span: span2 });
|
|
588
598
|
return { ok: true, value, span: span2 };
|
|
589
599
|
}
|
|
590
600
|
anchored.lastIndex = pos;
|
|
@@ -593,8 +603,7 @@ function regex(pattern, flags = "") {
|
|
|
593
603
|
return failAt(ctx, [`/${source}/`], pos);
|
|
594
604
|
}
|
|
595
605
|
const span = { start: pos, end: pos + m[0].length };
|
|
596
|
-
|
|
597
|
-
if (cstCaptureActive(ctx)) pushCstLeaf(ctx, leaf);
|
|
606
|
+
if (cstCaptureActive(ctx)) pushCstLeaf(ctx, { _tag: "leaf", value: m[0], span });
|
|
598
607
|
return { ok: true, value: m[0], span };
|
|
599
608
|
}
|
|
600
609
|
};
|
|
@@ -902,8 +911,7 @@ function keywords(words, opts = {}) {
|
|
|
902
911
|
}
|
|
903
912
|
const value = m[0];
|
|
904
913
|
const span = { start: pos, end: pos + value.length };
|
|
905
|
-
|
|
906
|
-
if (cstCaptureActive(ctx)) pushCstLeaf(ctx, leaf);
|
|
914
|
+
if (cstCaptureActive(ctx)) pushCstLeaf(ctx, { _tag: "leaf", value, span });
|
|
907
915
|
return { ok: true, value, span };
|
|
908
916
|
}
|
|
909
917
|
};
|
|
@@ -1393,33 +1401,136 @@ function loopScanner(arms) {
|
|
|
1393
1401
|
}
|
|
1394
1402
|
function regexTriviaScanner(parser2) {
|
|
1395
1403
|
if (parser2._def.tag !== "regex" || parser2._def.flags) return null;
|
|
1396
|
-
const
|
|
1397
|
-
|
|
1398
|
-
return blockCommentSource(parser2._def.source) ? scanBlockComment : null;
|
|
1404
|
+
const source = parser2._def.source;
|
|
1405
|
+
return classRunSource(source) ?? altStarSource(source) ?? (blockCommentSource(source) ? scanBlockComment : null);
|
|
1399
1406
|
}
|
|
1400
|
-
function
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1407
|
+
function inRanges2(cp, ranges) {
|
|
1408
|
+
for (let i = 0; i < ranges.length; i++) {
|
|
1409
|
+
const r = ranges[i];
|
|
1410
|
+
if (cp >= r[0] && cp <= r[1]) return true;
|
|
1411
|
+
}
|
|
1412
|
+
return false;
|
|
1413
|
+
}
|
|
1414
|
+
function classScanner(classBody) {
|
|
1415
|
+
const ranges = parseClassRanges(classBody);
|
|
1416
|
+
if (!ranges) return null;
|
|
1417
|
+
return (input, cur) => {
|
|
1418
|
+
let pos = cur;
|
|
1419
|
+
while (pos < input.length && inRanges2(input.charCodeAt(pos), ranges)) pos++;
|
|
1420
|
+
return pos;
|
|
1421
|
+
};
|
|
1422
|
+
}
|
|
1423
|
+
function lineCommentScanner(commentCode) {
|
|
1424
|
+
return (input, cur) => {
|
|
1425
|
+
if (input.charCodeAt(cur) !== commentCode) return cur;
|
|
1426
|
+
let pos = cur + 1;
|
|
1427
|
+
while (pos < input.length) {
|
|
1428
|
+
const cc = input.charCodeAt(pos);
|
|
1429
|
+
if (cc === 10 || cc === 13) break;
|
|
1430
|
+
pos++;
|
|
1409
1431
|
}
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1432
|
+
return pos;
|
|
1433
|
+
};
|
|
1434
|
+
}
|
|
1435
|
+
function classRunSource(source) {
|
|
1436
|
+
const m = /^\[([^\]^](?:[^\]]|\\.)*)\][*+]$/.exec(source);
|
|
1437
|
+
return m ? classScanner(m[1]) : null;
|
|
1438
|
+
}
|
|
1439
|
+
function classifyTriviaArm(arm) {
|
|
1440
|
+
const cls = /^\[([^\]^](?:[^\]]|\\.)*)\][*+]?$/.exec(arm);
|
|
1441
|
+
if (cls) {
|
|
1442
|
+
const ranges = parseClassRanges(cls[1]);
|
|
1443
|
+
return ranges ? { kind: "class", ranges } : null;
|
|
1444
|
+
}
|
|
1445
|
+
const lc = /^(\\?.)\[\^\\n\\r\]\*$/.exec(arm);
|
|
1446
|
+
if (lc) {
|
|
1447
|
+
const marker = lc[1];
|
|
1448
|
+
return { kind: "comment", code: (marker.length === 2 ? marker[1] : marker[0]).charCodeAt(0) };
|
|
1416
1449
|
}
|
|
1450
|
+
return null;
|
|
1451
|
+
}
|
|
1452
|
+
function armScanner(arm) {
|
|
1453
|
+
if (arm.kind === "comment") return lineCommentScanner(arm.code);
|
|
1454
|
+
const ranges = arm.ranges;
|
|
1455
|
+
return (input, cur) => {
|
|
1456
|
+
let pos = cur;
|
|
1457
|
+
while (pos < input.length && inRanges2(input.charCodeAt(pos), ranges)) pos++;
|
|
1458
|
+
return pos;
|
|
1459
|
+
};
|
|
1460
|
+
}
|
|
1461
|
+
function fusedTriviaScanner(ranges, commentCodes) {
|
|
1462
|
+
const c0 = commentCodes[0];
|
|
1463
|
+
const single = commentCodes.length === 1;
|
|
1417
1464
|
return (input, cur) => {
|
|
1418
1465
|
let pos = cur;
|
|
1419
|
-
|
|
1466
|
+
const len = input.length;
|
|
1467
|
+
for (; ; ) {
|
|
1468
|
+
const c = input.charCodeAt(pos);
|
|
1469
|
+
if (pos < len && inRanges2(c, ranges)) {
|
|
1470
|
+
pos++;
|
|
1471
|
+
continue;
|
|
1472
|
+
}
|
|
1473
|
+
if (single ? c === c0 : commentCodes.includes(c)) {
|
|
1474
|
+
pos++;
|
|
1475
|
+
while (pos < len) {
|
|
1476
|
+
const cc = input.charCodeAt(pos);
|
|
1477
|
+
if (cc === 10 || cc === 13) break;
|
|
1478
|
+
pos++;
|
|
1479
|
+
}
|
|
1480
|
+
continue;
|
|
1481
|
+
}
|
|
1482
|
+
break;
|
|
1483
|
+
}
|
|
1420
1484
|
return pos;
|
|
1421
1485
|
};
|
|
1422
1486
|
}
|
|
1487
|
+
function splitTopLevelAlts(body) {
|
|
1488
|
+
const arms = [];
|
|
1489
|
+
let inClass = false;
|
|
1490
|
+
let start = 0;
|
|
1491
|
+
for (let i = 0; i < body.length; i++) {
|
|
1492
|
+
const c = body[i];
|
|
1493
|
+
if (c === "\\") {
|
|
1494
|
+
i++;
|
|
1495
|
+
continue;
|
|
1496
|
+
}
|
|
1497
|
+
if (inClass) {
|
|
1498
|
+
if (c === "]") inClass = false;
|
|
1499
|
+
continue;
|
|
1500
|
+
}
|
|
1501
|
+
if (c === "[") inClass = true;
|
|
1502
|
+
else if (c === "(") return null;
|
|
1503
|
+
else if (c === "|") {
|
|
1504
|
+
arms.push(body.slice(start, i));
|
|
1505
|
+
start = i + 1;
|
|
1506
|
+
}
|
|
1507
|
+
}
|
|
1508
|
+
arms.push(body.slice(start));
|
|
1509
|
+
return arms;
|
|
1510
|
+
}
|
|
1511
|
+
function altStarSource(source) {
|
|
1512
|
+
const m = /^\(\?:(.*)\)[*+]$/.exec(source);
|
|
1513
|
+
if (!m) return null;
|
|
1514
|
+
const armSrcs = splitTopLevelAlts(m[1]);
|
|
1515
|
+
if (!armSrcs || armSrcs.length < 2) return null;
|
|
1516
|
+
const arms = [];
|
|
1517
|
+
for (const src of armSrcs) {
|
|
1518
|
+
const arm = classifyTriviaArm(src);
|
|
1519
|
+
if (!arm) return null;
|
|
1520
|
+
arms.push(arm);
|
|
1521
|
+
}
|
|
1522
|
+
const ranges = [];
|
|
1523
|
+
const commentCodes = [];
|
|
1524
|
+
for (const arm of arms) {
|
|
1525
|
+
if (arm.kind === "class") ranges.push(...arm.ranges);
|
|
1526
|
+
else commentCodes.push(arm.code);
|
|
1527
|
+
}
|
|
1528
|
+
if (commentCodes.some((code) => inRanges2(code, ranges))) {
|
|
1529
|
+
return loopScanner(arms.map(armScanner));
|
|
1530
|
+
}
|
|
1531
|
+
if (commentCodes.length === 0) return armScanner({ kind: "class", ranges });
|
|
1532
|
+
return fusedTriviaScanner(ranges, commentCodes);
|
|
1533
|
+
}
|
|
1423
1534
|
function blockCommentSource(source) {
|
|
1424
1535
|
return source === "\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/" || source === "\\/\\*[^]*?\\*\\/";
|
|
1425
1536
|
}
|
|
@@ -1773,6 +1884,7 @@ function markUnusedValues(root) {
|
|
|
1773
1884
|
}
|
|
1774
1885
|
|
|
1775
1886
|
// src/combinators/parser.ts
|
|
1887
|
+
var RULE_ORDER = "__parsemanRuleOrder";
|
|
1776
1888
|
function tagRule(r, key) {
|
|
1777
1889
|
;
|
|
1778
1890
|
r._ruleName = key;
|
|
@@ -1817,6 +1929,11 @@ function rules(a, b) {
|
|
|
1817
1929
|
for (const key of Object.keys(definitions)) {
|
|
1818
1930
|
markUnusedValues(cache[key]);
|
|
1819
1931
|
}
|
|
1932
|
+
Object.defineProperty(cache, RULE_ORDER, {
|
|
1933
|
+
value: Object.keys(definitions),
|
|
1934
|
+
enumerable: false,
|
|
1935
|
+
configurable: true
|
|
1936
|
+
});
|
|
1820
1937
|
return cache;
|
|
1821
1938
|
}
|
|
1822
1939
|
|