From 96fa335e746a980c5b27e091a705c75df66d4fe9 Mon Sep 17 00:00:00 2001 From: Darren Schroeder <343840+fdncred@users.noreply.github.com> Date: Mon, 27 Apr 2026 19:07:48 -0500 Subject: [PATCH] fix: preserve parentheses in if-call expressions and add related tests --- src/formatting/expressions.rs | 8 ++++++-- ...if_call_parentheses_preserved_after_if_issue176.nu | 11 +++++++++++ ...if_call_parentheses_preserved_after_if_issue176.nu | 11 +++++++++++ tests/ground_truth.rs | 5 +++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 tests/fixtures/expected/if_call_parentheses_preserved_after_if_issue176.nu create mode 100644 tests/fixtures/input/if_call_parentheses_preserved_after_if_issue176.nu diff --git a/src/formatting/expressions.rs b/src/formatting/expressions.rs index 57a11e2..46fb28d 100644 --- a/src/formatting/expressions.rs +++ b/src/formatting/expressions.rs @@ -253,8 +253,12 @@ impl<'a> Formatter<'a> { return; } - let can_drop_parens = - block.pipelines.len() == 1 && block.pipelines[0].elements.len() == 1; + let can_drop_parens = block.pipelines.len() == 1 + && block.pipelines[0].elements.len() == 1 + && !matches!( + block.pipelines[0].elements[0].expr.expr, + Expr::Call(_) | Expr::ExternalCall(_, _) + ); if can_drop_parens && !self.subexpr_preceded_by_not(span.start) { self.format_block(block); return; diff --git a/tests/fixtures/expected/if_call_parentheses_preserved_after_if_issue176.nu b/tests/fixtures/expected/if_call_parentheses_preserved_after_if_issue176.nu new file mode 100644 index 0000000..653594b --- /dev/null +++ b/tests/fixtures/expected/if_call_parentheses_preserved_after_if_issue176.nu @@ -0,0 +1,11 @@ +def is-wayland [] { $env.WAYLAND_DISPLAY? != null } + +if (is-wayland) { + print "wayland" +} + +if not (is-wayland) { + print "not wayland" +} else if (is-wayland) { + print "else wayland" +} diff --git a/tests/fixtures/input/if_call_parentheses_preserved_after_if_issue176.nu b/tests/fixtures/input/if_call_parentheses_preserved_after_if_issue176.nu new file mode 100644 index 0000000..653594b --- /dev/null +++ b/tests/fixtures/input/if_call_parentheses_preserved_after_if_issue176.nu @@ -0,0 +1,11 @@ +def is-wayland [] { $env.WAYLAND_DISPLAY? != null } + +if (is-wayland) { + print "wayland" +} + +if not (is-wayland) { + print "not wayland" +} else if (is-wayland) { + print "else wayland" +} diff --git a/tests/ground_truth.rs b/tests/ground_truth.rs index 08ca7a7..e443f1a 100644 --- a/tests/ground_truth.rs +++ b/tests/ground_truth.rs @@ -659,4 +659,9 @@ fixture_tests!( ground_truth_unary_not_condition_keeps_required_subexpression_parens_issue172, idempotency_unary_not_condition_keeps_required_subexpression_parens_issue172 ), + ( + "if_call_parentheses_preserved_after_if_issue176", + ground_truth_if_call_parentheses_preserved_after_if_issue176, + idempotency_if_call_parentheses_preserved_after_if_issue176 + ), );