diff --git a/Cargo.lock b/Cargo.lock
index 8bb4d7c9403d..044d18c49d45 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -493,7 +493,6 @@ dependencies = [
"rustc-hash 2.1.1",
"schemars",
"serde",
- "tracing",
"unicode-width 0.1.12",
]
@@ -810,6 +809,8 @@ dependencies = [
name = "biome_html_syntax"
version = "0.5.7"
dependencies = [
+ "biome_html_factory",
+ "biome_html_parser",
"biome_rowan",
"biome_string_case",
"camino",
diff --git a/crates/biome_cli/tests/cases/html.rs b/crates/biome_cli/tests/cases/html.rs
index d7a27a71318e..c82391a7d094 100644
--- a/crates/biome_cli/tests/cases/html.rs
+++ b/crates/biome_cli/tests/cases/html.rs
@@ -90,3 +90,96 @@ fn should_not_error_when_interpolation_is_enabled() {
result,
));
}
+
+#[test]
+fn should_format_indent_embedded_languages() {
+ let fs = MemoryFileSystem::default();
+ let mut console = BufferConsole::default();
+
+ let html_file = Utf8Path::new("file.html");
+ fs.insert(
+ html_file.into(),
+ r#"
+
+"#
+ .as_bytes(),
+ );
+
+ fs.insert(
+ Utf8Path::new("biome.json").into(),
+ r#"{
+ "html": {
+ "formatter": {
+ "enabled": true,
+ "indentScriptAndStyle": true
+ }
+ }
+}"#
+ .as_bytes(),
+ );
+
+ let (fs, result) = run_cli(
+ fs,
+ &mut console,
+ Args::from(["format", "--write", html_file.as_str()].as_slice()),
+ );
+
+ assert!(result.is_ok(), "run_cli returned {result:?}");
+
+ assert_cli_snapshot(SnapshotPayload::new(
+ module_path!(),
+ "should_format_indent_embedded_languages",
+ fs,
+ console,
+ result,
+ ));
+}
+
+#[test]
+fn should_format_indent_embedded_languages_with_language_options() {
+ let fs = MemoryFileSystem::default();
+ let mut console = BufferConsole::default();
+
+ let html_file = Utf8Path::new("file.html");
+ fs.insert(
+ html_file.into(),
+ r#"
+
+"#
+ .as_bytes(),
+ );
+
+ fs.insert(
+ Utf8Path::new("biome.json").into(),
+ r#"{
+ "html": {
+ "formatter": {
+ "enabled": true,
+ "indentScriptAndStyle": true
+ }
+ },
+ "javascript": {
+ "formatter": {
+ "quoteStyle": "single"
+ }
+ }
+}"#
+ .as_bytes(),
+ );
+
+ let (fs, result) = run_cli(
+ fs,
+ &mut console,
+ Args::from(["format", "--write", html_file.as_str()].as_slice()),
+ );
+
+ assert!(result.is_ok(), "run_cli returned {result:?}");
+
+ assert_cli_snapshot(SnapshotPayload::new(
+ module_path!(),
+ "should_format_indent_embedded_languages_with_language_options",
+ fs,
+ console,
+ result,
+ ));
+}
diff --git a/crates/biome_cli/tests/snapshots/main_cases_html/should_format_indent_embedded_languages.snap b/crates/biome_cli/tests/snapshots/main_cases_html/should_format_indent_embedded_languages.snap
new file mode 100644
index 000000000000..5908c428fe34
--- /dev/null
+++ b/crates/biome_cli/tests/snapshots/main_cases_html/should_format_indent_embedded_languages.snap
@@ -0,0 +1,40 @@
+---
+source: crates/biome_cli/tests/snap_test.rs
+expression: redactor(content)
+---
+## `biome.json`
+
+```json
+{
+ "html": {
+ "formatter": {
+ "enabled": true,
+ "indentScriptAndStyle": true
+ }
+ }
+}
+```
+
+## `file.html`
+
+```html
+
+
+
+```
+
+# Emitted Messages
+
+```block
+Formatted 1 file in