Skip to content

fix: trim astro frontmatter content before processing it#10328

Merged
dyc3 merged 1 commit into
mainfrom
dyc3/fix-10309
May 10, 2026
Merged

fix: trim astro frontmatter content before processing it#10328
dyc3 merged 1 commit into
mainfrom
dyc3/fix-10309

Conversation

@dyc3

@dyc3 dyc3 commented May 10, 2026

Copy link
Copy Markdown
Contributor

Summary

GPT 5.5 implemented the fix after heavy steering. I'm not entirely sure if this is the right fix, but the tests pass and there's no regressions.

fixes #10309

Test Plan

snapshots, new tests

Docs

@changeset-bot

changeset-bot Bot commented May 10, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: aa08d58

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 13 packages
Name Type
@biomejs/biome Patch
@biomejs/cli-win32-x64 Patch
@biomejs/cli-win32-arm64 Patch
@biomejs/cli-darwin-x64 Patch
@biomejs/cli-darwin-arm64 Patch
@biomejs/cli-linux-x64 Patch
@biomejs/cli-linux-arm64 Patch
@biomejs/cli-linux-x64-musl Patch
@biomejs/cli-linux-arm64-musl Patch
@biomejs/wasm-web Patch
@biomejs/wasm-bundler Patch
@biomejs/wasm-nodejs Patch
@biomejs/backend-jsonrpc Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions github-actions Bot added A-CLI Area: CLI A-Project Area: project labels May 10, 2026
@coderabbitai

coderabbitai Bot commented May 10, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

This PR fixes an issue where Biome incorrectly inserted newlines into Astro frontmatter when running lint or assist in --write mode. The fix modifies build_astro_frontmatter_candidate to consistently trim the Astro frontmatter token when constructing EmbedContent, ensuring both content_range, content_offset, and text derive from trimmed values rather than the previous mixed approach. Two regression tests validate that the fix works correctly for both no-op lint runs and linting with actual fixes applied.

Possibly related PRs

  • biomejs/biome#9902: Preserves original whitespace/trivia in embedded content handling by adjusting how reindentation is applied to Astro and similar constructs.

Suggested labels

A-Linter, L-HTML, A-CLI

Suggested reviewers

  • ematipico
  • siketyan
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically describes the main change: trimming Astro frontmatter content before processing, which directly addresses the linked issue #10309.
Description check ✅ Passed The description is related to the changeset; it mentions the fix, references issue #10309, describes the test plan (snapshots and new tests), and acknowledges AI assistance.
Linked Issues check ✅ Passed The PR directly addresses issue #10309 by fixing the Astro frontmatter trimming logic to prevent unwanted newlines being added during linter/assist operations, with new regression tests added to verify the fix.
Out of Scope Changes check ✅ Passed All changes are scoped to the Astro frontmatter issue: test additions, changeset metadata, and the core fix in parse_embedded_nodes.rs—no out-of-scope modifications detected.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dyc3/fix-10309

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
crates/biome_cli/tests/cases/handle_astro_files.rs (1)

923-928: ⚡ Quick win

Use the fully-qualified rule in --only for long-term test stability.

Line 927 currently uses --only=noDebugger; using --only=suspicious/noDebugger is less ambiguous and matches surrounding test style.

Suggested tweak
-                "--only=noDebugger",
+                "--only=suspicious/noDebugger",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/biome_cli/tests/cases/handle_astro_files.rs` around lines 923 - 928,
The test passes a CLI arg array containing "--only=noDebugger" which is
ambiguous; update the test to use the fully-qualified rule name by replacing
"--only=noDebugger" with "--only=suspicious/noDebugger" in the args list where
the lint invocation is built (the array that includes
"lint","--write","--unsafe","--only=noDebugger", astro_file_path.as_str()) so it
matches surrounding tests and ensures long-term stability.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@crates/biome_cli/tests/cases/handle_astro_files.rs`:
- Around line 923-928: The test passes a CLI arg array containing
"--only=noDebugger" which is ambiguous; update the test to use the
fully-qualified rule name by replacing "--only=noDebugger" with
"--only=suspicious/noDebugger" in the args list where the lint invocation is
built (the array that includes "lint","--write","--unsafe","--only=noDebugger",
astro_file_path.as_str()) so it matches surrounding tests and ensures long-term
stability.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 9a7626be-e1a2-427f-923d-a10df6b59743

