From 2bed242016763d538bcda069dd89d5a1cc59990c Mon Sep 17 00:00:00 2001 From: Dunqing Date: Thu, 16 Nov 2023 11:03:53 +0800 Subject: [PATCH] feat(prettier): Doc::IfBreak should a accept single doc and add if_break macro (#1335) --- crates/oxc_prettier/src/doc.rs | 9 ++------- crates/oxc_prettier/src/format/mod.rs | 7 ++----- crates/oxc_prettier/src/macros.rs | 7 +++++++ crates/oxc_prettier/src/printer/mod.rs | 13 +++---------- 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/crates/oxc_prettier/src/doc.rs b/crates/oxc_prettier/src/doc.rs index 26bd325db..b9c91e184 100644 --- a/crates/oxc_prettier/src/doc.rs +++ b/crates/oxc_prettier/src/doc.rs @@ -31,15 +31,10 @@ pub enum Doc<'a> { /// no matter if the expression fits on one line or not. Hardline, /// Print something if the current `group` or the current element of `fill` breaks and something else if it doesn't. - IfBreak(Vec<'a, Doc<'a>>), + IfBreak(Box>), } -impl<'a> Doc<'a> { - #[must_use] - pub fn if_break(break_contents: Vec<'a, Doc<'a>>) -> Self { - Doc::IfBreak(break_contents) - } -} +impl<'a> Doc<'a> {} #[derive(Clone, Copy)] #[allow(unused)] diff --git a/crates/oxc_prettier/src/format/mod.rs b/crates/oxc_prettier/src/format/mod.rs index 4054f098f..13f96dd5e 100644 --- a/crates/oxc_prettier/src/format/mod.rs +++ b/crates/oxc_prettier/src/format/mod.rs @@ -17,7 +17,7 @@ mod ternary; use crate::{ array, doc::{Doc, Separator}, - format, group, hardline, indent, softline, ss, string, + format, group, hardline, if_break, indent, softline, ss, string, util::is_next_line_empty, Prettier, }; @@ -784,10 +784,7 @@ impl<'a> Format<'a> for ArrayExpression<'a> { parts_inner.push(format!(p, element)); } - let mut if_break_comma = p.vec(); - if_break_comma.push(Doc::Str(",")); - - parts_inner.push(Doc::if_break(if_break_comma)); + parts_inner.push(if_break!(",")); parts.push(group!(p, Doc::Indent(parts_inner))); diff --git a/crates/oxc_prettier/src/macros.rs b/crates/oxc_prettier/src/macros.rs index db6226b4d..2a510b4ec 100644 --- a/crates/oxc_prettier/src/macros.rs +++ b/crates/oxc_prettier/src/macros.rs @@ -81,3 +81,10 @@ macro_rules! group { } }; } + +#[macro_export] +macro_rules! if_break { + ($s:expr) => {{ + Doc::IfBreak(std::boxed::Box::new(Doc::Str($s))) + }}; +} diff --git a/crates/oxc_prettier/src/printer/mod.rs b/crates/oxc_prettier/src/printer/mod.rs index 12a5e1f80..648c8be86 100644 --- a/crates/oxc_prettier/src/printer/mod.rs +++ b/crates/oxc_prettier/src/printer/mod.rs @@ -52,7 +52,7 @@ impl<'a> Printer<'a> { Doc::Line => self.handle_line(indent, mode), Doc::Softline => self.handle_softline(indent, mode), Doc::Hardline => self.handle_hardline(indent), - Doc::IfBreak(if_break) => self.handle_if_break(if_break, indent, mode), + Doc::IfBreak(if_break) => self.handle_if_break(*if_break, indent, mode), } } } @@ -120,16 +120,9 @@ impl<'a> Printer<'a> { self.pos = self.indent(indent.length); } - fn handle_if_break( - &mut self, - if_break: oxc_allocator::Vec<'a, Doc<'a>>, - indent: Indent, - mode: Mode, - ) { + fn handle_if_break(&mut self, doc: Doc<'a>, indent: Indent, mode: Mode) { if mode == Mode::Break { - self.cmds.extend( - if_break.into_iter().rev().map(|doc| Command::new(indent, Mode::Break, doc)), - ); + self.cmds.push(Command::new(indent, Mode::Break, doc)); } }