Skip to content

Conversation

@lisiur
Copy link
Contributor

@lisiur lisiur commented Nov 4, 2025

Summary

Fixes #7981

Test Plan

Added two snapshot tests to handle relevant cases.

Docs

None

@changeset-bot
Copy link

changeset-bot bot commented Nov 4, 2025

🦋 Changeset detected

Latest commit: f936d2b

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 A-Parser Area: parser L-HTML Language: HTML and super languages labels Nov 4, 2025
@lisiur lisiur changed the title feat: Suport html.experimentalFullSupportEnabled for vue with jsx/tsx script feat: support html.experimentalFullSupportEnabled for vue with jsx/tsx script Nov 4, 2025
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 4, 2025

Walkthrough

Adds detection for lang="jsx" and lang="tsx" script blocks by introducing HtmlElement::is_jsx_lang() and HtmlElement::is_tsx_lang(). parse_embedded_script now maps Vue/Svelte script elements with those languages to JsFileSource::jsx() and JsFileSource::tsx() respectively. Consolidates attribute-value checks via a new private has_attribute helper. Adds two CLI tests exercising Vue files with tsx and jsx <script setup> blocks that run the CLI and capture snapshots.

Possibly related PRs

Suggested reviewers

  • dyc3

Pre-merge checks and finishing touches

✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change: adding support for html.experimentalFullSupportEnabled in Vue files with JSX/TSX script blocks.
Description check ✅ Passed The description is related to the changeset, referencing issue #7981 and mentioning snapshot tests added for the fix.
Linked Issues check ✅ Passed The PR successfully addresses issue #7981 by adding JSX/TSX language detection methods and properly routing them in the HTML parser for Vue files with experimentalFullSupport enabled.
Out of Scope Changes check ✅ Passed All changes are directly related to resolving the issue: new language detection methods (is_jsx_lang, is_tsx_lang), parsing logic updates, test cases, and changeset documentation.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a4be034 and f936d2b.

📒 Files selected for processing (1)
  • .changeset/public-spiders-glow.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • .changeset/public-spiders-glow.md
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
  • GitHub Check: Check Dependencies
  • GitHub Check: End-to-end tests
  • GitHub Check: Documentation
  • GitHub Check: Test (depot-windows-2022-16)
  • GitHub Check: Test (depot-ubuntu-24.04-arm-16)
  • GitHub Check: Lint project (depot-ubuntu-24.04-arm-16)
  • GitHub Check: Lint project (depot-windows-2022)
  • GitHub Check: autofix
  • GitHub Check: Test Node.js API

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.

❤️ Share

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

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
crates/biome_html_syntax/src/element_ext.rs (1)

205-239: Implementation is correct.

Both methods follow the established pattern from is_typescript_lang(). If you're ever feeling fancy, these three methods could be consolidated with a helper like has_script_lang(&self, lang: &str), but that's entirely optional.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0b28f5f and fc6affe.

⛔ Files ignored due to path filters (2)
  • crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/full_support_jsx.snap is excluded by !**/*.snap and included by **
  • crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/full_support_tsx.snap is excluded by !**/*.snap and included by **
📒 Files selected for processing (3)
  • crates/biome_cli/tests/cases/handle_vue_files.rs (1 hunks)
  • crates/biome_html_syntax/src/element_ext.rs (1 hunks)
  • crates/biome_service/src/file_handlers/html.rs (1 hunks)
🧰 Additional context used
🧠 Learnings (16)
📚 Learning: 2025-10-15T09:23:33.055Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_js_type_info/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:23:33.055Z
Learning: Applies to crates/biome_js_type_info/src/type_info.rs : Add new TypeScript type support by extending the TypeData enum rather than introducing parallel structures.

Applied to files:

  • crates/biome_service/src/file_handlers/html.rs
  • crates/biome_html_syntax/src/element_ext.rs
  • crates/biome_cli/tests/cases/handle_vue_files.rs
📚 Learning: 2025-10-15T09:22:46.002Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_js_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:46.002Z
Learning: Applies to crates/biome_js_formatter/**/*.rs : Do not attempt to fix code; if a mandatory token/node is missing, return `None` instead

Applied to files:

  • crates/biome_service/src/file_handlers/html.rs
📚 Learning: 2025-10-15T09:22:15.851Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:15.851Z
Learning: Applies to crates/biome_formatter/src/comments.rs : Expose a public HtmlComments type alias: `pub type HtmlComments = Comments<HtmlLanguage>;`

Applied to files:

  • crates/biome_service/src/file_handlers/html.rs
  • crates/biome_html_syntax/src/element_ext.rs
