fix(parse/html): stop reading {{ as an interpolation in Svelte - #11195
Conversation
🦋 Changeset detectedLatest commit: 6395bae 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 |
c2ecb25 to
9233ee9
Compare
9233ee9 to
016da58
Compare
016da58 to
5393bde
Compare
Merging this PR will improve performance by 6.44%
Performance Changes
Tip Curious why this is faster? Comment Comparing Footnotes
|
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
5393bde to
408ad70
Compare
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (4)
🚧 Files skipped from review as they are similar to previous changes (4)
WalkthroughThe HTML parser now derives Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
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_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
⛔ Files ignored due to path filters (3)
crates/biome_html_formatter/tests/specs/html/svelte/double_curly.svelte.snapis excluded by!**/*.snapand included by**crates/biome_html_formatter/tests/specs/svelte-plugin/formatting/pre-mustache.svelte.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/svelte/double_curly.svelte.snapis excluded by!**/*.snapand included by**
📒 Files selected for processing (9)
.changeset/fix-svelte-double-curly.mdcrates/biome_html_formatter/tests/specs/html/svelte/double_curly.sveltecrates/biome_html_parser/src/lexer/mod.rscrates/biome_html_parser/src/lexer/tests.rscrates/biome_html_parser/src/parser.rscrates/biome_html_parser/src/syntax/mod.rscrates/biome_html_parser/src/syntax/svelte.rscrates/biome_html_parser/src/token_source.rscrates/biome_html_parser/tests/html_specs/ok/svelte/double_curly.svelte
| 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()) | ||
| } |
There was a problem hiding this comment.
🎯 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.rsRepository: 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")
PYRepository: 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.
| <p>{{ a: true }}</p> | ||
| <p>{JSON.stringify( { foo: "bar" } )}</p> | ||
| <div class={{ active: isActive }}></div> | ||
|
|
There was a problem hiding this comment.
formatting these inner expressions is not actually implemented yet: https://biomejs.dev/playground/?tab=formatter&pane=Diagnostics&code=ewAgAGMAbwBuAHMAbwBsAGUALgBsAG8AZwAoACAAIAAgACIAIgAgACAAKQB9AA%3D%3D&language=svelte
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 (@​biomejs/biome)</summary> ### [`v2.5.8`](https://github.com/biomejs/biome/blob/HEAD/packages/@​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 - [#​10710](biomejs/biome#10710) [`0a0fbc1`](biomejs/biome@0a0fbc1) Thanks [@​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. - [#​11251](biomejs/biome#11251) [`ea9dd8a`](biomejs/biome@ea9dd8a) Thanks [@​dyc3](https://github.com/dyc3)! - Improved performance of [`noImportCycles`](https://biomejs.dev/linter/rules/no-import-cycles/). - [#​11247](biomejs/biome#11247) [`52b44d6`](biomejs/biome@52b44d6) Thanks [@​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} ``` - [#​11252](biomejs/biome#11252) [`d5f5704`](biomejs/biome@d5f5704) Thanks [@​Turtle-Hwan](https://github.com/Turtle-Hwan)! - Fixed [#​11250](biomejs/biome#11250): [`useAwait`](https://biomejs.dev/linter/rules/use-await/) no longer reports async functions that contain an `await using` declaration. - [#​11143](biomejs/biome#11143) [`6be7be1`](biomejs/biome@6be7be1) Thanks [@​vznh](https://github.com/vznh)! - Fixed [#​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`. - [#​11234](biomejs/biome#11234) [`caefe39`](biomejs/biome@caefe39) Thanks [@​subotac](https://github.com/subotac)! - Fixed [#​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; } ``` - [#​11285](biomejs/biome#11285) [`bca1f73`](biomejs/biome@bca1f73) Thanks [@​denbezrukov](https://github.com/denbezrukov)! - Fixed [#​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) {} ``` - [#​11080](biomejs/biome#11080) [`af16a0b`](biomejs/biome@af16a0b) Thanks [@​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. - [#​11195](biomejs/biome#11195) [`6a85588`](biomejs/biome@6a85588) Thanks [@​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> ``` - [#​11173](biomejs/biome#11173) [`481d008`](biomejs/biome@481d008) Thanks [@​Austin1serb](https://github.com/Austin1serb)! - Fixed [#​10242](biomejs/biome#10242): JavaScript GritQL patterns with multiple metavariables now match snippets consistently in WebAssembly. - [#​11187](biomejs/biome#11187) [`23c0369`](biomejs/biome@23c0369) Thanks [@​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; } ``` - [#​11272](biomejs/biome#11272) [`73896e6`](biomejs/biome@73896e6) Thanks [@​ematipico](https://github.com/ematipico)! - Improved the diagnostic emitted by [`noRootType`](https://biomejs.dev/linter/rules/no-root-type). - [#​11240](biomejs/biome#11240) [`bd0b68d`](biomejs/biome@bd0b68d) Thanks [@​ematipico](https://github.com/ematipico)! - Fixed [#​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`. - [#​11172](biomejs/biome#11172) [`4a0bc5c`](biomejs/biome@4a0bc5c) Thanks [@​saberoueslati](https://github.com/saberoueslati)! - Fixed [#​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. - [#​11227](biomejs/biome#11227) [`4d603b0`](biomejs/biome@4d603b0) Thanks [@​saberoueslati](https://github.com/saberoueslati)! - Fixed [#​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. - [#​11187](biomejs/biome#11187) [`23c0369`](biomejs/biome@23c0369) Thanks [@​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
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 (@​biomejs/biome)</summary> ### [`v2.5.8`](https://github.com/biomejs/biome/blob/HEAD/packages/@​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 - [#​10710](biomejs/biome#10710) [`0a0fbc1`](biomejs/biome@0a0fbc1) Thanks [@​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. - [#​11251](biomejs/biome#11251) [`ea9dd8a`](biomejs/biome@ea9dd8a) Thanks [@​dyc3](https://github.com/dyc3)! - Improved performance of [`noImportCycles`](https://biomejs.dev/linter/rules/no-import-cycles/). - [#​11247](biomejs/biome#11247) [`52b44d6`](biomejs/biome@52b44d6) Thanks [@​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} ``` - [#​11252](biomejs/biome#11252) [`d5f5704`](biomejs/biome@d5f5704) Thanks [@​Turtle-Hwan](https://github.com/Turtle-Hwan)! - Fixed [#​11250](biomejs/biome#11250): [`useAwait`](https://biomejs.dev/linter/rules/use-await/) no longer reports async functions that contain an `await using` declaration. - [#​11143](biomejs/biome#11143) [`6be7be1`](biomejs/biome@6be7be1) Thanks [@​vznh](https://github.com/vznh)! - Fixed [#​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`. - [#​11234](biomejs/biome#11234) [`caefe39`](biomejs/biome@caefe39) Thanks [@​subotac](https://github.com/subotac)! - Fixed [#​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; } ``` - [#​11285](biomejs/biome#11285) [`bca1f73`](biomejs/biome@bca1f73) Thanks [@​denbezrukov](https://github.com/denbezrukov)! - Fixed [#​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) {} ``` - [#​11080](biomejs/biome#11080) [`af16a0b`](biomejs/biome@af16a0b) Thanks [@​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. - [#​11195](biomejs/biome#11195) [`6a85588`](biomejs/biome@6a85588) Thanks [@​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> ``` - [#​11173](biomejs/biome#11173) [`481d008`](biomejs/biome@481d008) Thanks [@​Austin1serb](https://github.com/Austin1serb)! - Fixed [#​10242](biomejs/biome#10242): JavaScript GritQL patterns with multiple metavariables now match snippets consistently in WebAssembly. - [#​11187](biomejs/biome#11187) [`23c0369`](biomejs/biome@23c0369) Thanks [@​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; } ``` - [#​11272](biomejs/biome#11272) [`73896e6`](biomejs/biome@73896e6) Thanks [@​ematipico](https://github.com/ematipico)! - Improved the diagnostic emitted by [`noRootType`](https://biomejs.dev/linter/rules/no-root-type). - [#​11240](biomejs/biome#11240) [`bd0b68d`](biomejs/biome@bd0b68d) Thanks [@​ematipico](https://github.com/ematipico)! - Fixed [#​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`. - [#​11172](biomejs/biome#11172) [`4a0bc5c`](biomejs/biome@4a0bc5c) Thanks [@​saberoueslati](https://github.com/saberoueslati)! - Fixed [#​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. - [#​11227](biomejs/biome#11227) [`4d603b0`](biomejs/biome@4d603b0) Thanks [@​saberoueslati](https://github.com/saberoueslati)! - Fixed [#​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. - [#​11187](biomejs/biome#11187) [`23c0369`](biomejs/biome@23c0369) Thanks [@​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
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 CLI • Give Feedback 💬