diff --git a/src/format.js b/src/format.js index 44dee5e..1ed872f 100644 --- a/src/format.js +++ b/src/format.js @@ -102,7 +102,7 @@ function formatNode(node, indentation) { .map((entry) => formatEntry(entry)) .join("")}${ node.children ? - `${ensureStartsWithWhitespace(node.beforeChildren)}{${formatDocument( + `${node.beforeChildren ?? " "}{${formatDocument( node.children, indentation + 1, )}}` diff --git a/src/parser/parse.js b/src/parser/parse.js index 11fe25a..b860515 100644 --- a/src/parser/parse.js +++ b/src/parser/parse.js @@ -772,13 +772,13 @@ export function parseBaseNode(ctx) { } let space = parseNodeSpace(ctx); + let endsOnWhitespace = space != null; /** @type {string=} */ - let slashdash; + let slashdash = parseSlashdash(ctx); /** @type {Entry[]} */ const entries = []; - while (space) { - slashdash = parseSlashdash(ctx); + while (space || slashdash) { const start = ctx.lastToken.end; const _entry = parseNodePropOrArg(ctx); @@ -787,20 +787,22 @@ export function parseBaseNode(ctx) { } if (slashdash) { - parseNodeSpace(ctx); + endsOnWhitespace = parseNodeSpace(ctx) != null; space = concatenate( space, slashdash, ctx.text.slice(start.offset, ctx.lastToken.end.offset), ); - slashdash = undefined; + slashdash = parseSlashdash(ctx); } else { const entry = _entry[0]; entry.leading = space; entries.push(entry); space = _entry[1] || parseNodeSpace(ctx); + endsOnWhitespace = space != null; + slashdash = parseSlashdash(ctx); } } @@ -809,7 +811,7 @@ export function parseBaseNode(ctx) { /** @type {string=} */ let spaceBeforeChildren; - while (space) { + while (true) { slashdash ??= parseSlashdash(ctx); const start = ctx.lastToken.end; @@ -837,16 +839,11 @@ export function parseBaseNode(ctx) { } possibleChildren = parsedChildren; - spaceBeforeChildren = space; + spaceBeforeChildren = space ?? ""; space = undefined; } - const spaceAfter = parseNodeSpace(ctx); - if (!spaceAfter) { - break; - } - - space = concatenate(space, spaceAfter); + space = concatenate(space, parseNodeSpace(ctx)); } const node = new Node(name, entries, possibleChildren); diff --git a/test/upstream b/test/upstream index 53a884c..84911fe 160000 --- a/test/upstream +++ b/test/upstream @@ -1 +1 @@ -Subproject commit 53a884c93df6651c166fabd8e031ccd8e59f916e +Subproject commit 84911feb11e248f7d5fcfc6b23f813ea3929a0e5