📚 Learning: 2025-10-15T09:24:31.042Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:24:31.042Z
Learning: Applies to crates/biome_parser/xtask/codegen/src/*_kinds_src.rs : Add src/<lang>_kinds_src.rs under xtask/codegen that returns a static KindSrc

Applied to files:

  • crates/biome_service/src/file_handlers/html.rs
  • crates/biome_html_syntax/src/element_ext.rs
📚 Learning: 2025-10-15T09:22:15.851Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:15.851Z
Learning: Applies to crates/biome_formatter/src/lib.rs : Implement FormatLanguage for HtmlFormatLanguage with associated types: SyntaxLanguage=HtmlLanguage, Context=HtmlFormatContext, FormatRule=FormatHtmlSyntaxNode

Applied to files:

  • crates/biome_service/src/file_handlers/html.rs
  • crates/biome_html_syntax/src/element_ext.rs
📚 Learning: 2025-10-15T09:22:15.851Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:15.851Z
Learning: Applies to crates/biome_formatter/src/**/*.rs : After generation, remove usages of `format_verbatim_node` and implement real formatting with biome_formatter utilities

Applied to files:

  • crates/biome_service/src/file_handlers/html.rs
📚 Learning: 2025-10-15T09:23:33.055Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_js_type_info/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:23:33.055Z
Learning: Applies to crates/biome_js_type_info/src/{type_info,local_inference,resolver,flattening}.rs : Avoid recursive type structures and cross-module Arcs; represent links between types using TypeReference and TypeData::Reference.

Applied to files:

  • crates/biome_service/src/file_handlers/html.rs
📚 Learning: 2025-10-15T09:22:46.002Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_js_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:46.002Z
Learning: Applies to crates/biome_js_formatter/**/*.rs : Import and use the `FormatNode` trait for AST nodes

Applied to files:

  • crates/biome_service/src/file_handlers/html.rs
📚 Learning: 2025-10-15T09:22:15.851Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:15.851Z
Learning: Applies to crates/biome_formatter/tests/language.rs : Create tests/language.rs defining `HtmlTestFormatLanguage` and implement the TestFormatLanguage trait

Applied to files:

  • crates/biome_service/src/file_handlers/html.rs
  • crates/biome_html_syntax/src/element_ext.rs
  • crates/biome_cli/tests/cases/handle_vue_files.rs
📚 Learning: 2025-10-15T09:24:31.042Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:24:31.042Z
Learning: Add a new LanguageKind variant (e.g., Html) in language_kind.rs and implement/cover all methods

Applied to files:

  • crates/biome_html_syntax/src/element_ext.rs
📚 Learning: 2025-10-15T09:25:05.698Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_service/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:25:05.698Z
Learning: Applies to crates/biome_service/../biome_lsp/src/server.tests.rs : Keep end-to-end LSP tests in ../biome_lsp/src/server.tests.rs

Applied to files:

  • crates/biome_cli/tests/cases/handle_vue_files.rs
📚 Learning: 2025-10-15T09:25:05.698Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_service/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:25:05.698Z
Learning: Applies to crates/biome_service/src/workspace/watcher.tests.rs : Place watcher tests related to workspace methods in src/workspace/watcher.tests.rs

Applied to files:

  • crates/biome_cli/tests/cases/handle_vue_files.rs
📚 Learning: 2025-10-15T09:22:15.851Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:15.851Z
Learning: Applies to crates/biome_formatter/tests/** : Create a tests directory containing a specs subfolder and the files spec_test.rs, spec_tests.rs, and language.rs

Applied to files:

  • crates/biome_cli/tests/cases/handle_vue_files.rs
📚 Learning: 2025-10-15T09:22:15.851Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:15.851Z
Learning: Applies to crates/biome_formatter/tests/spec_tests.rs : In tests/spec_tests.rs, generate tests with `tests_macros::gen_tests! {"tests/specs/html/**/*.html", crate::spec_test::run, ""}`

Applied to files:

  • crates/biome_cli/tests/cases/handle_vue_files.rs
📚 Learning: 2025-10-15T09:22:15.851Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:15.851Z
Learning: Applies to crates/biome_formatter/tests/spec_test.rs : Implement a `run` function in tests/spec_test.rs that wires SpecSnapshot and includes!("language.rs") as shown

Applied to files:

  • crates/biome_cli/tests/cases/handle_vue_files.rs
📚 Learning: 2025-10-15T09:22:15.851Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:15.851Z
Learning: Applies to crates/biome_formatter/tests/specs/html/**/*.html : Place HTML test cases under tests/specs/html as .html files discovered by the test macro

