Skip to content

Formatter: Fix trailing whitespace in <pre> with inline child elements#1571

Open
hakanensari wants to merge 1 commit intomarcoroth:mainfrom
hakanensari:fix-pre-inline-close-tag-whitespace
Open

Formatter: Fix trailing whitespace in <pre> with inline child elements#1571
hakanensari wants to merge 1 commit intomarcoroth:mainfrom
hakanensari:fix-pre-inline-close-tag-whitespace

Conversation

@hakanensari
Copy link
Copy Markdown

After upgrading to the latest Herb version, formatting <pre><code> blocks nested inside another element became non-idempotent.

Each formatter run appends trailing whitespace before the closing tag, which then triggers lint errors.

I added a failing test.

When an inline element (e.g. `<code>`, `<span>`) inside `<pre>` is
nested within a parent element and the line exceeds `maxLineLength`,
`visitHTMLCloseTagNode` incorrectly adds indentation before the close
tag. Inside `capture().join("")`, this indentation becomes trailing
spaces that grow on each format pass.

Check `inContentPreservingContext` so close tags are always appended
inline when inside content-preserving elements.
Copilot AI review requested due to automatic review settings April 1, 2026 21:05
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Fixes a formatter idempotency regression affecting content-preserving tags after the Herb upgrade, where nested <pre><code>…</code></pre> could accumulate trailing whitespace on repeated formatting passes.

Changes:

  • Added a regression test ensuring <pre> with an inline child element exceeding maxLineLength remains unchanged and idempotent across runs.
  • Updated close-tag printing logic to append closing tags to the current line when inside a content-preserving context, preventing indentation/trailing-space injection.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
javascript/packages/formatter/test/html/content-preserving-tags.test.ts Adds a failing regression test for <div><pre><code>… idempotency when line length is exceeded.
javascript/packages/formatter/src/format-printer.ts Ensures close tags are appended inline while in content-preserving contexts to avoid introducing trailing whitespace.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants