diff --git a/crates/oxc_prettier/src/format/function.rs b/crates/oxc_prettier/src/format/function.rs index 855c241b4..ba3e7d3c9 100644 --- a/crates/oxc_prettier/src/format/function.rs +++ b/crates/oxc_prettier/src/format/function.rs @@ -1,7 +1,7 @@ #[allow(clippy::wildcard_imports)] use oxc_ast::ast::*; -use crate::{doc::Doc, ss, Format, Prettier}; +use crate::{doc::Doc, group, hardline, if_break, indent, softline, ss, Format, Prettier}; impl<'a> Prettier<'a> { pub(super) fn print_function(&mut self, func: &Function<'a>) -> Doc<'a> { @@ -30,4 +30,29 @@ impl<'a> Prettier<'a> { } Doc::Array(parts) } + + pub(super) fn print_return_or_throw_argument( + &mut self, + argument: Option<&Expression<'a>>, + is_return: bool, + ) -> Doc<'a> { + let mut parts = self.vec(); + + parts.push(ss!(if is_return { "return" } else { "throw" })); + + if let Some(argument) = argument { + parts.push(ss!(" ")); + parts.push(group![ + self, + if_break!(self, "("), + indent!(self, softline!(), argument.format(self)), + softline!(), + if_break!(self, ")") + ]); + } + + parts.push(self.str(";")); + parts.push(hardline!()); + Doc::Array(parts) + } } diff --git a/crates/oxc_prettier/src/format/mod.rs b/crates/oxc_prettier/src/format/mod.rs index a0c10eb08..b055a4a9b 100644 --- a/crates/oxc_prettier/src/format/mod.rs +++ b/crates/oxc_prettier/src/format/mod.rs @@ -254,21 +254,7 @@ impl<'a> Format<'a> for SwitchCase<'a> { impl<'a> Format<'a> for ReturnStatement<'a> { fn format(&self, p: &mut Prettier<'a>) -> Doc<'a> { - let mut parts = p.vec(); - parts.push(ss!("return")); - if let Some(argument) = &self.argument { - parts.push(ss!(" ")); - parts.push(group![ - p, - if_break!(p, "("), - indent!(p, softline!(), format!(p, argument)), - softline!(), - if_break!(p, ")") - ]); - } - parts.push(p.str(";")); - parts.push(hardline!()); - Doc::Array(parts) + p.print_return_or_throw_argument(self.argument.as_ref(), true) } } @@ -317,12 +303,7 @@ impl<'a> Format<'a> for CatchClause<'a> { impl<'a> Format<'a> for ThrowStatement<'a> { fn format(&self, p: &mut Prettier<'a>) -> Doc<'a> { - let mut parts = p.vec(); - parts.push(ss!("throw ")); - parts.push(ss!(" ")); - parts.push(format!(p, self.argument)); - - Doc::Array(parts) + p.print_return_or_throw_argument(Some(&self.argument), false) } }