Applied to files:

  • crates/biome_cli/tests/cases/handle_vue_files.rs
🧬 Code graph analysis (3)
crates/biome_service/src/file_handlers/html.rs (2)
packages/@biomejs/backend-jsonrpc/src/workspace.ts (1)
  • JsFileSource (9570-9579)
crates/biome_js_syntax/src/file_source.rs (2)
  • jsx (168-170)
  • tsx (188-190)
crates/biome_html_syntax/src/element_ext.rs (2)
crates/biome_html_syntax/src/generated/nodes.rs (2)
  • initializer (125-127)
  • value (165-167)
crates/biome_html_syntax/src/lib.rs (1)
  • inner_string_text (119-128)
crates/biome_cli/tests/cases/handle_vue_files.rs (3)
crates/biome_fs/src/fs/memory.rs (1)
  • default (37-49)
crates/biome_cli/tests/main.rs (1)
  • run_cli (332-347)
crates/biome_cli/tests/snap_test.rs (1)
  • assert_cli_snapshot (407-409)
🔇 Additional comments (2)
crates/biome_service/src/file_handlers/html.rs (1)

482-485: LGTM! JSX and TSX detection properly integrated.

The implementation correctly maps JSX and TSX language attributes to their respective file sources, maintaining consistency with the existing TypeScript handling.

crates/biome_cli/tests/cases/handle_vue_files.rs (1)

571-684: Test coverage looks solid.

Both full_support_tsx and full_support_jsx properly validate the new functionality with appropriate Vue file content and JSX/TSX syntax.

@ematipico
Copy link
Member

Thank you @lisiur , can you please add a changeset?

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
crates/biome_html_syntax/src/element_ext.rs (1)

205-239: Logic is sound; consider extracting the duplication.

The implementation correctly detects lang="jsx" and lang="tsx" attributes and properly handles edge cases. However, these two methods plus is_typescript_lang() (lines 188-203) repeat nearly identical logic, differing only in the final string comparison.

To reduce duplication, consider extracting a helper:

+    fn has_script_lang(&self, lang_value: &str) -> bool {
+        let is_script = self.is_script_tag();
+        let lang_attribute = self.find_attribute_by_name("lang");
+        let matches_lang = lang_attribute.is_some_and(|attribute| {
+            attribute
+                .initializer()
+                .and_then(|initializer| initializer.value().ok())
+                .and_then(|value| value.as_html_string().cloned())
+                .and_then(|value| value.value_token().ok())
+                .is_some_and(|token| {
+                    let text = inner_string_text(&token);
+                    text.eq_ignore_ascii_case(lang_value)
+                })
+        });
+        is_script && matches_lang
+    }
+
     /// Returns `true` if the element is a `<script lang="ts">`
     pub fn is_typescript_lang(&self) -> bool {
-        let is_script = self.is_script_tag();
-        let lang_attribute = self.find_attribute_by_name("lang");
-        let is_lang_typescript = lang_attribute.is_some_and(|attribute| {
-            attribute
-                .initializer()
-                .and_then(|initializer| initializer.value().ok())
-                .and_then(|value| value.as_html_string().cloned())
-                .and_then(|value| value.value_token().ok())
-                .is_some_and(|token| {
-                    let text = inner_string_text(&token);
-                    text.eq_ignore_ascii_case("ts")
-                })
-        });
-        is_script && is_lang_typescript
+        self.has_script_lang("ts")
     }

     /// Returns `true` if the element is a `<script lang="jsx">`
     pub fn is_jsx_lang(&self) -> bool {
-        let is_script = self.is_script_tag();
-        let lang_attribute = self.find_attribute_by_name("lang");
-        let is_lang_jsx = lang_attribute.is_some_and(|attribute| {
-            attribute
-                .initializer()
-                .and_then(|initializer| initializer.value().ok())
-                .and_then(|value| value.as_html_string().cloned())
-                .and_then(|value| value.value_token().ok())
-                .is_some_and(|token| {
-                    let text = inner_string_text(&token);
-                    text.eq_ignore_ascii_case("jsx")
-                })
-        });
-        is_script && is_lang_jsx
+        self.has_script_lang("jsx")
     }

     /// Returns `true` if the element is a `<script lang="tsx">`
     pub fn is_tsx_lang(&self) -> bool {
-        let is_script = self.is_script_tag();
-        let lang_attribute = self.find_attribute_by_name("lang");
-        let is_lang_tsx = lang_attribute.is_some_and(|attribute| {
-            attribute
-                .initializer()
-                .and_then(|initializer| initializer.value().ok())
-                .and_then(|value| value.as_html_string().cloned())
-                .and_then(|value| value.value_token().ok())
-                .is_some_and(|token| {
-                    let text = inner_string_text(&token);
-                    text.eq_ignore_ascii_case("tsx")
-                })
-        });
-        is_script && is_lang_tsx
+        self.has_script_lang("tsx")
     }