📥 Commits

Reviewing files that changed from the base of the PR and between ed26542 and aa08d58.

⛔ Files ignored due to path filters (1)
  • crates/biome_cli/tests/snapshots/main_cases_handle_astro_files/issue_7912.snap is excluded by !**/*.snap and included by **
📒 Files selected for processing (3)
  • .changeset/tricky-news-peel.md
  • crates/biome_cli/tests/cases/handle_astro_files.rs
  • crates/biome_service/src/file_handlers/html/parse_embedded_nodes.rs

@dyc3 dyc3 merged commit b59133f into main May 10, 2026
26 checks passed
@dyc3 dyc3 deleted the dyc3/fix-10309 branch May 10, 2026 17:11
@github-actions github-actions Bot mentioned this pull request May 10, 2026
jiwon79 pushed a commit to jiwon79/biome that referenced this pull request May 11, 2026
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Client that referenced this pull request Jun 3, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@biomejs/biome](https://biomejs.dev) ([source](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome)) | imports | patch | [`2.4.15` -> `2.4.16`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.4.15/2.4.16) |

---

### Release Notes

<details>
<summary>biomejs/biome (@&#8203;biomejs/biome)</summary>

### [`v2.4.16`](https://github.com/biomejs/biome/blob/HEAD/packages/@&#8203;biomejs/biome/CHANGELOG.md#2416)

[Compare Source](https://github.com/biomejs/biome/compare/@biomejs/biome@2.4.15...@biomejs/biome@2.4.16)

##### Patch Changes

- [#&#8203;10329](biomejs/biome#10329) [`ef764d5`](biomejs/biome@ef764d5) Thanks [@&#8203;Conaclos](https://github.com/Conaclos)! - Fixed an issue where diagnostics showed an incorrect location in Astro files.

- [#&#8203;10363](biomejs/biome#10363) [`50aa415`](biomejs/biome@50aa415) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed HTML formatting for a case where comments could cause the formatter to split up a closing tag, which would cause the resulting HTML to be syntactically invalid.

  Input:

  ```html
  <span
    ><!-- 1
  --><span>a</span
    ><!-- 2
  --><span>b</span
    ><!-- 3
  --></span>
  ```

  Output:

  ```diff
    <span
  	  ><!-- 1
  - --> <span>a</span<!-- 2
  - --> ><span>b</span><!-- 3
  + --><span>a</span><!-- 2
  + --><span>b</span><!-- 3
    --></span
    >
  ```

- [#&#8203;10465](biomejs/biome#10465) [`0c718da`](biomejs/biome@0c718da) Thanks [@&#8203;dfedoryshchev](https://github.com/dfedoryshchev)! - Fixed diagnostics emitted by the `noUntrustedLicenses` rule.

- [#&#8203;10358](biomejs/biome#10358) [`05c2617`](biomejs/biome@05c2617) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10356](biomejs/biome#10356): `biome rage --linter` now displays rules enabled through linter domains in the enabled rules list.

- [#&#8203;10300](biomejs/biome#10300) [`950247c`](biomejs/biome@950247c) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10265](biomejs/biome#10265): Svelte function bindings such as `bind:value={get, set}` are now parsed more precisely, so [`noCommaOperator`](https://biomejs.dev/linter/rules/no-comma-operator/) won't emit false positives for that syntax anymore.

- [#&#8203;9786](biomejs/biome#9786) [`e71f584`](biomejs/biome@e71f584) Thanks [@&#8203;MeGaNeKoS](https://github.com/MeGaNeKoS)! - Fixed [#&#8203;8480](biomejs/biome#8480): [`useDestructuring`](https://biomejs.dev/linter/rules/use-destructuring/) now provides `variableDeclarator` and `assignmentExpression` options to control which contexts enforce destructuring, matching ESLint's `prefer-destructuring` configuration. Both default to `{array: true, object: true}`. The diagnostic for object destructuring in assignment expressions now instructs users to wrap the assignment in parentheses.

- [#&#8203;10425](biomejs/biome#10425) [`1948b72`](biomejs/biome@1948b72) Thanks [@&#8203;sjh9714](https://github.com/sjh9714)! - Fixed [#&#8203;10244](biomejs/biome#10244): The `useOptionalChain` rule now detects negated guard inequality chains like `!foo || foo.bar !== "x"`.

- [#&#8203;10442](biomejs/biome#10442) [`001f94f`](biomejs/biome@001f94f) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10411](biomejs/biome#10411): [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/) no longer causes a stack overflow when a nested function returns an object with shorthand properties that shadow destructured variables from an outer scope.

- [#&#8203;10318](biomejs/biome#10318) [`9b1577f`](biomejs/biome@9b1577f) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added support for `formatter.trailingCommas` in overrides. This option was previously available in the top-level formatter configuration but missing from formatter overrides.

- [#&#8203;10319](biomejs/biome#10319) [`2e37709`](biomejs/biome@2e37709) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed Vue and Svelte formatting for standalone interpolations in inline elements. Biome now preserves existing newlines in cases like:

  ```diff
  - <span> {{ value }} </span>
  + <span>
  +   {{ value }}
  + </span>
  ```

- [#&#8203;10365](biomejs/biome#10365) [`0a58eb0`](biomejs/biome@0a58eb0) Thanks [@&#8203;Netail](https://github.com/Netail)! - Fixed [#&#8203;10361](biomejs/biome#10361): [`noUnusedFunctionParameters`](https://biomejs.dev/linter/rules/no-unused-function-parameters/) now mentions the parameter name in the diagnostic.

- [#&#8203;10439](biomejs/biome#10439) [`df6b867`](biomejs/biome@df6b867) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS and SCSS formatting for comments around declaration colons so comments between property names, colons, and values stay at the same boundary as Prettier.

  ```diff
   .selector {
  -  color: /* red, */
  -    blue;
  +  color: /* red, */ blue;
   }
  ```

- [#&#8203;10344](biomejs/biome#10344) [`b30208c`](biomejs/biome@b30208c) Thanks [@&#8203;siketyan](https://github.com/siketyan)! - Fixed [`#10123`](biomejs/biome#10123): Corrected the [`noReactNativeDeepImports`](https://biomejs.dev/linter/rules/no-react-native-deep-imports/) source rule to point to the proper upstream rule, so users can migrate from the original rule correctly.

