diff --git a/src/alejandra_engine/src/builder.rs b/src/alejandra_engine/src/builder.rs index 915f590..2d8aefe 100644 --- a/src/alejandra_engine/src/builder.rs +++ b/src/alejandra_engine/src/builder.rs @@ -191,7 +191,7 @@ fn format( rnix::SyntaxKind::NODE_INHERIT => crate::rules::inherit::rule, // ( a ) rnix::SyntaxKind::NODE_INHERIT_FROM => { - crate::rules::paren::rule + crate::rules::inherit_from::rule } rnix::SyntaxKind::NODE_KEY => crate::rules::default, // a = b; diff --git a/src/alejandra_engine/src/rules/inherit_from.rs b/src/alejandra_engine/src/rules/inherit_from.rs new file mode 100644 index 0000000..cc41c1b --- /dev/null +++ b/src/alejandra_engine/src/rules/inherit_from.rs @@ -0,0 +1,6 @@ +pub(crate) fn rule( + build_ctx: &crate::builder::BuildCtx, + node: &rnix::SyntaxNode, +) -> std::collections::LinkedList { + crate::rules::paren::rule_with_configuration(build_ctx, node, false) +} diff --git a/src/alejandra_engine/src/rules/mod.rs b/src/alejandra_engine/src/rules/mod.rs index f8ed50a..016b518 100644 --- a/src/alejandra_engine/src/rules/mod.rs +++ b/src/alejandra_engine/src/rules/mod.rs @@ -4,6 +4,7 @@ pub(crate) mod bin_op; pub(crate) mod dynamic; pub(crate) mod if_else; pub(crate) mod inherit; +pub(crate) mod inherit_from; pub(crate) mod key_value; pub(crate) mod lambda; pub(crate) mod let_in; diff --git a/src/alejandra_engine/src/rules/paren.rs b/src/alejandra_engine/src/rules/paren.rs index 9792a85..00c48c9 100644 --- a/src/alejandra_engine/src/rules/paren.rs +++ b/src/alejandra_engine/src/rules/paren.rs @@ -1,6 +1,14 @@ pub(crate) fn rule( build_ctx: &crate::builder::BuildCtx, node: &rnix::SyntaxNode, +) -> std::collections::LinkedList { + rule_with_configuration(build_ctx, node, true) +} + +pub(crate) fn rule_with_configuration( + build_ctx: &crate::builder::BuildCtx, + node: &rnix::SyntaxNode, + simplify: bool, ) -> std::collections::LinkedList { let mut steps = std::collections::LinkedList::new(); @@ -10,6 +18,29 @@ pub(crate) fn rule( let expression = children.next().unwrap(); let closer = children.next().unwrap(); + // Simplify this expression + if simplify + && !opener.has_inline_comment + && !opener.has_comments + && !expression.has_inline_comment + && !expression.has_comments + && !closer.has_inline_comment + && !closer.has_comments + && matches!( + expression.element.kind(), + rnix::SyntaxKind::NODE_ATTR_SET + | rnix::SyntaxKind::NODE_IDENT + | rnix::SyntaxKind::NODE_LIST + | rnix::SyntaxKind::NODE_LITERAL + | rnix::SyntaxKind::NODE_PAREN + | rnix::SyntaxKind::NODE_PATH_WITH_INTERPOL + | rnix::SyntaxKind::NODE_STRING + ) + { + steps.push_back(crate::builder::Step::Format(expression.element)); + return steps; + } + let vertical = opener.has_inline_comment || opener.has_trivialities || expression.has_inline_comment diff --git a/src/alejandra_engine/tests/cases/paren/out b/src/alejandra_engine/tests/cases/paren/out index d7b2e21..476c007 100644 --- a/src/alejandra_engine/tests/cases/paren/out +++ b/src/alejandra_engine/tests/cases/paren/out @@ -2,19 +2,19 @@ ( # test a # test ) - ((c)) + c ( - (c) + c /* e */ ) - (( + ( c /* d */ - )) + ) ( ( c @@ -26,12 +26,12 @@ e */ ) - (( + ( /* b */ c - )) + ) ( ( /* @@ -43,7 +43,7 @@ e */ ) - (( + ( /* b */ @@ -51,7 +51,7 @@ /* d */ - )) + ) ( ( /* @@ -70,13 +70,13 @@ /* a */ - (c) + c ) ( /* a */ - (c) + c /* e */ diff --git a/src/alejandra_engine/tests/cases/with/out b/src/alejandra_engine/tests/cases/with/out index e993618..b28219c 100644 --- a/src/alejandra_engine/tests/cases/with/out +++ b/src/alejandra_engine/tests/cases/with/out @@ -61,11 +61,9 @@ } { binPath = with pkgs; - makeBinPath ( - [ - rsync - util-linux - ] - ); + makeBinPath [ + rsync + util-linux + ]; } ]