Optionally, unit tests could be added in the test module (similar to test_is_javascript_tag at line 267), though CLI tests already provide coverage.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fc6affe and 4ae0f10.

⛔ Files ignored due to path filters (2)
  • crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/full_support_jsx.snap is excluded by !**/*.snap and included by **
  • crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/full_support_tsx.snap is excluded by !**/*.snap and included by **
📒 Files selected for processing (4)
  • .changeset/public-spiders-glow.md (1 hunks)
  • crates/biome_cli/tests/cases/handle_vue_files.rs (1 hunks)
  • crates/biome_html_syntax/src/element_ext.rs (1 hunks)
  • crates/biome_service/src/file_handlers/html.rs (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • .changeset/public-spiders-glow.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • crates/biome_service/src/file_handlers/html.rs
  • crates/biome_cli/tests/cases/handle_vue_files.rs
🧰 Additional context used
🧠 Learnings (6)
📚 Learning: 2025-10-15T09:24:31.042Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:24:31.042Z
Learning: Add a new LanguageKind variant (e.g., Html) in language_kind.rs and implement/cover all methods

Applied to files:

  • crates/biome_html_syntax/src/element_ext.rs
📚 Learning: 2025-10-15T09:23:33.055Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_js_type_info/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:23:33.055Z
Learning: Applies to crates/biome_js_type_info/src/type_info.rs : Add new TypeScript type support by extending the TypeData enum rather than introducing parallel structures.

Applied to files:

  • crates/biome_html_syntax/src/element_ext.rs
📚 Learning: 2025-10-15T09:22:15.851Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:15.851Z
Learning: Applies to crates/biome_formatter/src/comments.rs : Expose a public HtmlComments type alias: `pub type HtmlComments = Comments<HtmlLanguage>;`

Applied to files:

  • crates/biome_html_syntax/src/element_ext.rs
📚 Learning: 2025-10-15T09:22:15.851Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:15.851Z
Learning: Applies to crates/biome_formatter/tests/language.rs : Create tests/language.rs defining `HtmlTestFormatLanguage` and implement the TestFormatLanguage trait

Applied to files:

  • crates/biome_html_syntax/src/element_ext.rs
📚 Learning: 2025-10-15T09:22:15.851Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:15.851Z
Learning: Applies to crates/biome_formatter/src/lib.rs : Implement FormatLanguage for HtmlFormatLanguage with associated types: SyntaxLanguage=HtmlLanguage, Context=HtmlFormatContext, FormatRule=FormatHtmlSyntaxNode

Applied to files:

  • crates/biome_html_syntax/src/element_ext.rs
📚 Learning: 2025-10-15T09:24:31.042Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:24:31.042Z
Learning: Applies to crates/biome_parser/xtask/codegen/src/*_kinds_src.rs : Add src/<lang>_kinds_src.rs under xtask/codegen that returns a static KindSrc

Applied to files:

  • crates/biome_html_syntax/src/element_ext.rs
🧬 Code graph analysis (1)
crates/biome_html_syntax/src/element_ext.rs (2)
crates/biome_html_syntax/src/generated/nodes.rs (2)
  • initializer (125-127)
  • value (165-167)
crates/biome_html_syntax/src/lib.rs (1)
  • inner_string_text (119-128)

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (2)
crates/biome_cli/tests/cases/handle_vue_files.rs (2)

571-629: Test structure looks solid!

The test correctly verifies that Vue files with TSX scripts now parse without errors when experimental full support is enabled. Well done using the correct variable name vue_file_path (unlike some earlier tests that mistakenly used astro_file_path).

Minor enhancement opportunity: The Props interface is defined but not meaningfully exercised. Consider using it in FunctionalComponent to better test TypeScript + JSX interaction:

-function FunctionalComponent() {
+function FunctionalComponent(props: Props) {
-    return <div></div>;
+    return <div>{props.title}</div>;
 }

Additionally, the original issue #7981 mentioned errors with <Comp></Comp> in templates. You might consider adding a test case that matches the exact reproduction scenario:

<template>
    <FunctionalComponent />
</template>

631-684: LGTM! JSX variant test complements the TSX coverage nicely.

The test appropriately verifies that Vue files with JSX scripts work correctly with experimental full support enabled. The absence of TypeScript types is correct for the JSX variant.

Optional: Consider testing slightly more complex JSX to ensure robust parser coverage (e.g., nested elements, props spreading, or fragments):

function FunctionalComponent() {
    return (
        <>
            <div className="wrapper">
                <span>Nested content</span>
            </div>
        </>
    );
}
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9ad13eb and a4be034.

⛔ Files ignored due to path filters (2)
  • crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/full_support_jsx.snap is excluded by !**/*.snap and included by **
  • crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/full_support_tsx.snap is excluded by !**/*.snap and included by **
📒 Files selected for processing (4)
  • .changeset/public-spiders-glow.md (1 hunks)
  • crates/biome_cli/tests/cases/handle_vue_files.rs (1 hunks)
  • crates/biome_html_syntax/src/element_ext.rs (1 hunks)
  • crates/biome_service/src/file_handlers/html.rs (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • .changeset/public-spiders-glow.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • crates/biome_html_syntax/src/element_ext.rs
  • crates/biome_service/src/file_handlers/html.rs
🧰 Additional context used
🧠 Learnings (7)
📚 Learning: 2025-10-15T09:23:33.055Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_js_type_info/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:23:33.055Z
Learning: Applies to crates/biome_js_type_info/src/type_info.rs : Add new TypeScript type support by extending the TypeData enum rather than introducing parallel structures.

Applied to files:

  • crates/biome_cli/tests/cases/handle_vue_files.rs
📚 Learning: 2025-10-15T09:25:05.698Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_service/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:25:05.698Z
Learning: Applies to crates/biome_service/../biome_lsp/src/server.tests.rs : Keep end-to-end LSP tests in ../biome_lsp/src/server.tests.rs

Applied to files:

  • crates/biome_cli/tests/cases/handle_vue_files.rs
📚 Learning: 2025-10-15T09:25:05.698Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_service/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:25:05.698Z
Learning: Applies to crates/biome_service/src/workspace/watcher.tests.rs : Place watcher tests related to workspace methods in src/workspace/watcher.tests.rs

Applied to files:

  • crates/biome_cli/tests/cases/handle_vue_files.rs
📚 Learning: 2025-10-15T09:22:15.851Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:15.851Z
Learning: Applies to crates/biome_formatter/tests/spec_tests.rs : In tests/spec_tests.rs, generate tests with `tests_macros::gen_tests! {"tests/specs/html/**/*.html", crate::spec_test::run, ""}`

Applied to files:

  • crates/biome_cli/tests/cases/handle_vue_files.rs
📚 Learning: 2025-10-15T09:22:15.851Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:15.851Z
Learning: Applies to crates/biome_formatter/tests/** : Create a tests directory containing a specs subfolder and the files spec_test.rs, spec_tests.rs, and language.rs

Applied to files:

  • crates/biome_cli/tests/cases/handle_vue_files.rs
📚 Learning: 2025-10-15T09:22:15.851Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:15.851Z
Learning: Applies to crates/biome_formatter/tests/spec_test.rs : Implement a `run` function in tests/spec_test.rs that wires SpecSnapshot and includes!("language.rs") as shown

Applied to files:

  • crates/biome_cli/tests/cases/handle_vue_files.rs
📚 Learning: 2025-10-15T09:22:15.851Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-10-15T09:22:15.851Z
Learning: Applies to crates/biome_formatter/tests/language.rs : Create tests/language.rs defining `HtmlTestFormatLanguage` and implement the TestFormatLanguage trait

Applied to files:

  • crates/biome_cli/tests/cases/handle_vue_files.rs
🧬 Code graph analysis (1)
crates/biome_cli/tests/cases/handle_vue_files.rs (3)
crates/biome_fs/src/fs/memory.rs (1)
  • default (37-49)
crates/biome_cli/tests/main.rs (1)
  • run_cli (332-347)
crates/biome_cli/tests/snap_test.rs (1)
  • assert_cli_snapshot (407-409)

@dyc3 dyc3 merged commit 3256f82 into biomejs:main Nov 5, 2025
13 checks passed
@github-actions github-actions bot mentioned this pull request Nov 5, 2025
ematipico added a commit to hamirmahal/biome that referenced this pull request Nov 19, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-CLI Area: CLI A-Parser Area: parser A-Project Area: project L-HTML Language: HTML and super languages

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🐛 Enabling experimentalFullSupport for HTML in Vue with tsx can cause errors

3 participants