diff --git a/src/rules/key_value.rs b/src/rules/key_value.rs index 5b49ac9..58faeaf 100644 --- a/src/rules/key_value.rs +++ b/src/rules/key_value.rs @@ -45,15 +45,34 @@ pub fn rule( steps.push_back(crate::builder::Step::Format(child.element)); match layout { crate::config::Layout::Tall => { + let next = children.peek_next().unwrap(); + let next_kind = next.element.kind(); + if let rnix::SyntaxKind::NODE_APPLY | rnix::SyntaxKind::NODE_ATTR_SET - | rnix::SyntaxKind::NODE_LAMBDA | rnix::SyntaxKind::NODE_LIST | rnix::SyntaxKind::NODE_PAREN - | rnix::SyntaxKind::NODE_STRING = - children.peek_next().unwrap().element.kind() + | rnix::SyntaxKind::NODE_STRING = next_kind { steps.push_back(crate::builder::Step::Whitespace); + } else if let rnix::SyntaxKind::NODE_LAMBDA = next_kind { + if let rnix::SyntaxKind::NODE_PATTERN = next + .element + .clone() + .into_node() + .unwrap() + .children() + .next() + .unwrap() + .kind() + { + dedent = true; + steps.push_back(crate::builder::Step::Indent); + steps.push_back(crate::builder::Step::NewLine); + steps.push_back(crate::builder::Step::Pad); + } else { + steps.push_back(crate::builder::Step::Whitespace); + } } else { dedent = true; steps.push_back(crate::builder::Step::Indent); diff --git a/tests/cases/key_value/in b/tests/cases/key_value/in index 166149e..3e86946 100644 --- a/tests/cases/key_value/in +++ b/tests/cases/key_value/in @@ -11,4 +11,8 @@ k = a: { b = 1; c = 2;}; l = a: /*b*/ { b = 1 ;}; m = a: /*b*/ { b = 1; c = 2;}; + n = pkgs: { }; + o = { pkgs + , ... + }: { }; } diff --git a/tests/cases/key_value/out b/tests/cases/key_value/out index 519fdd9..101dfb6 100644 --- a/tests/cases/key_value/out +++ b/tests/cases/key_value/out @@ -90,4 +90,10 @@ b = 1; c = 2; }; + n = pkgs: { }; + o = + { pkgs + , ... + }: + { }; }