- [#&#8203;10328](biomejs/biome#10328) [`b59133f`](biomejs/biome@b59133f) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10309](biomejs/biome#10309): Biome no longer adds newlines to Astro frontmatter when linter or assist `--write` mode is enabled.

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xOTUuMiIsInVwZGF0ZWRJblZlciI6IjQzLjE5NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Reviewed-on: https://git.oirnoir.dev/OIRNOIR/YouTube-Helper-Client/pulls/5
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Server that referenced this pull request Jun 3, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@biomejs/biome](https://biomejs.dev) ([source](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome)) | imports | patch | [`2.4.15` -> `2.4.16`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.4.15/2.4.16) |

---

### Release Notes

<details>
<summary>biomejs/biome (@&#8203;biomejs/biome)</summary>

### [`v2.4.16`](https://github.com/biomejs/biome/blob/HEAD/packages/@&#8203;biomejs/biome/CHANGELOG.md#2416)

[Compare Source](https://github.com/biomejs/biome/compare/@biomejs/biome@2.4.15...@biomejs/biome@2.4.16)

##### Patch Changes

- [#&#8203;10329](biomejs/biome#10329) [`ef764d5`](biomejs/biome@ef764d5) Thanks [@&#8203;Conaclos](https://github.com/Conaclos)! - Fixed an issue where diagnostics showed an incorrect location in Astro files.

- [#&#8203;10363](biomejs/biome#10363) [`50aa415`](biomejs/biome@50aa415) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed HTML formatting for a case where comments could cause the formatter to split up a closing tag, which would cause the resulting HTML to be syntactically invalid.

  Input:

  ```html
  <span
    ><!-- 1
  --><span>a</span
    ><!-- 2
  --><span>b</span
    ><!-- 3
  --></span>
  ```

  Output:

  ```diff
    <span
  	  ><!-- 1
  - --> <span>a</span<!-- 2
  - --> ><span>b</span><!-- 3
  + --><span>a</span><!-- 2
  + --><span>b</span><!-- 3
    --></span
    >
  ```

- [#&#8203;10465](biomejs/biome#10465) [`0c718da`](biomejs/biome@0c718da) Thanks [@&#8203;dfedoryshchev](https://github.com/dfedoryshchev)! - Fixed diagnostics emitted by the `noUntrustedLicenses` rule.

- [#&#8203;10358](biomejs/biome#10358) [`05c2617`](biomejs/biome@05c2617) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10356](biomejs/biome#10356): `biome rage --linter` now displays rules enabled through linter domains in the enabled rules list.

- [#&#8203;10300](biomejs/biome#10300) [`950247c`](biomejs/biome@950247c) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10265](biomejs/biome#10265): Svelte function bindings such as `bind:value={get, set}` are now parsed more precisely, so [`noCommaOperator`](https://biomejs.dev/linter/rules/no-comma-operator/) won't emit false positives for that syntax anymore.

- [#&#8203;9786](biomejs/biome#9786) [`e71f584`](biomejs/biome@e71f584) Thanks [@&#8203;MeGaNeKoS](https://github.com/MeGaNeKoS)! - Fixed [#&#8203;8480](biomejs/biome#8480): [`useDestructuring`](https://biomejs.dev/linter/rules/use-destructuring/) now provides `variableDeclarator` and `assignmentExpression` options to control which contexts enforce destructuring, matching ESLint's `prefer-destructuring` configuration. Both default to `{array: true, object: true}`. The diagnostic for object destructuring in assignment expressions now instructs users to wrap the assignment in parentheses.

- [#&#8203;10425](biomejs/biome#10425) [`1948b72`](biomejs/biome@1948b72) Thanks [@&#8203;sjh9714](https://github.com/sjh9714)! - Fixed [#&#8203;10244](biomejs/biome#10244): The `useOptionalChain` rule now detects negated guard inequality chains like `!foo || foo.bar !== "x"`.

- [#&#8203;10442](biomejs/biome#10442) [`001f94f`](biomejs/biome@001f94f) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10411](biomejs/biome#10411): [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/) no longer causes a stack overflow when a nested function returns an object with shorthand properties that shadow destructured variables from an outer scope.

- [#&#8203;10318](biomejs/biome#10318) [`9b1577f`](biomejs/biome@9b1577f) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added support for `formatter.trailingCommas` in overrides. This option was previously available in the top-level formatter configuration but missing from formatter overrides.

- [#&#8203;10319](biomejs/biome#10319) [`2e37709`](biomejs/biome@2e37709) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed Vue and Svelte formatting for standalone interpolations in inline elements. Biome now preserves existing newlines in cases like:

  ```diff
  - <span> {{ value }} </span>
  + <span>
  +   {{ value }}
  + </span>
  ```

- [#&#8203;10365](biomejs/biome#10365) [`0a58eb0`](biomejs/biome@0a58eb0) Thanks [@&#8203;Netail](https://github.com/Netail)! - Fixed [#&#8203;10361](biomejs/biome#10361): [`noUnusedFunctionParameters`](https://biomejs.dev/linter/rules/no-unused-function-parameters/) now mentions the parameter name in the diagnostic.

- [#&#8203;10439](biomejs/biome#10439) [`df6b867`](biomejs/biome@df6b867) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS and SCSS formatting for comments around declaration colons so comments between property names, colons, and values stay at the same boundary as Prettier.

  ```diff
   .selector {
  -  color: /* red, */
  -    blue;
  +  color: /* red, */ blue;
   }
  ```

- [#&#8203;10344](biomejs/biome#10344) [`b30208c`](biomejs/biome@b30208c) Thanks [@&#8203;siketyan](https://github.com/siketyan)! - Fixed [`#10123`](biomejs/biome#10123): Corrected the [`noReactNativeDeepImports`](https://biomejs.dev/linter/rules/no-react-native-deep-imports/) source rule to point to the proper upstream rule, so users can migrate from the original rule correctly.

- [#&#8203;10328](biomejs/biome#10328) [`b59133f`](biomejs/biome@b59133f) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10309](biomejs/biome#10309): Biome no longer adds newlines to Astro frontmatter when linter or assist `--write` mode is enabled.

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xOTUuMiIsInVwZGF0ZWRJblZlciI6IjQzLjE5NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Reviewed-on: https://git.oirnoir.dev/OIRNOIR/YouTube-Helper-Server/pulls/13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-CLI Area: CLI A-Project Area: project

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Autofix (linter or assist) adds newlines in .astro

3 participants