From cf388ae79e153f98921755f8edfcf8d3caa91f46 Mon Sep 17 00:00:00 2001 From: Boshen Date: Sun, 19 Nov 2023 18:01:49 +0800 Subject: [PATCH] feat(prettier): format empty try catch (#1430) --- crates/oxc_prettier/src/format/block.rs | 4 +++- crates/oxc_prettier/src/format/mod.rs | 20 +++++++++++--------- crates/oxc_prettier/src/lib.rs | 5 +++++ tasks/prettier_conformance/prettier.snap.md | 3 +-- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/crates/oxc_prettier/src/format/block.rs b/crates/oxc_prettier/src/format/block.rs index 69b681748..e6533333c 100644 --- a/crates/oxc_prettier/src/format/block.rs +++ b/crates/oxc_prettier/src/format/block.rs @@ -25,7 +25,9 @@ pub(super) fn print_block<'a>( | AstKind::ForStatement(_) | AstKind::WhileStatement(_) | AstKind::DoWhileStatement(_) - ) || matches!(p.current_kind(), AstKind::StaticBlock(_))) + ) || (matches!(parent, AstKind::CatchClause(_)) + && !matches!(p.parent_parent_kind(), Some(AstKind::TryStatement(stmt)) if stmt.finalizer.is_some())) + || matches!(p.current_kind(), AstKind::StaticBlock(_))) { parts.push(hardline!()); } diff --git a/crates/oxc_prettier/src/format/mod.rs b/crates/oxc_prettier/src/format/mod.rs index 8c55dce39..b5106f81a 100644 --- a/crates/oxc_prettier/src/format/mod.rs +++ b/crates/oxc_prettier/src/format/mod.rs @@ -474,17 +474,19 @@ impl<'a> Format<'a> for TryStatement<'a> { impl<'a> Format<'a> for CatchClause<'a> { fn format(&self, p: &mut Prettier<'a>) -> Doc<'a> { - let mut parts = p.vec(); + wrap!(p, self, CatchClause, { + let mut parts = p.vec(); - parts.push(ss!("catch ")); - if let Some(param) = &self.param { - parts.push(ss!("(")); - parts.push(format!(p, param)); - parts.push(ss!(") ")); - } - parts.push(format!(p, self.body)); + parts.push(ss!("catch ")); + if let Some(param) = &self.param { + parts.push(ss!("(")); + parts.push(format!(p, param)); + parts.push(ss!(") ")); + } + parts.push(format!(p, self.body)); - Doc::Array(parts) + Doc::Array(parts) + }) } } diff --git a/crates/oxc_prettier/src/lib.rs b/crates/oxc_prettier/src/lib.rs index 7542babb8..156790050 100644 --- a/crates/oxc_prettier/src/lib.rs +++ b/crates/oxc_prettier/src/lib.rs @@ -76,6 +76,11 @@ impl<'a> Prettier<'a> { self.nodes[self.nodes.len() - 2] } + fn parent_parent_kind(&self) -> Option> { + let len = self.nodes.len(); + (len >= 3).then(|| self.nodes[len - 3]) + } + /// A hack for erasing the lifetime requirement. #[allow(clippy::unused_self)] fn alloc(&self, t: &T) -> &'a T { diff --git a/tasks/prettier_conformance/prettier.snap.md b/tasks/prettier_conformance/prettier.snap.md index 8fd70a50a..d56f6b2c5 100644 --- a/tasks/prettier_conformance/prettier.snap.md +++ b/tasks/prettier_conformance/prettier.snap.md @@ -1,4 +1,4 @@ -Compatibility: 121/838 (14.44%) +Compatibility: 122/838 (14.56%) # Failed @@ -954,7 +954,6 @@ Compatibility: 121/838 (14.44%) ### try * try/catch.js -* try/empty.js * try/try.js ### tuple