Skip to content

fix(parse/html): stop reading {{ as an interpolation in Svelte - #11195

Merged
dyc3 merged 4 commits into
mainfrom
dyc3/svelte-double-curly
Aug 7, 2026
Merged

fix(parse/html): stop reading {{ as an interpolation in Svelte#11195
dyc3 merged 4 commits into
mainfrom
dyc3/svelte-double-curly

Conversation

@dyc3

@dyc3 dyc3 commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes the parsing of {{ in svelte files. It's a bit of a larger refactor than I'd like, but it makes the most sense to me.

implemented by opus 5 initially, gpt 5.6 sol fixed it up

Test Plan

snapshots

Docs


Stack created with GitHub Stacks CLIGive Feedback 💬

@changeset-bot

changeset-bot Bot commented Aug 2, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 6395bae

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 commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

✅ Organic activity

No automation signals detected in the analyzed events.

View full analysis →

This is an automated analysis by AgentScan

@github-actions github-actions Bot added A-Parser Area: parser A-Formatter Area: formatter L-HTML Language: HTML and super languages labels Aug 2, 2026
@dyc3
dyc3 marked this pull request as draft August 2, 2026 22:36
@dyc3
dyc3 force-pushed the dyc3/svelte-double-curly branch from c2ecb25 to 9233ee9 Compare August 3, 2026 12:57
@dyc3
dyc3 marked this pull request as ready for review August 3, 2026 16:53
@dyc3
dyc3 force-pushed the dyc3/svelte-double-curly branch from 9233ee9 to 016da58 Compare August 3, 2026 20:21
@dyc3
dyc3 force-pushed the dyc3/svelte-double-curly branch from 016da58 to 5393bde Compare August 3, 2026 20:32
@codspeed-hq

codspeed-hq Bot commented Aug 3, 2026

Copy link
Copy Markdown

Merging this PR will improve performance by 6.44%

⚡ 3 improved benchmarks
✅ 64 untouched benchmarks
⏩ 219 skipped benchmarks1

Performance Changes

Benchmark BASE HEAD Efficiency
synthetic/vue-expressions.vue[cached] 387.9 µs 361.3 µs +7.36%
synthetic/vue-expressions.vue[uncached] 433 µs 406.5 µs +6.52%
synthetic/svelte-expressions.svelte[cached] 477.1 µs 452.5 µs +5.44%

Tip

Curious why this is faster? Comment @codspeedbot explain why this is faster on this PR, or directly use the CodSpeed MCP with your agent.


Comparing dyc3/svelte-double-curly (6395bae) with main (6556ca3)

Open in CodSpeed

Footnotes

  1. 219 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@ematipico ematipico left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Left some comment to address

Comment thread .changeset/fix-svelte-double-curly.md Outdated
Comment thread crates/biome_html_parser/src/parser.rs
Base automatically changed from dyc3/svelte-array-pattern-hole to main August 4, 2026 12:07
dyc3 and others added 2 commits August 4, 2026 13:07
Svelte has no `{{ }}` syntax: there the outer brace opens an expression
and the inner one opens an object literal, so `{{ a: true }}` is one
expression. The lexer read it as Vue's interpolation opener, which is not
enabled for Svelte, so the file failed to parse and was left unformatted.

Other languages keep the old lexing, including plain HTML, where reading
`{{` as one token gives better recovery for a Django or Jinja template.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0145puNWau9K2vPUdEtFHVUK
@dyc3
dyc3 force-pushed the dyc3/svelte-double-curly branch from 5393bde to 408ad70 Compare August 4, 2026 17:08
@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 03d7d804-8e8a-48f1-b39a-565a4ab18a76

📥 Commits

Reviewing files that changed from the base of the PR and between 408ad70 and 6395bae.

⛔ Files ignored due to path filters (2)
  • crates/biome_html_formatter/tests/specs/html/svelte/double_curly.svelte.snap is excluded by !**/*.snap and included by **
  • crates/biome_html_parser/tests/html_specs/ok/svelte/double_curly.svelte.snap is excluded by !**/*.snap and included by **
📒 Files selected for processing (4)
  • crates/biome_html_formatter/tests/specs/html/svelte/double_curly.svelte
  • crates/biome_html_parser/src/syntax/mod.rs
  • crates/biome_html_parser/src/syntax/svelte.rs
  • crates/biome_html_parser/tests/html_specs/ok/svelte/double_curly.svelte
🚧 Files skipped from review as they are similar to previous changes (4)
  • crates/biome_html_formatter/tests/specs/html/svelte/double_curly.svelte
  • crates/biome_html_parser/src/syntax/svelte.rs
  • crates/biome_html_parser/src/syntax/mod.rs
  • crates/biome_html_parser/tests/html_specs/ok/svelte/double_curly.svelte

Walkthrough

The HTML parser now derives HtmlFramework from parser options and carries it through lexer contexts and re-lexing. Double-curly recognition is enabled for non-Svelte frameworks and disabled in Svelte-specific paths. HTML and Svelte parsing now use framework-aware contexts for expressions, literals, delimiters, and blocks. Lexer, parser, formatter, and Svelte fixtures cover the updated behaviour. A patch changeset documents the fix.

Possibly related PRs

  • biomejs/biome#10665: Updates framework-aware HtmlLexContext handling in related HTML lexer and parser paths.
  • biomejs/biome#10275: Changes Svelte text-expression boundary handling in the lexer and syntax parser.
  • biomejs/biome#11056: Updates Svelte handling of {...} expressions through related context-sensitive parsing paths.

Suggested reviewers: ematipico

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main change: preventing Svelte parsing from treating {{ as interpolation.
Description check ✅ Passed The description explains the Svelte parsing fix and mentions the parser refactor and snapshot tests.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dyc3/svelte-double-curly

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

@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.

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_parser/src/token_source.rs`:
- Around line 348-353: Update the token-advancing methods around
bump_with_context and skip_as_trivia so they preserve the active Svelte
framework instead of constructing HtmlLexContext::default(). Reuse the current
framework when creating the context, and ensure parse_html_element fallbacks and
Svelte paths continue lexing {{ as two L_CURLY tokens.
🪄 Autofix

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: 7b7b80cd-9829-449a-abbe-28180b708248

📥 Commits

Reviewing files that changed from the base of the PR and between 6556ca3 and 408ad70.

⛔ Files ignored due to path filters (3)
  • crates/biome_html_formatter/tests/specs/html/svelte/double_curly.svelte.snap is excluded by !**/*.snap and included by **
  • crates/biome_html_formatter/tests/specs/svelte-plugin/formatting/pre-mustache.svelte.snap is excluded by !**/*.snap and included by **
  • crates/biome_html_parser/tests/html_specs/ok/svelte/double_curly.svelte.snap is excluded by !**/*.snap and included by **
📒 Files selected for processing (9)
  • .changeset/fix-svelte-double-curly.md
  • crates/biome_html_formatter/tests/specs/html/svelte/double_curly.svelte
  • crates/biome_html_parser/src/lexer/mod.rs
  • crates/biome_html_parser/src/lexer/tests.rs
  • crates/biome_html_parser/src/parser.rs
  • crates/biome_html_parser/src/syntax/mod.rs
  • crates/biome_html_parser/src/syntax/svelte.rs
  • crates/biome_html_parser/src/token_source.rs
  • crates/biome_html_parser/tests/html_specs/ok/svelte/double_curly.svelte

Comment on lines +348 to 353
self.bump_with_context(HtmlLexContext::default())
}

fn skip_as_trivia(&mut self) {
self.skip_as_trivia_with_context(HtmlLexContext::Regular)
self.skip_as_trivia_with_context(HtmlLexContext::default())
}

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.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n -C 4 \
  '\bp\.(bump|bump_any|bump_remap|skip_as_trivia)\b' \
  crates/biome_html_parser/src/syntax/mod.rs \
  crates/biome_html_parser/src/syntax/svelte.rs

rg -n -C 5 \
  'fn (bump_remap|bump_any|skip_as_trivia)\b' \
  crates --glob '*.rs'

Repository: biomejs/biome

Length of output: 16409


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- HTML token source structure ---'
ast-grep outline crates/biome_html_parser/src/token_source.rs --match 'struct HtmlTokenSource' --view expanded
ast-grep outline crates/biome_html_parser/src/token_source.rs --match 'impl TokenSource for HtmlTokenSource' --view expanded
printf '%s\n' '--- HTML token source implementation ---'
sed -n '1,390p' crates/biome_html_parser/src/token_source.rs

printf '%s\n' '--- parser bump implementation ---'
sed -n '250,350p' crates/biome_parser/src/lib.rs

printf '%s\n' '--- HTML context definitions and calls ---'
rg -n -C 6 'enum HtmlLexContext|struct HtmlLexContext|impl Default for HtmlLexContext|fn bump_with_context|fn re_lex|regular_context|HtmlReLexContext' \
  crates/biome_html_parser crates/biome_parser --glob '*.rs'

Repository: biomejs/biome

Length of output: 50369


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- parser do_bump paths ---'
sed -n '340,390p' crates/biome_parser/src/lib.rs

printf '%s\n' '--- lexer context-sensitive text handling ---'
rg -n -C 12 'fn consume_html_text|L_DOUBLE_CURLY|framework != HtmlFramework::Svelte|HtmlFramework::Svelte' \
  crates/biome_html_parser/src/lexer/mod.rs

printf '%s\n' '--- all HTML parser default bump calls ---'
rg -n -C 3 '\bp\.(bump|bump_any|bump_remap|skip_as_trivia)\b' \
  crates/biome_html_parser/src --glob '*.rs'

printf '%s\n' '--- Svelte parser context transitions ---'
sed -n '285,370p' crates/biome_html_parser/src/syntax/svelte.rs
sed -n '1160,1220p' crates/biome_html_parser/src/syntax/mod.rs

Repository: biomejs/biome

Length of output: 16362


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- framework selection ---'
sed -n '150,225p' crates/biome_html_parser/src/syntax/mod.rs
rg -n -C 5 'HtmlFileSource|HtmlVariant|HtmlFramework::Svelte|initial_context|from_str\(' \
  crates/biome_html_parser/src/parser.rs crates/biome_html_parser/src --glob '*.rs'

printf '%s\n' '--- default-bump call-site bodies ---'
sed -n '500,575p' crates/biome_html_parser/src/syntax/mod.rs
sed -n '1145,1220p' crates/biome_html_parser/src/syntax/mod.rs
sed -n '470,535p' crates/biome_html_parser/src/syntax/svelte.rs
sed -n '750,805p' crates/biome_html_parser/src/syntax/svelte.rs

printf '%s\n' '--- relevant lexer branches and tests ---'
sed -n '1550,1595p' crates/biome_html_parser/src/lexer/mod.rs
sed -n '395,425p' crates/biome_html_parser/src/lexer/tests.rs
rg -n -C 3 'bump_remap_with_context|bump_any_with_context|skip_as_trivia_with_context|expect_with_context' \
  crates/biome_html_parser/src --glob '*.rs'

Repository: biomejs/biome

Length of output: 50369


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- Svelte declaration/expression fallback ---'
rg -n -C 8 'fn parse_svelte_declaration_or_expression|parse_svelte_declaration_or_expression' \
  crates/biome_html_parser/src/syntax --glob '*.rs'

printf '%s\n' '--- exact default calls in Svelte-specific code ---'
rg -n -C 2 '\bp\.(bump|bump_any|bump_remap|skip_as_trivia)\b' \
  crates/biome_html_parser/src/syntax/svelte.rs

printf '%s\n' '--- exact default calls in shared HTML parsing ---'
rg -n -C 2 '\bp\.(bump|bump_any|bump_remap|skip_as_trivia)\b' \
  crates/biome_html_parser/src/syntax/mod.rs

printf '%s\n' '--- read-only source invariant probe ---'
python3 - <<'PY'
from pathlib import Path

token_source = Path("crates/biome_html_parser/src/token_source.rs").read_text()
lexer = Path("crates/biome_html_parser/src/lexer/mod.rs").read_text()
svelte = Path("crates/biome_html_parser/src/syntax/svelte.rs").read_text()
syntax = Path("crates/biome_html_parser/src/syntax/mod.rs").read_text()

assert "fn bump(&mut self) {\n        self.bump_with_context(HtmlLexContext::default())" in token_source
assert "fn skip_as_trivia(&mut self) {\n        self.skip_as_trivia_with_context(HtmlLexContext::default())" in token_source
assert "self.consume_token(current, framework != HtmlFramework::Svelte)" in lexer
assert "HtmlLexContext::Regular { framework: HtmlFramework::Svelte }" in Path(
    "crates/biome_html_parser/src/lexer/tests.rs"
).read_text()

for name, source in [("svelte.rs", svelte), ("mod.rs", syntax)]:
    calls = []
    for method in ("bump", "bump_any", "bump_remap", "skip_as_trivia"):
        calls.extend((i + 1, method) for i, line in enumerate(source.splitlines())
                     if f"p.{method}(" in line and f"p.{method}_with_context(" not in line)
    print(name, sorted(calls))

print("source invariant: default TokenSource bumps use HtmlLexContext::default()")
print("source invariant: HtmlLexContext::default() is Regular/Plain")
print("source invariant: Regular/Svelte disables double-curly lexing")
print("source invariant: Svelte-specific code contains default bump calls")
PY

Repository: biomejs/biome

Length of output: 7057


Preserve the Svelte framework when advancing tokens.

Default token advances use Regular { framework: Plain }. The Svelte paths and parse_html_element fallbacks therefore can lex a following {{ as L_DOUBLE_CURLY instead of two L_CURLY tokens. Store the active framework or replace these calls with the appropriate *_with_context variant.

🤖 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_html_parser/src/token_source.rs` around lines 348 - 353, Update
the token-advancing methods around bump_with_context and skip_as_trivia so they
preserve the active Svelte framework instead of constructing
HtmlLexContext::default(). Reuse the current framework when creating the
context, and ensure parse_html_element fallbacks and Svelte paths continue
lexing {{ as two L_CURLY tokens.

@dyc3
dyc3 marked this pull request as draft August 4, 2026 19:02
Comment on lines +29 to +32
<p>{{ a: true }}</p>
<p>{JSON.stringify( { foo: "bar" } )}</p>
<div class={{ active: isActive }}></div>

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@dyc3
dyc3 marked this pull request as ready for review August 5, 2026 18:23
@dyc3
dyc3 requested a review from ematipico August 5, 2026 18:54
@dyc3
dyc3 merged commit 6a85588 into main Aug 7, 2026
32 checks passed
@dyc3
dyc3 deleted the dyc3/svelte-double-curly branch August 7, 2026 09:04
@github-actions github-actions Bot mentioned this pull request Aug 7, 2026
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Client that referenced this pull request Aug 18, 2026
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.7` -> `2.5.8`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.5.7/2.5.8) | `2.5.9` |

---

### Release Notes

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

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

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

##### Patch Changes

- [#&#8203;10710](biomejs/biome#10710) [`0a0fbc1`](biomejs/biome@0a0fbc1) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added a new nursery rule [`useReactCompiler`](https://biomejs.dev/linter/rules/use-react-compiler/), which reports diagnostics from React Compiler lint mode.

- [#&#8203;11251](biomejs/biome#11251) [`ea9dd8a`](biomejs/biome@ea9dd8a) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved performance of [`noImportCycles`](https://biomejs.dev/linter/rules/no-import-cycles/).

- [#&#8203;11247](biomejs/biome#11247) [`52b44d6`](biomejs/biome@52b44d6) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noSvelteLegacyConst`](https://biomejs.dev/linter/rules/no-svelte-legacy-const/), which disallows legacy Svelte `{@const}` tags and recommends declaration tags with `$derived()`.

  Invalid:

  ```svelte
  {#each boxes as box}
    {@const area = box.width * box.height}
    <p>{area}</p>
  {/each}
  ```

  Valid:

  ```svelte
  {#each boxes as box}
    {const area = $derived(box.width * box.height)}
    <p>{area}</p>
  {/each}
  ```

- [#&#8203;11252](biomejs/biome#11252) [`d5f5704`](biomejs/biome@d5f5704) Thanks [@&#8203;Turtle-Hwan](https://github.com/Turtle-Hwan)! - Fixed [#&#8203;11250](biomejs/biome#11250): [`useAwait`](https://biomejs.dev/linter/rules/use-await/) no longer reports async functions that contain an `await using` declaration.

- [#&#8203;11143](biomejs/biome#11143) [`6be7be1`](biomejs/biome@6be7be1) Thanks [@&#8203;vznh](https://github.com/vznh)! - Fixed [#&#8203;11017](biomejs/biome#11017): [`noUselessUndefined`](https://biomejs.dev/linter/rules/no-useless-undefined/) no longer reports `return undefined` when the enclosing function has a return type annotation other than `undefined` or `void`.

- [#&#8203;11234](biomejs/biome#11234) [`caefe39`](biomejs/biome@caefe39) Thanks [@&#8203;subotac](https://github.com/subotac)! - Fixed [#&#8203;11228](biomejs/biome#11228): CSS block comments between a declaration colon and value now preserve their source indentation.

  ```diff
   :root {
     --font-stack:
  -/* comment */
  +    /* comment */
       system-ui;
   }
  ```

- [#&#8203;11285](biomejs/biome#11285) [`bca1f73`](biomejs/biome@bca1f73) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed [#&#8203;11280](biomejs/biome#11280): CSS formatting keeps comments inside functional pseudo-classes and pseudo-elements instead of moving them before the function name.

  ```diff
  -:/* comment */ where(div) {}
  +:where(/* comment */ div) {}
  ```

- [#&#8203;11080](biomejs/biome#11080) [`af16a0b`](biomejs/biome@af16a0b) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - HTML `style` attribute values are now parsed as CSS. All Biome CSS lint rules are applied to the `style` attributes.

- [#&#8203;11195](biomejs/biome#11195) [`6a85588`](biomejs/biome@6a85588) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed Svelte files failing to parse when an expression begins with an object literal.

  Now the following snippet is correctly parsed:

  ```svelte
  <p>{{ a: true }}</p>
  <div class={{ active: isActive }}></div>
  ```

- [#&#8203;11173](biomejs/biome#11173) [`481d008`](biomejs/biome@481d008) Thanks [@&#8203;Austin1serb](https://github.com/Austin1serb)! - Fixed [#&#8203;10242](biomejs/biome#10242): JavaScript GritQL patterns with multiple metavariables now match snippets consistently in WebAssembly.

- [#&#8203;11187](biomejs/biome#11187) [`23c0369`](biomejs/biome@23c0369) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Added the nursery rule [`noInvalidPropertyInitValue`](https://biomejs.dev/linter/rules/no-invalid-property-init-value/), which reports an `@property` whose `initial-value` does not match its `syntax` descriptor. For example, the following declaration triggers the rule because `red` is not a `<length>`:

  ```css
  @Property --size {
    syntax: "<length>";
    inherits: false;
    initial-value: red;
  }
  ```

- [#&#8203;11272](biomejs/biome#11272) [`73896e6`](biomejs/biome@73896e6) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Improved the diagnostic emitted by [`noRootType`](https://biomejs.dev/linter/rules/no-root-type).

- [#&#8203;11240](biomejs/biome#11240) [`bd0b68d`](biomejs/biome@bd0b68d) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;11223](biomejs/biome#11223): Improved the
  performance of [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/)
  when analyzing async class methods that call other methods through `this`.

- [#&#8203;11172](biomejs/biome#11172) [`4a0bc5c`](biomejs/biome@4a0bc5c) Thanks [@&#8203;saberoueslati](https://github.com/saberoueslati)! - Fixed [#&#8203;10806](biomejs/biome#10806): [`noUselessFragments`](https://biomejs.dev/linter/rules/no-useless-fragments/) no longer causes Biome to panic when its unsafe fix removes a fragment used as a JSX attribute value.

- [#&#8203;11227](biomejs/biome#11227) [`4d603b0`](biomejs/biome@4d603b0) Thanks [@&#8203;saberoueslati](https://github.com/saberoueslati)! - Fixed [#&#8203;11178](biomejs/biome#11178): [`noUndeclaredVariables`](https://biomejs.dev/linter/rules/no-undeclared-variables/) no longer reports Vue's built-in instance properties, such as `$slots` and `$attrs`, in template expressions or `$event` in inline event-handler expressions. The instance properties are still reported inside `<script setup>`, where they are not defined.

- [#&#8203;11187](biomejs/biome#11187) [`23c0369`](biomejs/biome@23c0369) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed CSS parsing of registered custom properties: Biome now correctly validates the `syntax` descriptor of `@property` rules.

</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 CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4zMC4zIiwidXBkYXRlZEluVmVyIjoiNDQuMzAuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Reviewed-on: https://git.oirnoir.dev/OIRNOIR/YouTube-Helper-Client/pulls/17
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Server that referenced this pull request Aug 18, 2026
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.7` -> `2.5.8`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.5.7/2.5.8) | `2.5.9` |

---

### Release Notes

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

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

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

##### Patch Changes

- [#&#8203;10710](biomejs/biome#10710) [`0a0fbc1`](biomejs/biome@0a0fbc1) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added a new nursery rule [`useReactCompiler`](https://biomejs.dev/linter/rules/use-react-compiler/), which reports diagnostics from React Compiler lint mode.

- [#&#8203;11251](biomejs/biome#11251) [`ea9dd8a`](biomejs/biome@ea9dd8a) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved performance of [`noImportCycles`](https://biomejs.dev/linter/rules/no-import-cycles/).

- [#&#8203;11247](biomejs/biome#11247) [`52b44d6`](biomejs/biome@52b44d6) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noSvelteLegacyConst`](https://biomejs.dev/linter/rules/no-svelte-legacy-const/), which disallows legacy Svelte `{@const}` tags and recommends declaration tags with `$derived()`.

  Invalid:

  ```svelte
  {#each boxes as box}
    {@const area = box.width * box.height}
    <p>{area}</p>
  {/each}
  ```

  Valid:

  ```svelte
  {#each boxes as box}
    {const area = $derived(box.width * box.height)}
    <p>{area}</p>
  {/each}
  ```

- [#&#8203;11252](biomejs/biome#11252) [`d5f5704`](biomejs/biome@d5f5704) Thanks [@&#8203;Turtle-Hwan](https://github.com/Turtle-Hwan)! - Fixed [#&#8203;11250](biomejs/biome#11250): [`useAwait`](https://biomejs.dev/linter/rules/use-await/) no longer reports async functions that contain an `await using` declaration.

- [#&#8203;11143](biomejs/biome#11143) [`6be7be1`](biomejs/biome@6be7be1) Thanks [@&#8203;vznh](https://github.com/vznh)! - Fixed [#&#8203;11017](biomejs/biome#11017): [`noUselessUndefined`](https://biomejs.dev/linter/rules/no-useless-undefined/) no longer reports `return undefined` when the enclosing function has a return type annotation other than `undefined` or `void`.

- [#&#8203;11234](biomejs/biome#11234) [`caefe39`](biomejs/biome@caefe39) Thanks [@&#8203;subotac](https://github.com/subotac)! - Fixed [#&#8203;11228](biomejs/biome#11228): CSS block comments between a declaration colon and value now preserve their source indentation.

  ```diff
   :root {
     --font-stack:
  -/* comment */
  +    /* comment */
       system-ui;
   }
  ```

- [#&#8203;11285](biomejs/biome#11285) [`bca1f73`](biomejs/biome@bca1f73) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed [#&#8203;11280](biomejs/biome#11280): CSS formatting keeps comments inside functional pseudo-classes and pseudo-elements instead of moving them before the function name.

  ```diff
  -:/* comment */ where(div) {}
  +:where(/* comment */ div) {}
  ```

- [#&#8203;11080](biomejs/biome#11080) [`af16a0b`](biomejs/biome@af16a0b) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - HTML `style` attribute values are now parsed as CSS. All Biome CSS lint rules are applied to the `style` attributes.

- [#&#8203;11195](biomejs/biome#11195) [`6a85588`](biomejs/biome@6a85588) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed Svelte files failing to parse when an expression begins with an object literal.

  Now the following snippet is correctly parsed:

  ```svelte
  <p>{{ a: true }}</p>
  <div class={{ active: isActive }}></div>
  ```

- [#&#8203;11173](biomejs/biome#11173) [`481d008`](biomejs/biome@481d008) Thanks [@&#8203;Austin1serb](https://github.com/Austin1serb)! - Fixed [#&#8203;10242](biomejs/biome#10242): JavaScript GritQL patterns with multiple metavariables now match snippets consistently in WebAssembly.

- [#&#8203;11187](biomejs/biome#11187) [`23c0369`](biomejs/biome@23c0369) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Added the nursery rule [`noInvalidPropertyInitValue`](https://biomejs.dev/linter/rules/no-invalid-property-init-value/), which reports an `@property` whose `initial-value` does not match its `syntax` descriptor. For example, the following declaration triggers the rule because `red` is not a `<length>`:

  ```css
  @Property --size {
    syntax: "<length>";
    inherits: false;
    initial-value: red;
  }
  ```

- [#&#8203;11272](biomejs/biome#11272) [`73896e6`](biomejs/biome@73896e6) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Improved the diagnostic emitted by [`noRootType`](https://biomejs.dev/linter/rules/no-root-type).

- [#&#8203;11240](biomejs/biome#11240) [`bd0b68d`](biomejs/biome@bd0b68d) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;11223](biomejs/biome#11223): Improved the
  performance of [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/)
  when analyzing async class methods that call other methods through `this`.

- [#&#8203;11172](biomejs/biome#11172) [`4a0bc5c`](biomejs/biome@4a0bc5c) Thanks [@&#8203;saberoueslati](https://github.com/saberoueslati)! - Fixed [#&#8203;10806](biomejs/biome#10806): [`noUselessFragments`](https://biomejs.dev/linter/rules/no-useless-fragments/) no longer causes Biome to panic when its unsafe fix removes a fragment used as a JSX attribute value.

- [#&#8203;11227](biomejs/biome#11227) [`4d603b0`](biomejs/biome@4d603b0) Thanks [@&#8203;saberoueslati](https://github.com/saberoueslati)! - Fixed [#&#8203;11178](biomejs/biome#11178): [`noUndeclaredVariables`](https://biomejs.dev/linter/rules/no-undeclared-variables/) no longer reports Vue's built-in instance properties, such as `$slots` and `$attrs`, in template expressions or `$event` in inline event-handler expressions. The instance properties are still reported inside `<script setup>`, where they are not defined.

- [#&#8203;11187](biomejs/biome#11187) [`23c0369`](biomejs/biome@23c0369) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed CSS parsing of registered custom properties: Biome now correctly validates the `syntax` descriptor of `@property` rules.

</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 CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4zMC4zIiwidXBkYXRlZEluVmVyIjoiNDQuMzAuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

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

Labels

A-Formatter Area: formatter A-Parser Area: parser L-HTML Language: HTML and super languages

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants