diff --git a/apps/oxfmt/conformance/fixtures/edge-cases/js-in-vue/issue-20548.vue b/apps/oxfmt/conformance/fixtures/edge-cases/js-in-vue/issue-20548.vue
new file mode 100644
index 0000000000000..78fce0a4975f1
--- /dev/null
+++ b/apps/oxfmt/conformance/fixtures/edge-cases/js-in-vue/issue-20548.vue
@@ -0,0 +1,10 @@
+
diff --git a/apps/oxfmt/conformance/snapshots/conformance.snap.md b/apps/oxfmt/conformance/snapshots/conformance.snap.md
index 598710e1f4098..3ab36ed6474e6 100644
--- a/apps/oxfmt/conformance/snapshots/conformance.snap.md
+++ b/apps/oxfmt/conformance/snapshots/conformance.snap.md
@@ -1,6 +1,6 @@
## js-in-vue
-### Option 1: 423/425 (99.53%)
+### Option 1: 424/426 (99.53%)
```json
{"printWidth":80}
@@ -11,7 +11,7 @@
| [effects/common-ui/src/components/api-component/api-component.vue](diffs/js-in-vue/effects__common-ui__src__components__api-component__api-component.vue.md) | `() => {}` comma in generic param is removed even in .ts(x) file |
| [vue/multiparser/lang-tsx.vue](diffs/js-in-vue/vue__multiparser__lang-tsx.vue.md) | `lang=tsx` is not supported |
-### Option 2: 423/425 (99.53%)
+### Option 2: 424/426 (99.53%)
```json
{"printWidth":100,"vueIndentScriptAndStyle":true,"singleQuote":true}
diff --git a/crates/oxc_formatter/src/print/arrow_function_expression.rs b/crates/oxc_formatter/src/print/arrow_function_expression.rs
index 626f1bd8c176a..a945ce96fa540 100644
--- a/crates/oxc_formatter/src/print/arrow_function_expression.rs
+++ b/crates/oxc_formatter/src/print/arrow_function_expression.rs
@@ -678,7 +678,6 @@ fn format_signature<'a, 'b>(
format_with(move |f| {
let content = format_with(|f| {
group(&format_args!(
- maybe_space(!is_first_in_chain),
arrow.r#async().then_some("async "),
arrow.type_parameters(),
arrow.params(),
@@ -693,6 +692,7 @@ fn format_signature<'a, 'b>(
if is_first_in_chain {
write!(f, format_head);
} else {
+ write!(f, [space()]);
let mut buffer = RemoveSoftLinesBuffer::new(f);
write!(buffer, format_head);
}
diff --git a/crates/oxc_formatter/src/print/class.rs b/crates/oxc_formatter/src/print/class.rs
index 8eac1fabcdb53..eb2ad2346d2ed 100644
--- a/crates/oxc_formatter/src/print/class.rs
+++ b/crates/oxc_formatter/src/print/class.rs
@@ -385,12 +385,12 @@ impl<'a> Format<'a> for FormatClass<'a, '_> {
});
let format_extends =
- format_with(|f| write!(f, [space(), "extends", space(), &format_super]));
+ format_with(|f| write!(f, ["extends", space(), &format_super]));
if group_mode {
write!(f, [soft_line_break_or_space(), group(&format_extends)]);
} else {
- write!(f, format_extends);
+ write!(f, [space(), format_extends]);
}
}
diff --git a/crates/oxc_formatter/src/print/mod.rs b/crates/oxc_formatter/src/print/mod.rs
index a43b30c569aea..df9220fb9229c 100644
--- a/crates/oxc_formatter/src/print/mod.rs
+++ b/crates/oxc_formatter/src/print/mod.rs
@@ -1392,12 +1392,11 @@ impl<'a> FormatWrite<'a> for AstNode<'a, TSInterfaceDeclaration<'a>> {
]
);
} else {
- let format_extends =
- format_with(|f| write!(f, [space(), "extends", space(), extends]));
+ let format_extends = format_with(|f| write!(f, ["extends", space(), extends]));
if group_mode {
write!(f, [soft_line_break_or_space(), group(&format_extends)]);
} else {
- write!(f, format_extends);
+ write!(f, [space(), format_extends]);
}
}