fix(html_formatter): match prettier for svelte each as destructuring … - #10858
Conversation
…and bind get/set Fixes biomejs#10839 - SvelteSquareDestructuredName no longer adds spaces inside [] (matches Prettier expandNode) - SvelteBindFunctionBindingExpression now supports breaking with soft_block_indent - Updated snapshots for the new output - Added changeset
🦋 Changeset detectedLatest commit: fbb4e28 The changes in this PR will be included in the next version bump. This PR includes changesets to release 13 packages
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 |
✅ Organic activityNo automation signals detected in the analyzed events. This is an automated analysis by AgentScan |
WalkthroughUpdates Svelte HTML formatting for array destructuring in Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Merging this PR will not alter performance
Comparing Footnotes
|
ematipico
left a comment
There was a problem hiding this comment.
Can you please add tests that show that the softline break works as expected?
|
Actually, the fix isn't right now that I look at it. Prettier doesn't emit a softline. It just prints without space between brackets |
|
Thank you both for the fast reviews and detailed feedback! 🙏 |
Clean soft_block_indent for bind:prop={get, set} to match Prettier
layout (short stays inline; long breaks). Add issue biomejs#10839 regression
tests and update the changeset wording.
|
Thanks for the feedback, and apologies for leaving this without a proper follow-up. After reviewing the full reproduction and comparing the output with Prettier again, I agree that my description overstated what this PR currently fixes. The problem hasn't been resolved yet, and I'm working on it. |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 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.
Inline comments:
In
`@crates/biome_html_formatter/src/svelte/auxiliary/bind_function_binding_expression.rs`:
- Around line 30-37: Move set.format() into the existing indent block in the
binding expression formatter, alongside get.format(), comma_token.format(), and
the line-break elements. Preserve the current ordering so set remains formatted
after the separator while inheriting the nested indentation when the group
breaks.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: a350538b-1a60-432d-8346-2be1ed6c4075
⛔ Files ignored due to path filters (1)
crates/biome_html_formatter/tests/specs/html/svelte/issue_10839.svelte.snapis excluded by!**/*.snapand included by**
📒 Files selected for processing (3)
.changeset/fix-svelte-html-each-as-and-bind.mdcrates/biome_html_formatter/src/svelte/auxiliary/bind_function_binding_expression.rscrates/biome_html_formatter/tests/specs/html/svelte/issue_10839.svelte
🚧 Files skipped from review as they are similar to previous changes (1)
- .changeset/fix-svelte-html-each-as-and-bind.md
|
I’ve updated the PR with a smaller and cleaner implementation:
The previous indentation issue reported by CodeRabbit was also fixed, and the snapshot now reflects the expected output. Could you please take another look when possible? |
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.5.5` -> `2.5.6`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.5.5/2.5.6) | --- ### Release Notes <details> <summary>biomejs/biome (@​biomejs/biome)</summary> ### [`v2.5.6`](https://github.com/biomejs/biome/blob/HEAD/packages/@​biomejs/biome/CHANGELOG.md#256) [Compare Source](https://github.com/biomejs/biome/compare/@biomejs/biome@2.5.5...@biomejs/biome@2.5.6) ##### Patch Changes - [#​11035](biomejs/biome#11035) [`0e4b03b`](biomejs/biome@0e4b03b) Thanks [@​ematipico](https://github.com/ematipico)! - Fixed a performance regression in [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/) that caused type inference to run repeatedly while linting a file. - [#​11043](biomejs/biome#11043) [`22ec076`](biomejs/biome@22ec076) Thanks [@​denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatting for multiline function arguments preceded by comments: ```diff .example { value: outer( 1, /* comment */ nested( - first, - second - ) + first, + second + ) ); } ``` - [#​11007](biomejs/biome#11007) [`c9acb25`](biomejs/biome@c9acb25) Thanks [@​BTF-Kabir-2020](https://github.com/BTF-Kabir-2020)! - Fixed [#​9195](biomejs/biome#9195): [`useHookAtTopLevel`](https://biomejs.dev/linter/rules/use-hook-at-top-level/) no longer reports hooks in named `forwardRef` components that receive a `ref` parameter. - [#​10152](biomejs/biome#10152) [`50a9bd8`](biomejs/biome@50a9bd8) Thanks [@​Zelys-DFKH](https://github.com/Zelys-DFKH)! - Fixed [#​10131](biomejs/biome#10131): Biome now correctly parses curried arrow functions in ternary consequents when the inner arrow's parameters use a destructuring pattern, e.g. `cond ? (x) => ({ a, b }) => body : alt`. - [#​11105](biomejs/biome#11105) [`8ffe2b9`](biomejs/biome@8ffe2b9) Thanks [@​dadavidtseng](https://github.com/dadavidtseng)! - Fixed [#​11092](biomejs/biome#11092): The [`noUselessTernary`](https://biomejs.dev/linter/rules/no-useless-ternary/) quick fix now preserves operator spacing when simplifying or inverting boolean ternary expressions. - [#​10533](biomejs/biome#10533) [`5809875`](biomejs/biome@5809875) Thanks [@​Mokto](https://github.com/Mokto)! - Fixed [#​10515](biomejs/biome#10515): `biome check --write` was not idempotent on Svelte files — multi-line template literals in `<script>` blocks and block comments in `<style>` blocks gained an extra indent level on every run. - [#​11040](biomejs/biome#11040) [`0abb620`](biomejs/biome@0abb620) Thanks [@​Mokto](https://github.com/Mokto)! - Fixed an issue where the HTML formatter would duplicate a comment placed directly before a Svelte `{@​const ...}` or `{@​debug ...}` block. The duplication compounded on every subsequent `--write`, causing the file to grow exponentially. - [#​10858](biomejs/biome#10858) [`6d18204`](biomejs/biome@6d18204) Thanks [@​ruidosujeira](https://github.com/ruidosujeira)! - Fixed [#​10839](biomejs/biome#10839): Svelte `{#each}` array destructuring no longer includes spaces inside square brackets, and multiline bind function expressions now indent their getter, setter, and function body correctly. - [#​11009](biomejs/biome#11009) [`2c36626`](biomejs/biome@2c36626) Thanks [@​ematipico](https://github.com/ematipico)! - Improved the accuracy of type-aware lint rules by resolving more inferred types. For example, [`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/) now detects floating Promises returned by aliased callbacks and arrays of Promises created by async mapping callbacks. The following statements are now reported: ```ts type AsyncCallback = () => Promise<void>; declare const callback: AsyncCallback; callback(); [1, 2, 3].map(async (value) => value); ``` - [#​10973](biomejs/biome#10973) [`9cb044c`](biomejs/biome@9cb044c) Thanks [@​ematipico](https://github.com/ematipico)! - Fixed false positives in [`noMisleadingReturnType`](https://biomejs.dev/linter/rules/no-misleading-return-type/) when generic-constraint, normalization, substitution, or structural return-type comparison cannot complete. The rule now suppresses diagnostics rather than suggesting a return type derived from partial information. For example, this unresolved return type is no longer reported: ```ts function unresolvedReturnType(): MissingType { return "value" as const; } ``` - [#​11071](biomejs/biome#11071) [`15047a2`](biomejs/biome@15047a2) Thanks [@​dyc3](https://github.com/dyc3)! - The HTML parser now accepts mixed-case `doctype` declarations. - [#​11030](biomejs/biome#11030) [`cc90e65`](biomejs/biome@cc90e65) Thanks [@​marschattha](https://github.com/marschattha)! - The `rdjson` reporter now populates the [severity](https://github.com/reviewdog/reviewdog/blob/master/proto/rdf/reviewdog.proto) field of each diagnostic (`ERROR`, `WARNING`, or `INFO`), so tools consuming Reviewdog Diagnostic Format output no longer need to assume a default severity. - [#​11009](biomejs/biome#11009) [`2c36626`](biomejs/biome@2c36626) Thanks [@​ematipico](https://github.com/ematipico)! - Fixed a performance regression in type-aware JavaScript lint rules by inferring only requested types and memoizing export resolution. - [#​11056](biomejs/biome#11056) [`903b177`](biomejs/biome@903b177) Thanks [@​dyc3](https://github.com/dyc3)! - Added support for Svelte declaration tags using `let` and `const`. Biome can now parse, format, and lint bindings declared in these tags. - [#​11045](biomejs/biome#11045) [`89c27c6`](biomejs/biome@89c27c6) Thanks [@​ematipico](https://github.com/ematipico)! - Improved the performance of Biome formatter up to \~7% across the board. - [#​9806](biomejs/biome#9806) [`781d68d`](biomejs/biome@781d68d) Thanks [@​dyc3](https://github.com/dyc3)! - Added the nursery rule [`noJsRestrictedProperties`](https://biomejs.dev/linter/rules/no-js-restricted-properties/), which ports ESLint's `no-restricted-properties` rule. Biome now flags restricted member access and object destructuring, and `biome migrate eslint` preserves the rule's options. </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:eyJjcmVhdGVkSW5WZXIiOiI0My4yODQuMCIsInVwZGF0ZWRJblZlciI6IjQzLjI4NC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Reviewed-on: https://git.oirnoir.dev/OIRNOIR/YouTube-Helper-Server/pulls/33
This PR contains the following updates: | Package | Type | Update | Change | Pending | |---|---|---|---|---| | [@biomejs/biome](https://biomejs.dev) ([source](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome)) | imports | patch | [`2.5.5` -> `2.5.6`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.5.5/2.5.6) | `2.5.7` | --- ### Release Notes <details> <summary>biomejs/biome (@​biomejs/biome)</summary> ### [`v2.5.6`](https://github.com/biomejs/biome/blob/HEAD/packages/@​biomejs/biome/CHANGELOG.md#256) [Compare Source](https://github.com/biomejs/biome/compare/@biomejs/biome@2.5.5...@biomejs/biome@2.5.6) ##### Patch Changes - [#​11035](biomejs/biome#11035) [`0e4b03b`](biomejs/biome@0e4b03b) Thanks [@​ematipico](https://github.com/ematipico)! - Fixed a performance regression in [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/) that caused type inference to run repeatedly while linting a file. - [#​11043](biomejs/biome#11043) [`22ec076`](biomejs/biome@22ec076) Thanks [@​denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatting for multiline function arguments preceded by comments: ```diff .example { value: outer( 1, /* comment */ nested( - first, - second - ) + first, + second + ) ); } ``` - [#​11007](biomejs/biome#11007) [`c9acb25`](biomejs/biome@c9acb25) Thanks [@​BTF-Kabir-2020](https://github.com/BTF-Kabir-2020)! - Fixed [#​9195](biomejs/biome#9195): [`useHookAtTopLevel`](https://biomejs.dev/linter/rules/use-hook-at-top-level/) no longer reports hooks in named `forwardRef` components that receive a `ref` parameter. - [#​10152](biomejs/biome#10152) [`50a9bd8`](biomejs/biome@50a9bd8) Thanks [@​Zelys-DFKH](https://github.com/Zelys-DFKH)! - Fixed [#​10131](biomejs/biome#10131): Biome now correctly parses curried arrow functions in ternary consequents when the inner arrow's parameters use a destructuring pattern, e.g. `cond ? (x) => ({ a, b }) => body : alt`. - [#​11105](biomejs/biome#11105) [`8ffe2b9`](biomejs/biome@8ffe2b9) Thanks [@​dadavidtseng](https://github.com/dadavidtseng)! - Fixed [#​11092](biomejs/biome#11092): The [`noUselessTernary`](https://biomejs.dev/linter/rules/no-useless-ternary/) quick fix now preserves operator spacing when simplifying or inverting boolean ternary expressions. - [#​10533](biomejs/biome#10533) [`5809875`](biomejs/biome@5809875) Thanks [@​Mokto](https://github.com/Mokto)! - Fixed [#​10515](biomejs/biome#10515): `biome check --write` was not idempotent on Svelte files — multi-line template literals in `<script>` blocks and block comments in `<style>` blocks gained an extra indent level on every run. - [#​11040](biomejs/biome#11040) [`0abb620`](biomejs/biome@0abb620) Thanks [@​Mokto](https://github.com/Mokto)! - Fixed an issue where the HTML formatter would duplicate a comment placed directly before a Svelte `{@​const ...}` or `{@​debug ...}` block. The duplication compounded on every subsequent `--write`, causing the file to grow exponentially. - [#​10858](biomejs/biome#10858) [`6d18204`](biomejs/biome@6d18204) Thanks [@​ruidosujeira](https://github.com/ruidosujeira)! - Fixed [#​10839](biomejs/biome#10839): Svelte `{#each}` array destructuring no longer includes spaces inside square brackets, and multiline bind function expressions now indent their getter, setter, and function body correctly. - [#​11009](biomejs/biome#11009) [`2c36626`](biomejs/biome@2c36626) Thanks [@​ematipico](https://github.com/ematipico)! - Improved the accuracy of type-aware lint rules by resolving more inferred types. For example, [`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/) now detects floating Promises returned by aliased callbacks and arrays of Promises created by async mapping callbacks. The following statements are now reported: ```ts type AsyncCallback = () => Promise<void>; declare const callback: AsyncCallback; callback(); [1, 2, 3].map(async (value) => value); ``` - [#​10973](biomejs/biome#10973) [`9cb044c`](biomejs/biome@9cb044c) Thanks [@​ematipico](https://github.com/ematipico)! - Fixed false positives in [`noMisleadingReturnType`](https://biomejs.dev/linter/rules/no-misleading-return-type/) when generic-constraint, normalization, substitution, or structural return-type comparison cannot complete. The rule now suppresses diagnostics rather than suggesting a return type derived from partial information. For example, this unresolved return type is no longer reported: ```ts function unresolvedReturnType(): MissingType { return "value" as const; } ``` - [#​11071](biomejs/biome#11071) [`15047a2`](biomejs/biome@15047a2) Thanks [@​dyc3](https://github.com/dyc3)! - The HTML parser now accepts mixed-case `doctype` declarations. - [#​11030](biomejs/biome#11030) [`cc90e65`](biomejs/biome@cc90e65) Thanks [@​marschattha](https://github.com/marschattha)! - The `rdjson` reporter now populates the [severity](https://github.com/reviewdog/reviewdog/blob/master/proto/rdf/reviewdog.proto) field of each diagnostic (`ERROR`, `WARNING`, or `INFO`), so tools consuming Reviewdog Diagnostic Format output no longer need to assume a default severity. - [#​11009](biomejs/biome#11009) [`2c36626`](biomejs/biome@2c36626) Thanks [@​ematipico](https://github.com/ematipico)! - Fixed a performance regression in type-aware JavaScript lint rules by inferring only requested types and memoizing export resolution. - [#​11056](biomejs/biome#11056) [`903b177`](biomejs/biome@903b177) Thanks [@​dyc3](https://github.com/dyc3)! - Added support for Svelte declaration tags using `let` and `const`. Biome can now parse, format, and lint bindings declared in these tags. - [#​11045](biomejs/biome#11045) [`89c27c6`](biomejs/biome@89c27c6) Thanks [@​ematipico](https://github.com/ematipico)! - Improved the performance of Biome formatter up to \~7% across the board. - [#​9806](biomejs/biome#9806) [`781d68d`](biomejs/biome@781d68d) Thanks [@​dyc3](https://github.com/dyc3)! - Added the nursery rule [`noJsRestrictedProperties`](https://biomejs.dev/linter/rules/no-js-restricted-properties/), which ports ESLint's `no-restricted-properties` rule. Biome now flags restricted member access and object destructuring, and `biome migrate eslint` preserves the rule's options. </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:eyJjcmVhdGVkSW5WZXIiOiI0My4yODQuMCIsInVwZGF0ZWRJblZlciI6IjQzLjI4NC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Reviewed-on: https://git.oirnoir.dev/OIRNOIR/YouTube-Helper-Client/pulls/15
Summary
This PR fixes two formatting inconsistencies between Biome's Svelte/HTML formatter and Prettier, as reported in #10839.
Closed #10839
Changes
Array destructuring in {#each} blocks
Removed unnecessary spaces inside square brackets when using array destructuring.svelte.
These changes make Biome's output match Prettier's behavior for the reported cases.
Changeset: fix-svelte-html-each-as-and-bind.md (patch)
Test Plan
All existing Svelte snapshot tests are passing:
cargo test -p biome_html_formatter --test spec_tests -- svelteRan just f to verify formatting consistency.
cargo clippy -p biome_html_formatter -- -D warnings (clean).Updated snapshots:
each_with_destructuring.svelte.snap
each_with_rename_binding.svelte.snap
Docs
No documentation changes needed (formatter behavior only).