diff --git a/.changeset/public-spiders-glow.md b/.changeset/public-spiders-glow.md new file mode 100644 index 000000000000..55ba3c0dd425 --- /dev/null +++ b/.changeset/public-spiders-glow.md @@ -0,0 +1,5 @@ +--- +"@biomejs/biome": patch +--- + +Fixed [#7981](https://github.com/biomejs/biome/issues/7981). Now Biome correctly detects and parses `lang='tsx'` and `lang='jsx'` languages when used inside in `.vue` files, when `.experimentalFullSupportEnabled` is enabled. diff --git a/crates/biome_cli/tests/cases/handle_vue_files.rs b/crates/biome_cli/tests/cases/handle_vue_files.rs index 1c98fb509f9a..aa7c97bb38b6 100644 --- a/crates/biome_cli/tests/cases/handle_vue_files.rs +++ b/crates/biome_cli/tests/cases/handle_vue_files.rs @@ -568,6 +568,121 @@ const props: Props = { title: "Hello" }; )); } +#[test] +fn full_support_tsx() { + let fs = MemoryFileSystem::default(); + let mut console = BufferConsole::default(); + + fs.insert( + "biome.json".into(), + r#"{ "html": { "formatter": {"enabled": true}, "linter": {"enabled": true}, "experimentalFullSupportEnabled": true } }"#.as_bytes(), + ); + + let vue_file_path = Utf8Path::new("file.vue"); + fs.insert( + vue_file_path.into(), + r#" + + + + +"# + .as_bytes(), + ); + + let (fs, result) = run_cli( + fs, + &mut console, + Args::from(["check", "--write", "--unsafe", vue_file_path.as_str()].as_slice()), + ); + + assert!(result.is_ok(), "run_cli returned {result:?}"); + + assert_cli_snapshot(SnapshotPayload::new( + module_path!(), + "full_support_tsx", + fs, + console, + result, + )); +} + +#[test] +fn full_support_jsx() { + let fs = MemoryFileSystem::default(); + let mut console = BufferConsole::default(); + + fs.insert( + "biome.json".into(), + r#"{ "html": { "formatter": {"enabled": true}, "linter": {"enabled": true}, "experimentalFullSupportEnabled": true } }"#.as_bytes(), + ); + + let vue_file_path = Utf8Path::new("file.vue"); + fs.insert( + vue_file_path.into(), + r#" + + + + +"# + .as_bytes(), + ); + + let (fs, result) = run_cli( + fs, + &mut console, + Args::from(["check", "--write", "--unsafe", vue_file_path.as_str()].as_slice()), + ); + + assert!(result.is_ok(), "run_cli returned {result:?}"); + + assert_cli_snapshot(SnapshotPayload::new( + module_path!(), + "full_support_jsx", + fs, + console, + result, + )); +} + #[test] fn format_stdin_successfully() { let fs = MemoryFileSystem::default(); diff --git a/crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/full_support_jsx.snap b/crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/full_support_jsx.snap new file mode 100644 index 000000000000..72a47fbde2c9 --- /dev/null +++ b/crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/full_support_jsx.snap @@ -0,0 +1,48 @@ +--- +source: crates/biome_cli/tests/snap_test.rs +expression: redactor(content) +--- +## `biome.json` + +```json +{ + "html": { + "formatter": { "enabled": true }, + "linter": { "enabled": true }, + "experimentalFullSupportEnabled": true + } +} +``` + +## `file.vue` + +```vue + + + + + + +``` + +# Emitted Messages + +```block +Checked 1 file in