From 16020d10b8b963a07f45805d4551cfaa865c5404 Mon Sep 17 00:00:00 2001 From: Dunqing Date: Thu, 23 Nov 2023 15:00:34 +0800 Subject: [PATCH] feat(prettier): support print empty switch --- crates/oxc_prettier/src/format/mod.rs | 26 ++++++++++++++------- tasks/prettier_conformance/prettier.snap.md | 3 +-- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/crates/oxc_prettier/src/format/mod.rs b/crates/oxc_prettier/src/format/mod.rs index 0ca9401b33946..9aca3f9bcd4cf 100644 --- a/crates/oxc_prettier/src/format/mod.rs +++ b/crates/oxc_prettier/src/format/mod.rs @@ -408,18 +408,17 @@ impl<'a> Format<'a> for SwitchStatement<'a> { header_parts.push(softline!()); header_parts.push(ss!(")")); - parts.push(group!(p, Doc::Array(header_parts))); + parts.push(Doc::Group(Group::new(header_parts, false))); parts.push(ss!(" {")); let mut cases_parts = p.vec(); for case in &self.cases { - cases_parts.push(hardline!()); - cases_parts.push(format!(p, case)); + cases_parts.push(indent!(p, hardline!(), format!(p, case))); } - parts.push(indent!(p, hardline!(), group!(p, Doc::Array(cases_parts)))); + parts.extend(cases_parts); parts.push(hardline!()); parts.push(ss!("}")); @@ -441,12 +440,23 @@ impl<'a> Format<'a> for SwitchCase<'a> { } let mut consequent_parts = p.vec(); - for stmt in &self.consequent { - consequent_parts.push(hardline!()); - consequent_parts.push(format!(p, stmt)); + + if !(self.consequent.len() == 1 + && matches!(self.consequent[0], Statement::EmptyStatement(_))) + { + for stmt in &self.consequent { + consequent_parts.push(hardline!()); + consequent_parts.push(format!(p, stmt)); + } } - parts.push(indent!(p, hardline!(), group!(p, Doc::Array(consequent_parts)))); + if !consequent_parts.is_empty() { + parts.push(indent!( + p, + hardline!(), + Doc::Group(Group { contents: consequent_parts, should_break: false }) + )); + } Doc::Array(parts) } diff --git a/tasks/prettier_conformance/prettier.snap.md b/tasks/prettier_conformance/prettier.snap.md index 79973a518f1fd..d51ec4443135c 100644 --- a/tasks/prettier_conformance/prettier.snap.md +++ b/tasks/prettier_conformance/prettier.snap.md @@ -1,4 +1,4 @@ -Compatibility: 145/597 (24.29%) +Compatibility: 146/597 (24.46%) # Failed @@ -577,7 +577,6 @@ Compatibility: 145/597 (24.29%) * switch/comments2.js * switch/empty_lines.js * switch/empty_statement.js -* switch/empty_switch.js * switch/switch.js ### template