roll-parser 3.2.1 → 3.3.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/CHANGELOG.md CHANGED
@@ -7,6 +7,50 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [3.3.0] - 2026-08-17
11
+
12
+ Error-message work throughout: nine parse and lex errors now name the rule they
13
+ enforce, or the token actually at fault, instead of reporting parser jargon.
14
+ Every error code is unchanged and no notation evaluates differently — nothing
15
+ that parsed before now throws, and nothing that threw before now parses. Code
16
+ that matches on `code` is unaffected; code that matches on `message` is not.
17
+
18
+ ### Added
19
+
20
+ - An expression that ends where an operand was required now names what it still owed, instead of reporting a bare unexpected end. `1d` reports `Expected a side count after 'd'`, `1d20 vs` reports `Expected a difficulty class after 'vs'`, `2d6r<` reports `Expected a value after '<'`, and a truncated `2d6>=4f` names the `f` rather than the comparison behind it. The code stays `UNEXPECTED_END`, the position still points past the last token, and empty input still reports `Empty notation` at position 0 ([#327](https://github.com/edloidas/roll-parser/issues/327))
21
+
22
+ ### Changed
23
+
24
+ - Demo site: the five failure tints derive from `--failure` through `color-mix` instead of hard-coded `rgba()` literals, so they follow the token in both themes rather than painting the pre-`#322` dark red under the light palette ([#324](https://github.com/edloidas/roll-parser/issues/324))
25
+
26
+ ### Fixed
27
+
28
+ - The hint for an identifier that merged two modifiers no longer suggests notation that does not parse. It is gated on both halves being separable modifiers — `flor` and `kx` merely start with one, so every split of them still failed — and the separator is picked by whether the first half takes a count, so the count-less `s`, `sa`, `sd`, `cs` and `cf` split on a space instead of `1`. `4d6khs` now suggests `kh1s`; a round-trip test asserts every hint the lexer emits parses ([#326](https://github.com/edloidas/roll-parser/issues/326))
29
+ - `2d6constructor` reports `Unexpected identifier: 'constructor'` instead of lexing into a token typed with a function. The keyword and separator tables were plain objects, so `constructor` resolved to `Object`'s own; both now have a null prototype ([#326](https://github.com/edloidas/roll-parser/issues/326))
30
+ - `Cannot apply modifier after success counting` is replaced by `Success counting is terminal: it cannot be part of a larger expression`, which holds for all three shapes that reach the rejection — a trailing modifier, arithmetic (`5d6>=5+3`), and meta-operand reuse (`4d(1d6>=3)`). The wording matches the **Pools and checks** callout in `README.md`, which carries the worked rewrites ([#326](https://github.com/edloidas/roll-parser/issues/326))
31
+ - `UNEXPECTED_CHARACTER` appends the code point when the rejected character is not printable ASCII, so a pasted no-break space, zero-width space or BOM reads as `Unexpected character (U+00A0): ' '` rather than an empty pair of quotes. Printable ASCII stays unadorned ([#326](https://github.com/edloidas/roll-parser/issues/326))
32
+ - `Empty @ variable name` is replaced by `@ variable name must start with a letter or '_'`, which was the rule all along — one check rejects a missing name and a wrongly-started one alike, so `@1` and `@力` were being called empty ([#326](https://github.com/edloidas/roll-parser/issues/326))
33
+ - `()` reports `Empty parentheses` at the opener instead of `Unexpected token ')'` at the closer, the way `{}` already did — `parseGrouped` was missing the check `parseGroup` had ([#326](https://github.com/edloidas/roll-parser/issues/326))
34
+ - A count after a modifier that takes none — `2d6s1`, `2d6cs1`, `2d6cf1`, `2d6!0` — reports `This modifier takes no count` instead of `Unexpected infix token '1'`. The digit is not the surprise, the modifier it follows is, and "infix token" is parser jargon. The check resolves down the right spine of binary, unary and versus nodes, so `1+2d6s1` is caught too, and it stops at any closer, so `2d(2d6s)1` keeps the generic wording — the stray token there follows the group, not the modifier inside it. Two juxtaposed values (`2d6 3`) and a modifier that already took a comparison (`2d6cs>5 3`) also keep the generic wording, since those are different mistakes ([#326](https://github.com/edloidas/roll-parser/issues/326), [#327](https://github.com/edloidas/roll-parser/issues/327))
35
+ - `vs` with nothing on its left reports `Versus needs a roll on its left` instead of `Unexpected token 'vs'` ([#326](https://github.com/edloidas/roll-parser/issues/326))
36
+ - Demo site: the palette meets WCAG AA. `--text-dim` and `--failure` were retuned in the dark palette, and `--text-dim`, `--accent`, `--accent-soft`, `--success` and `--failure` in both light blocks, each held on its own hue and measured against `--surface-strong`; the light `--gold-gradient` stops shifted by the same lightness delta as `--accent`, lifting the hero total's leading stop from 2.81 to 3.47 ([#322](https://github.com/edloidas/roll-parser/issues/322))
37
+ - Demo site: `site/404.html` no longer carries a stale `--accent`. Its inline light palette kept the pre-`#322` `#a06b1f` while `style.css` moved on, leaving the `code` span and the link hover/focus colour at 3.88 against the page gradient; `#855512` lifts them to 5.42 ([#322](https://github.com/edloidas/roll-parser/issues/322))
38
+ - Demo site: `--border` meets SC 1.4.11's 3:1 non-text bar on every fill it lands on — 3.37 dark and 3.30 light at the tightest adjacency, up from 1.47 and 1.33 against `--bg`. `.widget:hover` moved from `--accent-soft` to `--accent`, since the soft tint now composites fainter than the resting border and hover read as a de-emphasis ([#323](https://github.com/edloidas/roll-parser/issues/323))
39
+
40
+ ### Documentation
41
+
42
+ - The README bundle-size figures match the current emit: `≈13.2 kB` for the full library and `≈6.1 kB` for `{ parse }` ([#326](https://github.com/edloidas/roll-parser/issues/326), [#327](https://github.com/edloidas/roll-parser/issues/327))
43
+
44
+ ## [3.2.2] - 2026-08-14
45
+
46
+ ### Changed
47
+
48
+ - A failure threshold with no success count to attach to now says so instead of reporting a bare `Unexpected infix token 'f'`. The input that provokes it reads like World of Darkness notation — `3d6!>4f1`, `10d10!>=6f1` — but an explode takes the comparison that follows it as its own trigger, leaving the `f` clause with nothing to modify. The code stays `UNEXPECTED_TOKEN`, and the position still points at the `f` ([#320](https://github.com/edloidas/roll-parser/issues/320))
49
+
50
+ ### Documentation
51
+
52
+ - `README.md` gains an "An explode claims the comparison that follows it" gotcha under Arithmetic and precedence, with both rewrites: `(3d6!)>4f1` to count the exploded pool, or `3d6!>4>=5f1` to keep an explode trigger and a success threshold ([#320](https://github.com/edloidas/roll-parser/issues/320))
53
+
10
54
  ## [3.2.1] - 2026-08-10
11
55
 
12
56
  ### Changed
@@ -251,7 +295,9 @@ Dice mechanics (Stage 2):
251
295
  - Dice count safety limit via `maxDice` option (default 10,000), enforced across the whole expression to prevent DoS via additive groups like `5000d6+5000d6` ([#19](https://github.com/edloidas/roll-parser/issues/19))
252
296
  - Parser and evaluator correctness: duplicate `kept` modifier entries, implicit modifier count defaulting to 1 (`4d6kh` → `4d6kh1`), `critical` flag suppression when `sides === 1`, negative `--seed` CLI values ([#21](https://github.com/edloidas/roll-parser/issues/21))
253
297
 
254
- [Unreleased]: https://github.com/edloidas/roll-parser/compare/v3.2.1...HEAD
298
+ [Unreleased]: https://github.com/edloidas/roll-parser/compare/v3.3.0...HEAD
299
+ [3.3.0]: https://github.com/edloidas/roll-parser/releases/tag/v3.3.0
300
+ [3.2.2]: https://github.com/edloidas/roll-parser/releases/tag/v3.2.2
255
301
  [3.2.1]: https://github.com/edloidas/roll-parser/releases/tag/v3.2.1
256
302
  [3.2.0]: https://github.com/edloidas/roll-parser/releases/tag/v3.2.0
257
303
  [3.1.0]: https://github.com/edloidas/roll-parser/releases/tag/v3.1.0
package/README.md CHANGED
@@ -68,7 +68,7 @@ roll('4d6kh3', { rng: createMockRng([3, 6, 2, 5]) }).total; // 14, every run
68
68
  - **Safe on untrusted input.** Dice count, explosion depth, reroll depth, and
69
69
  parse depth are all bounded, and every failure is a typed error with a stable
70
70
  code and a source span.
71
- - **Small and fast.** ≈12.8 kB brotli for the whole library, ≈5.7 kB for just
71
+ - **Small and fast.** ≈13.2 kB brotli for the whole library, ≈6.1 kB for just
72
72
  `parse`, ≈1.4 kB for `roll-parser/render`, ≈213 B for the testing entry
73
73
  point. Zero runtime dependencies, zero
74
74
  `node:` imports. A `1d20` round trip takes about 0.5 µs.
@@ -1147,6 +1147,11 @@ total — and the evaluator only flat-sorts.
1147
1147
  parenthesize for a computed threshold, `1d6!>=(5+2)`. Success counts bind the
1148
1148
  same way but are terminal, so `1d6>=5+2` errors outright — write
1149
1149
  `1d6>=(5+2)`, or `{1d6>=5}+2` to add to the count itself.
1150
+ - **An explode claims the comparison that follows it.** `3d6!>4` explodes on
1151
+ 5 and 6; it is not a success count, so there is nothing for an `f` clause to
1152
+ attach to and `3d6!>4f1` throws `UNEXPECTED_TOKEN`. Parenthesize the explode
1153
+ to count its pool, `(3d6!)>4f1`, or give the count its own threshold,
1154
+ `3d6!>4>=5f1`.
1150
1155
  - **Division does not floor.** `7/2` totals `3.5`, not `3` — arithmetic is plain
1151
1156
  IEEE-754 throughout. Wrap it when you need an integer: `floor(7/2)` totals `3`.
1152
1157
  Operands that must be whole numbers — dice count, dice sides, keep/drop count —
@@ -39,6 +39,9 @@ export declare class LexerError extends RollParserError {
39
39
  * The offending text — a single character for `UNEXPECTED_CHARACTER` (the
40
40
  * whole code point, so astral symbols are not split into surrogates), or
41
41
  * the unrecognized word for `UNEXPECTED_IDENTIFIER`.
42
+ *
43
+ * Not guaranteed to appear in `message` — errors that name a rule rather than
44
+ * a character leave it out.
42
45
  */
43
46
  readonly character: string;
44
47
  constructor(message: string, code: RollParserErrorCode, position: number, character: string, options?: ErrorOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../src/lexer/lexer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAiB,eAAe,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,aAAa,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,UAAW,SAAQ,eAAe;IAC7C,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,YACE,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,mBAAmB,EACzB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,YAAY,EAMvB;CACF;AA0DD;;;;;GAKG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,YAAY,KAAK,EAAE,MAAM,EAExB;IAED;;OAEG;IACH,QAAQ,IAAI,KAAK,EAAE,CAUlB;IAED;;OAEG;IACH,SAAS,IAAI,KAAK,CA8EjB;IAMD,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,UAAU;IAiBlB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,cAAc;IAkCtB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,MAAM;IA+Bd,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,aAAa;CAGtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,CAU1C"}
1
+ {"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../src/lexer/lexer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAiB,eAAe,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,aAAa,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,UAAW,SAAQ,eAAe;IAC7C,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,YACE,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,mBAAmB,EACzB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,YAAY,EAMvB;CACF;AAsGD;;;;;GAKG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,YAAY,KAAK,EAAE,MAAM,EAExB;IAED;;OAEG;IACH,QAAQ,IAAI,KAAK,EAAE,CAUlB;IAED;;OAEG;IACH,SAAS,IAAI,KAAK,CAmFjB;IAMD,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,UAAU;IAiBlB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,cAAc;IAkCtB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,MAAM;IAuCd,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,aAAa;CAGtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,CAU1C"}
@@ -4,7 +4,7 @@ export class LexerError extends RollParserError {
4
4
  position;
5
5
  character;
6
6
  constructor(message, code, position, character, options) {
7
- super(`${message}: '${character}'`, code, options);
7
+ super(message, code, options);
8
8
  this.name = 'LexerError';
9
9
  this.position = position;
10
10
  this.character = character;
@@ -16,7 +16,7 @@ const CHAR_UPPER_A = 65;
16
16
  const CHAR_UPPER_Z = 90;
17
17
  const CHAR_LOWER_A = 97;
18
18
  const CHAR_LOWER_Z = 122;
19
- const IDENTIFIER_KEYWORDS = {
19
+ const IDENTIFIER_KEYWORDS = Object.assign(Object.create(null), {
20
20
  kh: TokenType.KEEP_HIGH,
21
21
  kl: TokenType.KEEP_LOW,
22
22
  k: TokenType.KEEP_HIGH,
@@ -40,14 +40,36 @@ const IDENTIFIER_KEYWORDS = {
40
40
  sd: TokenType.SORT_DESC,
41
41
  cs: TokenType.CRIT_SUCCESS,
42
42
  cf: TokenType.CRIT_FAIL,
43
- };
43
+ });
44
+ const MODIFIER_SEPARATORS = Object.assign(Object.create(null), {
45
+ kh: '1',
46
+ kl: '1',
47
+ k: '1',
48
+ dh: '1',
49
+ dl: '1',
50
+ min: '1',
51
+ max: '1',
52
+ s: ' ',
53
+ sa: ' ',
54
+ sd: ' ',
55
+ cs: ' ',
56
+ cf: ' ',
57
+ });
58
+ function nameCodePoint(codePoint) {
59
+ if (codePoint == null || (codePoint > 0x20 && codePoint < 0x7f))
60
+ return '';
61
+ return ` (U+${codePoint.toString(16).toUpperCase().padStart(4, '0')})`;
62
+ }
44
63
  function buildIdentifierHint(identifier) {
45
64
  for (let length = identifier.length - 1; length >= 1; length--) {
46
65
  const prefix = identifier.slice(0, length);
47
- if (IDENTIFIER_KEYWORDS[prefix] == null)
66
+ const separator = MODIFIER_SEPARATORS[prefix];
67
+ if (separator == null)
48
68
  continue;
49
69
  const rest = identifier.slice(length);
50
- return ` (did you mean '${prefix}' followed by '${rest}'? separate modifiers with a count or space, e.g. '${prefix}1${rest}')`;
70
+ if (MODIFIER_SEPARATORS[rest] == null)
71
+ continue;
72
+ return ` (did you mean '${prefix}' followed by '${rest}'? write it as '${prefix}${separator}${rest}')`;
51
73
  }
52
74
  return '';
53
75
  }
@@ -133,7 +155,7 @@ export class Lexer {
133
155
  default: {
134
156
  const codePoint = this.input.codePointAt(startPos);
135
157
  const display = codePoint == null ? char : String.fromCodePoint(codePoint);
136
- throw new LexerError('Unexpected character', 'UNEXPECTED_CHARACTER', startPos, display);
158
+ throw new LexerError(`Unexpected character${nameCodePoint(codePoint)}: '${display}'`, 'UNEXPECTED_CHARACTER', startPos, display);
137
159
  }
138
160
  }
139
161
  }
@@ -175,7 +197,7 @@ export class Lexer {
175
197
  if (tokenType != null) {
176
198
  return this.createTokenAt(tokenType, lower, startPos);
177
199
  }
178
- throw new LexerError(`Unexpected identifier${buildIdentifierHint(lower)}`, 'UNEXPECTED_IDENTIFIER', startPos, lower);
200
+ throw new LexerError(`Unexpected identifier${buildIdentifierHint(lower)}: '${lower}'`, 'UNEXPECTED_IDENTIFIER', startPos, lower);
179
201
  }
180
202
  scanAt() {
181
203
  const startPos = this.pos;
@@ -196,7 +218,7 @@ export class Lexer {
196
218
  else {
197
219
  const nameStart = this.pos;
198
220
  if (this.isAtEnd() || !this.isIdentifierStart(this.peek())) {
199
- throw new LexerError('Empty @ variable name', 'UNEXPECTED_CHARACTER', startPos, '@');
221
+ throw new LexerError(`@ variable name must start with a letter or '_'`, 'UNEXPECTED_CHARACTER', startPos, '@');
200
222
  }
201
223
  this.advance();
202
224
  while (!this.isAtEnd() && this.isIdentifierPart(this.peek())) {
@@ -1 +1 @@
1
- {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../src/lexer/lexer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../src/lexer/lexer.ts"],"names":[],"mappings":"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"}
@@ -84,6 +84,10 @@ export declare class Parser {
84
84
  parse(): ASTNode;
85
85
  /**
86
86
  * Parse an expression with minimum binding power.
87
+ *
88
+ * `pending` is the token that demanded this operand — the `d` of `1d`, the
89
+ * `<` of `2d6r<`. It exists so a truncated notation can name what it was
90
+ * waiting for; `undefined` only at the top of the input.
87
91
  */
88
92
  private parseExpression;
89
93
  /**
@@ -169,8 +173,26 @@ export declare class Parser {
169
173
  private parseSort;
170
174
  private parseCritThreshold;
171
175
  private parseSuccessCount;
172
- /** Parses the `f...` suffix of a success count. Bare `fN` means `f=N`. */
176
+ /**
177
+ * Parses the `f...` suffix of a success count. Bare `fN` means `f=N`.
178
+ *
179
+ * `token` is the success-count comparison, which the reject calls report
180
+ * against; `failToken` is the `f`, so a truncated `2d6>=4f` names it rather
181
+ * than the comparison behind it.
182
+ */
173
183
  private parseFailThreshold;
184
+ /**
185
+ * Rejects an `f` that reached LED position, which means no success count is
186
+ * there to own it — `parseSuccessCount` consumes its own `f`, so this is the
187
+ * only way the token surfaces.
188
+ *
189
+ * The trigger clause names the cause of nearly every orphan: an explode's
190
+ * comparison is optional, so `3d6!>4f1` reads as a success count with a botch
191
+ * threshold when `!` has already spent the `>4`. Naming it unconditionally
192
+ * keeps this off the `index.js` byte budget; **README.md → Arithmetic and
193
+ * precedence** carries the two rewrites.
194
+ */
195
+ private static throwOrphanFailThreshold;
174
196
  private parseVersus;
175
197
  /**
176
198
  * Checks whether the next token is a comparison operator.
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,35 @@ const TOKEN_DISPLAY = {
36
36
  [TokenType.RBRACE]: `'}'`,
37
37
  [TokenType.COMMA]: `','`,
38
38
  };
39
+ function isBareCritThreshold(node) {
40
+ const isDefault = (threshold) => threshold === 'default';
41
+ return node.successThresholds.every(isDefault) && node.failThresholds.every(isDefault);
42
+ }
43
+ function rightmostNode(node) {
44
+ let current = node;
45
+ for (;;) {
46
+ switch (current.type) {
47
+ case 'BinaryOp':
48
+ current = current.right;
49
+ break;
50
+ case 'UnaryOp':
51
+ current = current.operand;
52
+ break;
53
+ case 'Versus':
54
+ current = current.dc;
55
+ break;
56
+ default:
57
+ return current;
58
+ }
59
+ }
60
+ }
61
+ function expectedOperand(token) {
62
+ if (token.type === TokenType.DICE)
63
+ return 'a side count';
64
+ if (token.type === TokenType.VS)
65
+ return 'a difficulty class';
66
+ return 'a value';
67
+ }
39
68
  const FUNCTION_ARITY = {
40
69
  floor: { min: 1, max: 1 },
41
70
  ceil: { min: 1, max: 1 },
@@ -66,22 +95,19 @@ export class Parser {
66
95
  this.tokens = tokens;
67
96
  }
68
97
  parse() {
69
- if (this.peek().type === TokenType.EOF) {
70
- throw new ParseError('Unexpected end of input', 'UNEXPECTED_END', this.peek().position);
71
- }
72
- const ast = this.parseExpression(0);
98
+ const ast = this.parseExpression(0, undefined);
73
99
  if (this.peek().type !== TokenType.EOF) {
74
100
  const token = this.peek();
75
101
  throw new ParseError(`Unexpected token '${token.value}'`, 'UNEXPECTED_TOKEN', token.position, token);
76
102
  }
77
103
  return ast;
78
104
  }
79
- parseExpression(minBp) {
105
+ parseExpression(minBp, pending) {
80
106
  const entryDepth = this.depth;
81
107
  this.depth += 1;
82
108
  this.guardDepth();
83
109
  try {
84
- let left = this.parseNud();
110
+ let left = this.parseNud(pending);
85
111
  while (this.hasTokens()) {
86
112
  const token = this.peek();
87
113
  const leftBp = this.getLeftBp(token);
@@ -103,7 +129,7 @@ export class Parser {
103
129
  throw new ParseError(`Expression nesting exceeds the maximum depth of ${MAX_PARSE_DEPTH}`, 'MAX_DEPTH_EXCEEDED', this.peek().position, this.peek());
104
130
  }
105
131
  }
106
- parseNud() {
132
+ parseNud(pending) {
107
133
  const token = this.advance();
108
134
  switch (token.type) {
109
135
  case TokenType.NUMBER:
@@ -125,7 +151,11 @@ export class Parser {
125
151
  case TokenType.AT:
126
152
  return this.parseVariable(token);
127
153
  case TokenType.EOF:
128
- throw new ParseError('Unexpected end of input', 'UNEXPECTED_END', token.position);
154
+ throw new ParseError(pending == null
155
+ ? 'Empty notation'
156
+ : `Expected ${expectedOperand(pending)} after '${pending.value}'`, 'UNEXPECTED_END', token.position);
157
+ case TokenType.VS:
158
+ throw new ParseError('Versus needs a roll on its left', 'UNEXPECTED_TOKEN', token.position, token);
129
159
  default:
130
160
  throw new ParseError(`Unexpected token '${token.value}'`, 'UNEXPECTED_TOKEN', token.position, token);
131
161
  }
@@ -173,8 +203,18 @@ export class Parser {
173
203
  return this.parseSuccessCount(left, token);
174
204
  case TokenType.VS:
175
205
  return this.parseVersus(left, token);
176
- default:
206
+ case TokenType.FAIL:
207
+ return Parser.throwOrphanFailThreshold(token);
208
+ default: {
209
+ const trailing = rightmostNode(left);
210
+ if (token.type === TokenType.NUMBER &&
211
+ (trailing.type === 'Sort' ||
212
+ (trailing.type === 'Explode' && trailing.threshold == null) ||
213
+ (trailing.type === 'CritThreshold' && isBareCritThreshold(trailing)))) {
214
+ throw new ParseError('This modifier takes no count', 'UNEXPECTED_TOKEN', token.position, token);
215
+ }
177
216
  throw new ParseError(`Unexpected infix token '${token.value}'`, 'UNEXPECTED_TOKEN', token.position, token);
217
+ }
178
218
  }
179
219
  }
180
220
  static syntheticLiteral(value, token) {
@@ -189,7 +229,7 @@ export class Parser {
189
229
  };
190
230
  }
191
231
  parseUnaryMinus(token) {
192
- const operand = this.parseExpression(BP.UNARY);
232
+ const operand = this.parseExpression(BP.UNARY, token);
193
233
  this.rejectSuccessCountTarget(operand, token);
194
234
  return {
195
235
  type: 'UnaryOp',
@@ -200,7 +240,7 @@ export class Parser {
200
240
  };
201
241
  }
202
242
  parsePrefixDice(token) {
203
- const sides = this.parseExpression(BP.DICE_RIGHT);
243
+ const sides = this.parseExpression(BP.DICE_RIGHT, token);
204
244
  this.rejectSuccessCountTarget(sides, token);
205
245
  this.rejectVersusMetaOperand(sides, token);
206
246
  return {
@@ -215,7 +255,7 @@ export class Parser {
215
255
  this.rejectSuccessCountTarget(left, token);
216
256
  this.rejectVersusMetaOperand(left, token);
217
257
  this.rejectBareDiceChain(left, token);
218
- const sides = this.parseExpression(BP.DICE_RIGHT);
258
+ const sides = this.parseExpression(BP.DICE_RIGHT, token);
219
259
  this.rejectSuccessCountTarget(sides, token);
220
260
  this.rejectVersusMetaOperand(sides, token);
221
261
  return {
@@ -267,7 +307,10 @@ export class Parser {
267
307
  };
268
308
  }
269
309
  parseGrouped(token) {
270
- const expression = this.parseExpression(0);
310
+ if (this.peek().type === TokenType.RPAREN) {
311
+ throw new ParseError('Empty parentheses', 'UNEXPECTED_TOKEN', token.position, token);
312
+ }
313
+ const expression = this.parseExpression(0, token);
271
314
  const close = this.expect(TokenType.RPAREN);
272
315
  return { type: 'Grouped', expression, start: token.position, end: close.end };
273
316
  }
@@ -275,10 +318,10 @@ export class Parser {
275
318
  if (this.peek().type === TokenType.RBRACE) {
276
319
  throw new ParseError('Empty group', 'UNEXPECTED_TOKEN', startToken.position, startToken);
277
320
  }
278
- const expressions = [this.parseExpression(0)];
321
+ const expressions = [this.parseExpression(0, startToken)];
279
322
  while (this.peek().type === TokenType.COMMA) {
280
- this.advance();
281
- expressions.push(this.parseExpression(0));
323
+ const comma = this.advance();
324
+ expressions.push(this.parseExpression(0, comma));
282
325
  }
283
326
  if (this.peek().type !== TokenType.RBRACE) {
284
327
  const unterminated = this.peek();
@@ -291,15 +334,15 @@ export class Parser {
291
334
  return { type: 'Variable', name: token.value, start: token.position, end: token.end };
292
335
  }
293
336
  parseFunctionCall(token) {
294
- this.expect(TokenType.LPAREN);
337
+ const open = this.expect(TokenType.LPAREN);
295
338
  const args = [];
296
339
  if (this.peek().type !== TokenType.RPAREN) {
297
- const first = this.parseExpression(0);
340
+ const first = this.parseExpression(0, open);
298
341
  this.rejectSuccessCountTarget(first, token);
299
342
  args.push(first);
300
343
  while (this.peek().type === TokenType.COMMA) {
301
- this.advance();
302
- const next = this.parseExpression(0);
344
+ const comma = this.advance();
345
+ const next = this.parseExpression(0, comma);
303
346
  this.rejectSuccessCountTarget(next, token);
304
347
  args.push(next);
305
348
  }
@@ -325,7 +368,7 @@ export class Parser {
325
368
  this.rejectSuccessCountTarget(left, token);
326
369
  const operator = this.getOperatorSymbol(token);
327
370
  const rightBp = this.getRightBp(token);
328
- const right = this.parseExpression(rightBp);
371
+ const right = this.parseExpression(rightBp, token);
329
372
  this.rejectSuccessCountTarget(right, token);
330
373
  return {
331
374
  type: 'BinaryOp',
@@ -354,7 +397,7 @@ export class Parser {
354
397
  rejectSuccessCountTarget(target, token) {
355
398
  const node = unwrapGrouped(target);
356
399
  if (isSuccessCount(node)) {
357
- throw new ParseError(`Cannot apply modifier after success counting`, 'INVALID_SUCCESS_COUNT_TARGET', token.position, token);
400
+ throw new ParseError(`Success counting is terminal: it cannot be part of a larger expression`, 'INVALID_SUCCESS_COUNT_TARGET', token.position, token);
358
401
  }
359
402
  }
360
403
  rejectGroupTarget(target, token, action, code, singleSubRollPasses = false) {
@@ -422,7 +465,7 @@ export class Parser {
422
465
  nextToken === TokenType.LPAREN ||
423
466
  nextToken === TokenType.AT;
424
467
  const count = hasExplicitCount
425
- ? this.parseExpression(BP.DICE_LEFT)
468
+ ? this.parseExpression(BP.DICE_LEFT, token)
426
469
  : Parser.syntheticLiteral(1, token);
427
470
  this.rejectSuccessCountTarget(count, token);
428
471
  this.rejectVersusMetaOperand(count, token);
@@ -500,7 +543,7 @@ export class Parser {
500
543
  if (!hasExplicitValue) {
501
544
  throw new ParseError(`Expected value after '${token.value}'`, 'EXPECTED_TOKEN', token.position, token);
502
545
  }
503
- const value = this.parseExpression(BP.DICE_LEFT);
546
+ const value = this.parseExpression(BP.DICE_LEFT, token);
504
547
  this.rejectSuccessCountTarget(value, token);
505
548
  this.rejectVersusMetaOperand(value, token);
506
549
  return {
@@ -581,7 +624,7 @@ export class Parser {
581
624
  throw new ParseError(`Success counting requires a target whose dice can be counted one face at a time`, 'INVALID_SUCCESS_COUNT_TARGET', token.position, token);
582
625
  }
583
626
  const operator = this.getCompareOp(token);
584
- const value = this.parseExpression(BP.DICE_LEFT);
627
+ const value = this.parseExpression(BP.DICE_LEFT, token);
585
628
  this.rejectSuccessCountTarget(value, token);
586
629
  this.rejectVersusMetaOperand(value, token);
587
630
  const start = target.start ?? token.position;
@@ -589,8 +632,8 @@ export class Parser {
589
632
  if (this.peek().type !== TokenType.FAIL) {
590
633
  return { type: 'SuccessCount', target, threshold: { operator, value }, start, end };
591
634
  }
592
- this.advance();
593
- const failThreshold = this.parseFailThreshold(token);
635
+ const failToken = this.advance();
636
+ const failThreshold = this.parseFailThreshold(token, failToken);
594
637
  return {
595
638
  type: 'SuccessCount',
596
639
  target,
@@ -600,14 +643,17 @@ export class Parser {
600
643
  end: failThreshold.value.end ?? end,
601
644
  };
602
645
  }
603
- parseFailThreshold(token) {
646
+ parseFailThreshold(token, failToken) {
604
647
  if (this.isComparePointAhead())
605
648
  return this.parseComparePoint();
606
- const failValue = this.parseExpression(BP.DICE_LEFT);
649
+ const failValue = this.parseExpression(BP.DICE_LEFT, failToken);
607
650
  this.rejectSuccessCountTarget(failValue, token);
608
651
  this.rejectVersusMetaOperand(failValue, token);
609
652
  return { operator: '=', value: failValue };
610
653
  }
654
+ static throwOrphanFailThreshold(token) {
655
+ throw new ParseError(`Fail threshold requires a success count; an explode's comparison is its trigger`, 'UNEXPECTED_TOKEN', token.position, token);
656
+ }
611
657
  parseVersus(left, token) {
612
658
  this.rejectSuccessCountTarget(left, token);
613
659
  let leftChain = left;
@@ -617,7 +663,7 @@ export class Parser {
617
663
  if (leftChain.type === 'Versus') {
618
664
  throw new ParseError('Cannot chain versus operators', 'NESTED_VERSUS', token.position, token);
619
665
  }
620
- const dc = this.parseExpression(BP.VS_RIGHT);
666
+ const dc = this.parseExpression(BP.VS_RIGHT, token);
621
667
  this.rejectSuccessCountTarget(dc, token);
622
668
  return {
623
669
  type: 'Versus',
@@ -639,7 +685,7 @@ export class Parser {
639
685
  const token = this.peek();
640
686
  const operator = this.getCompareOp(token);
641
687
  this.advance();
642
- const value = this.parseExpression(BP.DICE_LEFT);
688
+ const value = this.parseExpression(BP.DICE_LEFT, token);
643
689
  this.rejectSuccessCountTarget(value, token);
644
690
  this.rejectVersusMetaOperand(value, token);
645
691
  return { operator, value };
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const version = "3.2.1";
1
+ export declare const version = "3.3.0";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '3.2.1';
1
+ export const version = '3.3.0';
2
2
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "roll-parser",
3
- "version": "3.2.1",
3
+ "version": "3.3.0",
4
4
  "description": "High-performance dice notation parser for tabletop RPGs. TypeScript-first, runs on Node, Bun, and browsers with zero dependencies.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -102,19 +102,19 @@
102
102
  {
103
103
  "name": "index.js (full library)",
104
104
  "path": "dist/index.js",
105
- "limit": "12.85 kB"
105
+ "limit": "13.5 kB"
106
106
  },
107
107
  {
108
108
  "name": "index.js — { parse }",
109
109
  "path": "dist/index.js",
110
110
  "import": "{ parse }",
111
- "limit": "6 kB"
111
+ "limit": "6.25 kB"
112
112
  },
113
113
  {
114
114
  "name": "index.js — { roll }",
115
115
  "path": "dist/index.js",
116
116
  "import": "{ roll }",
117
- "limit": "12.75 kB"
117
+ "limit": "13 kB"
118
118
  },
119
119
  {
120
120
  "name": "render.js — { renderBreakdown }",
@@ -41,6 +41,9 @@ export class LexerError extends RollParserError {
41
41
  * The offending text — a single character for `UNEXPECTED_CHARACTER` (the
42
42
  * whole code point, so astral symbols are not split into surrogates), or
43
43
  * the unrecognized word for `UNEXPECTED_IDENTIFIER`.
44
+ *
45
+ * Not guaranteed to appear in `message` — errors that name a rule rather than
46
+ * a character leave it out.
44
47
  */
45
48
  readonly character: string;
46
49
 
@@ -51,7 +54,7 @@ export class LexerError extends RollParserError {
51
54
  character: string,
52
55
  options?: ErrorOptions,
53
56
  ) {
54
- super(`${message}: '${character}'`, code, options);
57
+ super(message, code, options);
55
58
  this.name = 'LexerError';
56
59
  this.position = position;
57
60
  this.character = character;
@@ -71,8 +74,14 @@ const CHAR_UPPER_Z = 90;
71
74
  const CHAR_LOWER_A = 97;
72
75
  const CHAR_LOWER_Z = 122;
73
76
 
74
- /** Known identifier keywords mapped to their token types. */
75
- const IDENTIFIER_KEYWORDS: Record<string, TokenType> = {
77
+ /**
78
+ * Known identifier keywords mapped to their token types.
79
+ *
80
+ * Null-prototype, because every lookup here is keyed by arbitrary user input.
81
+ * Over a plain object literal `'constructor'` resolves to `Object`'s own, and
82
+ * the identifier leaves the lexer as a token whose `type` is a function.
83
+ */
84
+ const IDENTIFIER_KEYWORDS: Record<string, TokenType> = Object.assign(Object.create(null), {
76
85
  kh: TokenType.KEEP_HIGH,
77
86
  kl: TokenType.KEEP_LOW,
78
87
  k: TokenType.KEEP_HIGH,
@@ -96,20 +105,58 @@ const IDENTIFIER_KEYWORDS: Record<string, TokenType> = {
96
105
  sd: TokenType.SORT_DESC,
97
106
  cs: TokenType.CRIT_SUCCESS,
98
107
  cf: TokenType.CRIT_FAIL,
99
- };
108
+ } satisfies Record<string, TokenType>);
109
+
110
+ /**
111
+ * Dice-pool modifiers that maximal munch can merge, mapped to what re-separates
112
+ * them: a count for the ones that take an operand, a space for the ones that do
113
+ * not. Membership doubles as the filter — the keywords left out (`d`, `f`, `r`,
114
+ * `ro`, `vs`, the function names) have no split that parses.
115
+ */
116
+ // ! `min`/`max` share `TokenType.FUNCTION` with `floor`, so the separator
117
+ // ! cannot be derived from the token type. Null-prototype for the same reason
118
+ // ! as `IDENTIFIER_KEYWORDS` above.
119
+ const MODIFIER_SEPARATORS: Record<string, string> = Object.assign(Object.create(null), {
120
+ kh: '1',
121
+ kl: '1',
122
+ k: '1',
123
+ dh: '1',
124
+ dl: '1',
125
+ min: '1',
126
+ max: '1',
127
+ s: ' ',
128
+ sa: ' ',
129
+ sd: ' ',
130
+ cs: ' ',
131
+ cf: ' ',
132
+ } satisfies Record<string, string>);
133
+
134
+ /**
135
+ * Names a code point the message cannot render — a no-break space, zero-width
136
+ * space or byte-order mark shows as nothing between the quotes. Printable ASCII
137
+ * is legible there already and stays unadorned.
138
+ */
139
+ function nameCodePoint(codePoint: number | undefined): string {
140
+ if (codePoint == null || (codePoint > 0x20 && codePoint < 0x7f)) return '';
141
+ return ` (U+${codePoint.toString(16).toUpperCase().padStart(4, '0')})`;
142
+ }
100
143
 
101
144
  /**
102
- * Builds a hint for identifiers that start with a known keyword. Maximal
103
- * munch merges adjacent modifiers when the first has no count — `4d6khs`
104
- * lexes as one identifier `khs` instead of `kh` + `s`. Point the user at the
105
- * explicit-count (or whitespace) split.
145
+ * Builds a hint for identifiers that merged two modifiers. Maximal munch joins
146
+ * them when the first takes no count — `4d6khs` lexes as one identifier `khs`
147
+ * instead of `kh` + `s` so the fix is to re-separate them.
148
+ *
149
+ * Both halves must be separable: `flor` and `kx` start with a keyword but end
150
+ * in something no split can rescue, so they get no hint.
106
151
  */
107
152
  function buildIdentifierHint(identifier: string): string {
108
153
  for (let length = identifier.length - 1; length >= 1; length--) {
109
154
  const prefix = identifier.slice(0, length);
110
- if (IDENTIFIER_KEYWORDS[prefix] == null) continue;
155
+ const separator = MODIFIER_SEPARATORS[prefix];
156
+ if (separator == null) continue;
111
157
  const rest = identifier.slice(length);
112
- return ` (did you mean '${prefix}' followed by '${rest}'? separate modifiers with a count or space, e.g. '${prefix}1${rest}')`;
158
+ if (MODIFIER_SEPARATORS[rest] == null) continue;
159
+ return ` (did you mean '${prefix}' followed by '${rest}'? write it as '${prefix}${separator}${rest}')`;
113
160
  }
114
161
  return '';
115
162
  }
@@ -221,7 +268,12 @@ export class Lexer {
221
268
  // report the full code point instead of a lone surrogate ('�').
222
269
  const codePoint = this.input.codePointAt(startPos);
223
270
  const display = codePoint == null ? char : String.fromCodePoint(codePoint);
224
- throw new LexerError('Unexpected character', 'UNEXPECTED_CHARACTER', startPos, display);
271
+ throw new LexerError(
272
+ `Unexpected character${nameCodePoint(codePoint)}: '${display}'`,
273
+ 'UNEXPECTED_CHARACTER',
274
+ startPos,
275
+ display,
276
+ );
225
277
  }
226
278
  }
227
279
  }
@@ -294,7 +346,7 @@ export class Lexer {
294
346
  }
295
347
 
296
348
  throw new LexerError(
297
- `Unexpected identifier${buildIdentifierHint(lower)}`,
349
+ `Unexpected identifier${buildIdentifierHint(lower)}: '${lower}'`,
298
350
  'UNEXPECTED_IDENTIFIER',
299
351
  startPos,
300
352
  lower,
@@ -332,7 +384,15 @@ export class Lexer {
332
384
  } else {
333
385
  const nameStart = this.pos;
334
386
  if (this.isAtEnd() || !this.isIdentifierStart(this.peek())) {
335
- throw new LexerError('Empty @ variable name', 'UNEXPECTED_CHARACTER', startPos, '@');
387
+ // Reached by a missing name and by one starting with a digit or a
388
+ // non-ASCII letter alike, so the message names the rule rather than
389
+ // any one of those causes.
390
+ throw new LexerError(
391
+ `@ variable name must start with a letter or '_'`,
392
+ 'UNEXPECTED_CHARACTER',
393
+ startPos,
394
+ '@',
395
+ );
336
396
  }
337
397
  this.advance();
338
398
  while (!this.isAtEnd() && this.isIdentifierPart(this.peek())) {
@@ -172,6 +172,55 @@ const TOKEN_DISPLAY = {
172
172
  /** Token types that carry a display symbol and may be passed to `expect()`. */
173
173
  type ExpectableToken = keyof typeof TOKEN_DISPLAY;
174
174
 
175
+ /**
176
+ * True while a crit threshold carries only the bare `cs`/`cf` sentinel, so no
177
+ * comparison was consumed. Emptiness cannot answer this — bare `cs` fills the
178
+ * list with `'default'` rather than leaving it empty.
179
+ */
180
+ function isBareCritThreshold(node: CritThresholdNode): boolean {
181
+ const isDefault = (threshold: CritThreshold): boolean => threshold === 'default';
182
+ return node.successThresholds.every(isDefault) && node.failThresholds.every(isDefault);
183
+ }
184
+
185
+ /**
186
+ * Follows a node down to the one whose source text the next token abuts.
187
+ *
188
+ * In `1+2d6s1` the sort is already buried under the `+` by the time the stray
189
+ * `1` reaches LED position.
190
+ *
191
+ * ! Only these three descend. Every other node that holds a sub-expression
192
+ * ! closes it first — `(…)`, `{…}`, `f(…)`, and the parenthesized operand of
193
+ * ! `2d(…)` or `4d6kh(…)` all put a delimiter between the child and the stray
194
+ * ! token, so the child is not what that token follows.
195
+ */
196
+ function rightmostNode(node: ASTNode): ASTNode {
197
+ let current = node;
198
+ for (;;) {
199
+ switch (current.type) {
200
+ case 'BinaryOp':
201
+ current = current.right;
202
+ break;
203
+ case 'UnaryOp':
204
+ current = current.operand;
205
+ break;
206
+ case 'Versus':
207
+ current = current.dc;
208
+ break;
209
+ default:
210
+ return current;
211
+ }
212
+ }
213
+ }
214
+
215
+ /**
216
+ * Names the operand a token was still waiting for when the notation ran out.
217
+ */
218
+ function expectedOperand(token: Token): string {
219
+ if (token.type === TokenType.DICE) return 'a side count';
220
+ if (token.type === TokenType.VS) return 'a difficulty class';
221
+ return 'a value';
222
+ }
223
+
175
224
  /**
176
225
  * Arity table for math functions. `min` and `max` are inclusive.
177
226
  * `POSITIVE_INFINITY` means unbounded (variadic).
@@ -220,11 +269,9 @@ export class Parser {
220
269
  * Parse the token stream into an AST.
221
270
  */
222
271
  parse(): ASTNode {
223
- if (this.peek().type === TokenType.EOF) {
224
- throw new ParseError('Unexpected end of input', 'UNEXPECTED_END', this.peek().position);
225
- }
226
-
227
- const ast = this.parseExpression(0);
272
+ // Nothing has demanded an operand yet, so an immediate EOF is an empty
273
+ // notation rather than a truncated one.
274
+ const ast = this.parseExpression(0, undefined);
228
275
 
229
276
  if (this.peek().type !== TokenType.EOF) {
230
277
  const token = this.peek();
@@ -241,14 +288,18 @@ export class Parser {
241
288
 
242
289
  /**
243
290
  * Parse an expression with minimum binding power.
291
+ *
292
+ * `pending` is the token that demanded this operand — the `d` of `1d`, the
293
+ * `<` of `2d6r<`. It exists so a truncated notation can name what it was
294
+ * waiting for; `undefined` only at the top of the input.
244
295
  */
245
- private parseExpression(minBp: number): ASTNode {
296
+ private parseExpression(minBp: number, pending: Token | undefined): ASTNode {
246
297
  const entryDepth = this.depth;
247
298
  this.depth += 1;
248
299
  this.guardDepth();
249
300
 
250
301
  try {
251
- let left = this.parseNud();
302
+ let left = this.parseNud(pending);
252
303
 
253
304
  while (this.hasTokens()) {
254
305
  const token = this.peek();
@@ -290,7 +341,7 @@ export class Parser {
290
341
  * NUD - Null Denotation.
291
342
  * Handles tokens that appear at the start of an expression (prefix position).
292
343
  */
293
- private parseNud(): ASTNode {
344
+ private parseNud(pending: Token | undefined): ASTNode {
294
345
  const token = this.advance();
295
346
 
296
347
  switch (token.type) {
@@ -322,7 +373,23 @@ export class Parser {
322
373
  return this.parseVariable(token);
323
374
 
324
375
  case TokenType.EOF:
325
- throw new ParseError('Unexpected end of input', 'UNEXPECTED_END', token.position);
376
+ throw new ParseError(
377
+ pending == null
378
+ ? 'Empty notation'
379
+ : `Expected ${expectedOperand(pending)} after '${pending.value}'`,
380
+ 'UNEXPECTED_END',
381
+ token.position,
382
+ );
383
+
384
+ // Reaching prefix position means no roll precedes the `vs`, so there is
385
+ // nothing to check against the DC.
386
+ case TokenType.VS:
387
+ throw new ParseError(
388
+ 'Versus needs a roll on its left',
389
+ 'UNEXPECTED_TOKEN',
390
+ token.position,
391
+ token,
392
+ );
326
393
 
327
394
  default:
328
395
  throw new ParseError(
@@ -395,13 +462,35 @@ export class Parser {
395
462
  case TokenType.VS:
396
463
  return this.parseVersus(left, token);
397
464
 
398
- default:
465
+ case TokenType.FAIL:
466
+ return Parser.throwOrphanFailThreshold(token);
467
+
468
+ default: {
469
+ // A bare number after a modifier that took none — `2d6s1`, `2d6!0`.
470
+ // ! Only while the modifier is still empty-handed: past `2d6!>1 2` the
471
+ // ! explode did take its comparison, and the stray number is an
472
+ // ! unrelated juxtaposition that keeps the generic message.
473
+ const trailing = rightmostNode(left);
474
+ if (
475
+ token.type === TokenType.NUMBER &&
476
+ (trailing.type === 'Sort' ||
477
+ (trailing.type === 'Explode' && trailing.threshold == null) ||
478
+ (trailing.type === 'CritThreshold' && isBareCritThreshold(trailing)))
479
+ ) {
480
+ throw new ParseError(
481
+ 'This modifier takes no count',
482
+ 'UNEXPECTED_TOKEN',
483
+ token.position,
484
+ token,
485
+ );
486
+ }
399
487
  throw new ParseError(
400
488
  `Unexpected infix token '${token.value}'`,
401
489
  'UNEXPECTED_TOKEN',
402
490
  token.position,
403
491
  token,
404
492
  );
493
+ }
405
494
  }
406
495
  }
407
496
 
@@ -427,7 +516,7 @@ export class Parser {
427
516
  }
428
517
 
429
518
  private parseUnaryMinus(token: Token): UnaryOpNode {
430
- const operand = this.parseExpression(BP.UNARY);
519
+ const operand = this.parseExpression(BP.UNARY, token);
431
520
  this.rejectSuccessCountTarget(operand, token);
432
521
  return {
433
522
  type: 'UnaryOp',
@@ -439,7 +528,7 @@ export class Parser {
439
528
  }
440
529
 
441
530
  private parsePrefixDice(token: Token): DiceNode {
442
- const sides = this.parseExpression(BP.DICE_RIGHT);
531
+ const sides = this.parseExpression(BP.DICE_RIGHT, token);
443
532
  this.rejectSuccessCountTarget(sides, token);
444
533
  this.rejectVersusMetaOperand(sides, token);
445
534
  return {
@@ -455,7 +544,7 @@ export class Parser {
455
544
  this.rejectSuccessCountTarget(left, token);
456
545
  this.rejectVersusMetaOperand(left, token);
457
546
  this.rejectBareDiceChain(left, token);
458
- const sides = this.parseExpression(BP.DICE_RIGHT);
547
+ const sides = this.parseExpression(BP.DICE_RIGHT, token);
459
548
  this.rejectSuccessCountTarget(sides, token);
460
549
  this.rejectVersusMetaOperand(sides, token);
461
550
  return {
@@ -514,7 +603,13 @@ export class Parser {
514
603
  }
515
604
 
516
605
  private parseGrouped(token: Token): GroupedNode {
517
- const expression = this.parseExpression(0);
606
+ // Mirrors `parseGroup`'s empty check; without it `)` reaches the prefix arm
607
+ // and reports itself, naming the closer rather than the empty construct.
608
+ if (this.peek().type === TokenType.RPAREN) {
609
+ throw new ParseError('Empty parentheses', 'UNEXPECTED_TOKEN', token.position, token);
610
+ }
611
+
612
+ const expression = this.parseExpression(0, token);
518
613
  const close = this.expect(TokenType.RPAREN);
519
614
  return { type: 'Grouped', expression, start: token.position, end: close.end };
520
615
  }
@@ -527,10 +622,10 @@ export class Parser {
527
622
  throw new ParseError('Empty group', 'UNEXPECTED_TOKEN', startToken.position, startToken);
528
623
  }
529
624
 
530
- const expressions: ASTNode[] = [this.parseExpression(0)];
625
+ const expressions: ASTNode[] = [this.parseExpression(0, startToken)];
531
626
  while (this.peek().type === TokenType.COMMA) {
532
- this.advance();
533
- expressions.push(this.parseExpression(0));
627
+ const comma = this.advance();
628
+ expressions.push(this.parseExpression(0, comma));
534
629
  }
535
630
 
536
631
  if (this.peek().type !== TokenType.RBRACE) {
@@ -554,16 +649,16 @@ export class Parser {
554
649
  private parseFunctionCall(token: Token): FunctionCallNode {
555
650
  // `FUNCTION`, `COMMA`, and `RPAREN` all sit at BP -1, so argument boundaries
556
651
  // fall out of the inner `parseExpression(0)` calls terminating on their own.
557
- this.expect(TokenType.LPAREN);
652
+ const open = this.expect(TokenType.LPAREN);
558
653
 
559
654
  const args: ASTNode[] = [];
560
655
  if (this.peek().type !== TokenType.RPAREN) {
561
- const first = this.parseExpression(0);
656
+ const first = this.parseExpression(0, open);
562
657
  this.rejectSuccessCountTarget(first, token);
563
658
  args.push(first);
564
659
  while (this.peek().type === TokenType.COMMA) {
565
- this.advance();
566
- const next = this.parseExpression(0);
660
+ const comma = this.advance();
661
+ const next = this.parseExpression(0, comma);
567
662
  this.rejectSuccessCountTarget(next, token);
568
663
  args.push(next);
569
664
  }
@@ -607,7 +702,7 @@ export class Parser {
607
702
 
608
703
  const operator = this.getOperatorSymbol(token);
609
704
  const rightBp = this.getRightBp(token);
610
- const right = this.parseExpression(rightBp);
705
+ const right = this.parseExpression(rightBp, token);
611
706
 
612
707
  this.rejectSuccessCountTarget(right, token);
613
708
 
@@ -656,8 +751,12 @@ export class Parser {
656
751
  // never hide inside one and widening the set would never match.
657
752
  const node = unwrapGrouped(target);
658
753
  if (isSuccessCount(node)) {
754
+ // ! Three shapes reach here and only one is a modifier — arithmetic
755
+ // ! (`5d6>=5+3`) and meta-operand reuse (`4d(1d6>=3)`) do too, so the
756
+ // ! message has to stay true of all three. **README.md → Pools and
757
+ // ! checks** carries the worked rewrites.
659
758
  throw new ParseError(
660
- `Cannot apply modifier after success counting`,
759
+ `Success counting is terminal: it cannot be part of a larger expression`,
661
760
  'INVALID_SUCCESS_COUNT_TARGET',
662
761
  token.position,
663
762
  token,
@@ -817,7 +916,7 @@ export class Parser {
817
916
  nextToken === TokenType.LPAREN ||
818
917
  nextToken === TokenType.AT;
819
918
  const count: ASTNode = hasExplicitCount
820
- ? this.parseExpression(BP.DICE_LEFT)
919
+ ? this.parseExpression(BP.DICE_LEFT, token)
821
920
  : Parser.syntheticLiteral(1, token);
822
921
  this.rejectSuccessCountTarget(count, token);
823
922
  this.rejectVersusMetaOperand(count, token);
@@ -979,7 +1078,7 @@ export class Parser {
979
1078
  );
980
1079
  }
981
1080
 
982
- const value = this.parseExpression(BP.DICE_LEFT);
1081
+ const value = this.parseExpression(BP.DICE_LEFT, token);
983
1082
  this.rejectSuccessCountTarget(value, token);
984
1083
  this.rejectVersusMetaOperand(value, token);
985
1084
 
@@ -1153,7 +1252,7 @@ export class Parser {
1153
1252
 
1154
1253
  const operator = this.getCompareOp(token);
1155
1254
  // Threshold binds at `BP.DICE_LEFT` — see `parseComparePoint` TSDoc.
1156
- const value = this.parseExpression(BP.DICE_LEFT);
1255
+ const value = this.parseExpression(BP.DICE_LEFT, token);
1157
1256
  this.rejectSuccessCountTarget(value, token);
1158
1257
  this.rejectVersusMetaOperand(value, token);
1159
1258
  const start = target.start ?? token.position;
@@ -1163,8 +1262,8 @@ export class Parser {
1163
1262
  return { type: 'SuccessCount', target, threshold: { operator, value }, start, end };
1164
1263
  }
1165
1264
 
1166
- this.advance();
1167
- const failThreshold = this.parseFailThreshold(token);
1265
+ const failToken = this.advance();
1266
+ const failThreshold = this.parseFailThreshold(token, failToken);
1168
1267
 
1169
1268
  return {
1170
1269
  type: 'SuccessCount',
@@ -1176,18 +1275,44 @@ export class Parser {
1176
1275
  };
1177
1276
  }
1178
1277
 
1179
- /** Parses the `f...` suffix of a success count. Bare `fN` means `f=N`. */
1180
- private parseFailThreshold(token: Token): ComparePoint {
1278
+ /**
1279
+ * Parses the `f...` suffix of a success count. Bare `fN` means `f=N`.
1280
+ *
1281
+ * `token` is the success-count comparison, which the reject calls report
1282
+ * against; `failToken` is the `f`, so a truncated `2d6>=4f` names it rather
1283
+ * than the comparison behind it.
1284
+ */
1285
+ private parseFailThreshold(token: Token, failToken: Token): ComparePoint {
1181
1286
  if (this.isComparePointAhead()) return this.parseComparePoint();
1182
1287
 
1183
1288
  // Same threshold binding as `parseComparePoint` (BP.DICE_LEFT).
1184
- const failValue = this.parseExpression(BP.DICE_LEFT);
1289
+ const failValue = this.parseExpression(BP.DICE_LEFT, failToken);
1185
1290
  this.rejectSuccessCountTarget(failValue, token);
1186
1291
  this.rejectVersusMetaOperand(failValue, token);
1187
1292
 
1188
1293
  return { operator: '=', value: failValue };
1189
1294
  }
1190
1295
 
1296
+ /**
1297
+ * Rejects an `f` that reached LED position, which means no success count is
1298
+ * there to own it — `parseSuccessCount` consumes its own `f`, so this is the
1299
+ * only way the token surfaces.
1300
+ *
1301
+ * The trigger clause names the cause of nearly every orphan: an explode's
1302
+ * comparison is optional, so `3d6!>4f1` reads as a success count with a botch
1303
+ * threshold when `!` has already spent the `>4`. Naming it unconditionally
1304
+ * keeps this off the `index.js` byte budget; **README.md → Arithmetic and
1305
+ * precedence** carries the two rewrites.
1306
+ */
1307
+ private static throwOrphanFailThreshold(token: Token): never {
1308
+ throw new ParseError(
1309
+ `Fail threshold requires a success count; an explode's comparison is its trigger`,
1310
+ 'UNEXPECTED_TOKEN',
1311
+ token.position,
1312
+ token,
1313
+ );
1314
+ }
1315
+
1191
1316
  private parseVersus(left: ASTNode, token: Token): VersusNode {
1192
1317
  this.rejectSuccessCountTarget(left, token);
1193
1318
 
@@ -1203,7 +1328,7 @@ export class Parser {
1203
1328
  throw new ParseError('Cannot chain versus operators', 'NESTED_VERSUS', token.position, token);
1204
1329
  }
1205
1330
 
1206
- const dc = this.parseExpression(BP.VS_RIGHT);
1331
+ const dc = this.parseExpression(BP.VS_RIGHT, token);
1207
1332
  this.rejectSuccessCountTarget(dc, token);
1208
1333
 
1209
1334
  return {
@@ -1253,7 +1378,7 @@ export class Parser {
1253
1378
 
1254
1379
  this.advance();
1255
1380
 
1256
- const value = this.parseExpression(BP.DICE_LEFT);
1381
+ const value = this.parseExpression(BP.DICE_LEFT, token);
1257
1382
  this.rejectSuccessCountTarget(value, token);
1258
1383
  this.rejectVersusMetaOperand(value, token);
1259
1384
 
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  // Generated by `bun run generate:version` from package.json — do not edit.
2
- export const version = '3.2.1';
2
+ export const version = '3.3.0';