parseman 0.21.0 → 0.22.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAuBA,OAAO,WAAW,MAAM,cAAc,CAAA;AAiBtC,MAAM,MAAM,uBAAuB,GAAG;IACpC,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;;;AA4MD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAA;IAC3C,kFAAkF;IAClF,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,aAAa,cAA6B,EAC1C,kBAAkB,UAAQ,GACzB,oBAAoB,GAAG,IAAI,CAynB7B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAuBA,OAAO,WAAW,MAAM,cAAc,CAAA;AAiBtC,MAAM,MAAM,uBAAuB,GAAG;IACpC,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;;;AA4MD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAA;IAC3C,kFAAkF;IAClF,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,aAAa,cAA6B,EAC1C,kBAAkB,UAAQ,GACzB,oBAAoB,GAAG,IAAI,CA0oB7B"}
@@ -1694,7 +1694,9 @@ function tagRule(r, key) {
1694
1694
  r._ruleName = key;
1695
1695
  if (r._def.tag === "node" && r._def.type === void 0) r._def.type = key;
1696
1696
  }
1697
- function rules(factory) {
1697
+ function rules(a, b) {
1698
+ const factory = typeof a === "function" ? a : b;
1699
+ const options = typeof a === "function" ? b : a;
1698
1700
  const cache = {};
1699
1701
  const proxy = new Proxy(cache, {
1700
1702
  get(target, key) {
@@ -1722,6 +1724,12 @@ function rules(factory) {
1722
1724
  cache[key] = parser2;
1723
1725
  }
1724
1726
  }
1727
+ if (options?.trivia !== void 0) {
1728
+ for (const key of Object.keys(definitions)) {
1729
+ const rule = cache[key];
1730
+ if (rule && !rule._meta.isTrivia) rule._meta.grammarTrivia = options.trivia;
1731
+ }
1732
+ }
1725
1733
  for (const key of Object.keys(definitions)) {
1726
1734
  markUnusedValues(cache[key]);
1727
1735
  }
@@ -5316,6 +5324,7 @@ function ruleDependencies(ruleMap) {
5316
5324
  }
5317
5325
  function compile(combinator, mapFnSources) {
5318
5326
  markUnusedValues(combinator);
5327
+ const grammarTrivia = combinator._meta.grammarTrivia;
5319
5328
  const ctx = {
5320
5329
  vars: 0,
5321
5330
  indent: 1,
@@ -5334,7 +5343,8 @@ function compile(combinator, mapFnSources) {
5334
5343
  triviaFnNames: /* @__PURE__ */ new Map(),
5335
5344
  namedFnDecls: [],
5336
5345
  capturing: hasNodeDef(combinator),
5337
- lazyUsage: analyzeLazyUsage(combinator)
5346
+ lazyUsage: analyzeLazyUsage(combinator),
5347
+ ...grammarTrivia ? { activeTrivia: grammarTrivia, triviaKindLabels: grammarTrivia._meta.triviaKindLabels } : {}
5338
5348
  };
5339
5349
  const r = emit(combinator, ctx, "_pos");
5340
5350
  const namedPrelude = ctx.namedFnDecls.length > 0 ? [...namedFnPrelude(), ""] : [];
@@ -5410,8 +5420,9 @@ function publicRuleWrapperSource(rule, fnSource) {
5410
5420
  if (labels === void 0) return fnSource;
5411
5421
  return `Object.assign(${fnSource}, { _meta: { triviaKindLabels: ${JSON.stringify(labels)} } })`;
5412
5422
  }
5413
- function compileRuleMap(ruleMap) {
5423
+ function compileRuleMap(ruleMap, opts) {
5414
5424
  for (const [, rule] of ruleMap) markUnusedValues(rule);
5425
+ const grammarTrivia = opts?.trivia;
5415
5426
  const ctx = {
5416
5427
  vars: 0,
5417
5428
  indent: 1,
@@ -5430,7 +5441,8 @@ function compileRuleMap(ruleMap) {
5430
5441
  triviaFnNames: /* @__PURE__ */ new Map(),
5431
5442
  namedFnDecls: [],
5432
5443
  capturing: ruleMap.some(([, rule]) => hasNodeDef(rule)),
5433
- lazyUsage: analyzeLazyUsageMulti(ruleMap.map(([, rule]) => rule))
5444
+ lazyUsage: analyzeLazyUsageMulti(ruleMap.map(([, rule]) => rule)),
5445
+ ...grammarTrivia ? { activeTrivia: grammarTrivia, triviaKindLabels: grammarTrivia._meta.triviaKindLabels } : {}
5434
5446
  };
5435
5447
  const seenNames = /* @__PURE__ */ new Map();
5436
5448
  const ruleNames = /* @__PURE__ */ new Map();
@@ -5442,7 +5454,13 @@ function compileRuleMap(ruleMap) {
5442
5454
  ruleNames.set(rule, n === 0 ? base : `${base}$${n}`);
5443
5455
  }
5444
5456
  ctx.ruleNames = ruleNames;
5445
- const perEntry = ruleMap.map(([key, rule]) => ({ key, rule, r: emit(rule, ctx, "_pos") }));
5457
+ const perEntry = ruleMap.map(([key, rule]) => {
5458
+ const savedTrivia = ctx.activeTrivia;
5459
+ if (rule._meta.isTrivia) ctx.activeTrivia = void 0;
5460
+ const r = emit(rule, ctx, "_pos");
5461
+ ctx.activeTrivia = savedTrivia;
5462
+ return { key, rule, r };
5463
+ });
5446
5464
  const derivedSrcs = ctx.mapFnSrcs.length === ctx.mapFns.length && ctx.mapFnSrcs.every((s) => s !== null) ? ctx.mapFnSrcs : void 0;
5447
5465
  const buildCovered = ctx.buildFns.length === 0 || ctx.buildSrcs.every((s) => s !== null);
5448
5466
  const buildSources = ctx.buildFns.length === 0 ? void 0 : ctx.buildSrcs;
@@ -6821,7 +6839,10 @@ function transformMacro(code, id, moduleAliases = /* @__PURE__ */ new Set([PARSE
6821
6839
  };
6822
6840
  const compileRulesFactory = (init, label2) => {
6823
6841
  const args = init.arguments;
6824
- const factoryArg = args[0];
6842
+ const arg0 = args[0];
6843
+ const arg1 = args[1];
6844
+ const optionsFirst = arg0?.type === "ObjectExpression";
6845
+ const factoryArg = optionsFirst ? arg1 : arg0;
6825
6846
  if (!factoryArg) {
6826
6847
  warn(init.start, `${label2}: rules() needs a factory argument`);
6827
6848
  return null;
@@ -6831,7 +6852,12 @@ function transformMacro(code, id, moduleAliases = /* @__PURE__ */ new Set([PARSE
6831
6852
  warn(init.start, `${label2}: rules(...) factory isn't statically evaluable`);
6832
6853
  return null;
6833
6854
  }
6834
- const compiled = compileRuleMap([...ruleMap]);
6855
+ const optionsArg = optionsFirst ? arg0 : arg1;
6856
+ const triviaValue = optionsArg?.type === "ObjectExpression" ? (optionsArg.properties ?? []).find(
6857
+ (p) => p.key?.name === "trivia"
6858
+ )?.value : void 0;
6859
+ const gTrivia = triviaValue ? evaluateExpr(triviaValue, scope, code, []) : void 0;
6860
+ const compiled = compileRuleMap([...ruleMap], gTrivia ? { trivia: gTrivia } : void 0);
6835
6861
  if (!compiled) {
6836
6862
  warn(init.start, `${label2}: rule map couldn't be inlined`);
6837
6863
  return null;