From b8ce6266ad7914e42cea5d9e6722afd3eb8bffb4 Mon Sep 17 00:00:00 2001 From: Boshen Date: Wed, 29 Nov 2023 19:15:57 +0800 Subject: [PATCH] feat(prettier): handle parens for sequence expression (#1582) --- crates/oxc_prettier/src/format/mod.rs | 4 +++- crates/oxc_prettier/src/needs_parens.rs | 11 ++++++++++- tasks/prettier_conformance/prettier.snap.md | 5 +---- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/crates/oxc_prettier/src/format/mod.rs b/crates/oxc_prettier/src/format/mod.rs index dbce0f6ad..8cfc840f2 100644 --- a/crates/oxc_prettier/src/format/mod.rs +++ b/crates/oxc_prettier/src/format/mod.rs @@ -498,7 +498,9 @@ impl<'a> Format<'a> for SwitchCase<'a> { impl<'a> Format<'a> for ReturnStatement<'a> { fn format(&self, p: &mut Prettier<'a>) -> Doc<'a> { - function::print_return_or_throw_argument(p, self.argument.as_ref(), true) + wrap!(p, self, ReturnStatement, { + function::print_return_or_throw_argument(p, self.argument.as_ref(), true) + }) } } diff --git a/crates/oxc_prettier/src/needs_parens.rs b/crates/oxc_prettier/src/needs_parens.rs index bb93ef1f2..03c0f5102 100644 --- a/crates/oxc_prettier/src/needs_parens.rs +++ b/crates/oxc_prettier/src/needs_parens.rs @@ -62,7 +62,7 @@ impl<'a> Prettier<'a> { AstKind::NumberLiteral(literal) => { matches!(parent_kind, AstKind::MemberExpression(e) if e.object().span() == literal.span) } - AstKind::SequenceExpression(_) => !matches!(parent_kind, AstKind::Program(_)), + AstKind::SequenceExpression(e) => self.check_sequence_expression(e.span), AstKind::ObjectExpression(e) => self.check_object_function_class(e.span), AstKind::Function(f) if f.is_expression() => { if self.check_object_function_class(f.span) { @@ -231,6 +231,15 @@ impl<'a> Prettier<'a> { false } + fn check_sequence_expression(&self, span: Span) -> bool { + match self.parent_kind() { + AstKind::ReturnStatement(_) | AstKind::ForStatement(_) => false, + AstKind::ExpressionStatement(expr) => expr.expression.span() != span, + AstKind::ArrowExpression(expr) => expr.body.span != span, + _ => true, + } + } + fn check_object_expression(&self, obj_expr: &ObjectExpression<'a>) -> bool { let mut arrow_expr = None; for kind in self.nodes.iter().rev() { diff --git a/tasks/prettier_conformance/prettier.snap.md b/tasks/prettier_conformance/prettier.snap.md index 3be810d28..424f73194 100644 --- a/tasks/prettier_conformance/prettier.snap.md +++ b/tasks/prettier_conformance/prettier.snap.md @@ -1,4 +1,4 @@ -Compatibility: 199/578 (34.43%) +Compatibility: 200/578 (34.60%) # Failed @@ -450,9 +450,6 @@ Compatibility: 199/578 (34.43%) * require-amd/named-amd-module.js * require-amd/require.js -### reserved-word -* reserved-word/interfaces.js - ### rest * rest/trailing-commas.js