From aee733d250e7dbf4444358d82b0d754a9a3c5262 Mon Sep 17 00:00:00 2001 From: Boshen Date: Thu, 16 Nov 2023 17:16:30 +0800 Subject: [PATCH] feat(prettier): add `print_return_or_throw_argument` (#1347) --- crates/oxc_prettier/src/format/function.rs | 27 +++++++++++++++++++++- crates/oxc_prettier/src/format/mod.rs | 23 ++---------------- 2 files changed, 28 insertions(+), 22 deletions(-) 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) } }