From 86dcb185f2427ddb97c36c4955bca848ddbe2f60 Mon Sep 17 00:00:00 2001 From: Kevin Amado Date: Thu, 3 Mar 2022 19:32:05 -0500 Subject: [PATCH] feat: allow choosing loose parens - There are a few cases where it's valid to have it loose, but we cannot guess algorithmically in all cases, so let's leave a small door open in the cases that we cannot guess, but force when we are sure --- src/alejandra_engine/src/rules/paren.rs | 14 +++++++++++++- src/alejandra_engine/tests/cases/apply/out | 12 ++++++++---- src/alejandra_engine/tests/cases/lambda/out | 8 ++++++-- src/alejandra_engine/tests/cases/paren/out | 6 ++++-- src/alejandra_engine/tests/cases/pattern/out | 6 ++++-- 5 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/alejandra_engine/src/rules/paren.rs b/src/alejandra_engine/src/rules/paren.rs index d7dc46e..2034113 100644 --- a/src/alejandra_engine/src/rules/paren.rs +++ b/src/alejandra_engine/src/rules/paren.rs @@ -16,7 +16,19 @@ pub(crate) fn rule( || expression.has_comments || closer.has_inline_comment || closer.has_comments - || matches!(expression.element.kind(), rnix::SyntaxKind::NODE_IF_ELSE); + || matches!(expression.element.kind(), rnix::SyntaxKind::NODE_IF_ELSE) + || ((opener.has_trivialities + || expression.has_trivialities + || closer.has_trivialities) + && !matches!( + expression.element.kind(), + rnix::SyntaxKind::NODE_ATTR_SET + | rnix::SyntaxKind::NODE_IDENT + | rnix::SyntaxKind::NODE_LITERAL + | rnix::SyntaxKind::NODE_LIST + | rnix::SyntaxKind::NODE_STRING + | rnix::SyntaxKind::NODE_UNARY_OP + )); let should_indent = loose || matches!( diff --git a/src/alejandra_engine/tests/cases/apply/out b/src/alejandra_engine/tests/cases/apply/out index 99b2c31..a0913f9 100644 --- a/src/alejandra_engine/tests/cases/apply/out +++ b/src/alejandra_engine/tests/cases/apply/out @@ -1,7 +1,8 @@ [ (a b) - ((a b) + ( + (a b) (a b) (a /* @@ -20,9 +21,11 @@ /* e */ - )) + ) + ) '' - otherModules=${pkgs.writeText "other-modules.json" + otherModules=${ + pkgs.writeText "other-modules.json" (l.toJSON (l.mapAttrs (pname: subOutputs: let @@ -31,7 +34,8 @@ installMethod = "copy"; }); in "${pkg}/lib/node_modules/${pname}/node_modules") - outputs.subPackages))} + outputs.subPackages)) + } '' { name1 = diff --git a/src/alejandra_engine/tests/cases/lambda/out b/src/alejandra_engine/tests/cases/lambda/out index 204e2fa..5a3f350 100644 --- a/src/alejandra_engine/tests/cases/lambda/out +++ b/src/alejandra_engine/tests/cases/lambda/out @@ -35,8 +35,12 @@ c */ d) - (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) - (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) + ( + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + ) + ( + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + ) ({ pkgs ? import ./.. {}, locationsXml, diff --git a/src/alejandra_engine/tests/cases/paren/out b/src/alejandra_engine/tests/cases/paren/out index f540834..476c007 100644 --- a/src/alejandra_engine/tests/cases/paren/out +++ b/src/alejandra_engine/tests/cases/paren/out @@ -1,4 +1,5 @@ -(( # test +( + ( # test a # test ) c @@ -160,4 +161,5 @@ /* e */ - )) + ) +) diff --git a/src/alejandra_engine/tests/cases/pattern/out b/src/alejandra_engine/tests/cases/pattern/out index 921a805..a82d143 100644 --- a/src/alejandra_engine/tests/cases/pattern/out +++ b/src/alejandra_engine/tests/cases/pattern/out @@ -1059,7 +1059,8 @@ }: _) - ({ + ( + { /* a */ @@ -1117,5 +1118,6 @@ j */ # - _) + _ + ) ]