diff --git a/src/rules/pattern.rs b/src/rules/pattern.rs index 517b492..c5c90c8 100644 --- a/src/rules/pattern.rs +++ b/src/rules/pattern.rs @@ -35,8 +35,10 @@ pub fn rule( }; // x @ + let mut at = false; let child = children.peek_next().unwrap(); if let rnix::SyntaxKind::NODE_PAT_BIND = child.element.kind() { + at = true; match layout { crate::config::Layout::Tall => { steps.push_back(crate::builder::Step::FormatWider( @@ -47,25 +49,28 @@ pub fn rule( steps.push_back(crate::builder::Step::Format(child.element)); } } - if !has_comments && items_count <= 1 { - steps.push_back(crate::builder::Step::Whitespace); - } else { - steps.push_back(crate::builder::Step::NewLine); - steps.push_back(crate::builder::Step::Pad); - } children.move_next(); } // /**/ + let mut comment = false; children.drain_comments_and_newlines(|element| match element { crate::children::DrainCommentOrNewline::Comment(text) => { - steps.push_back(crate::builder::Step::Comment(text)); steps.push_back(crate::builder::Step::NewLine); steps.push_back(crate::builder::Step::Pad); + steps.push_back(crate::builder::Step::Comment(text)); + comment = true; } crate::children::DrainCommentOrNewline::Newline(_) => {} }); + if comment { + steps.push_back(crate::builder::Step::NewLine); + steps.push_back(crate::builder::Step::Pad); + } else if at { + steps.push_back(crate::builder::Step::Whitespace); + } + // { let child = children.get_next().unwrap(); steps.push_back(crate::builder::Step::Format(child.element)); diff --git a/tests/cases/pattern/in b/tests/cases/pattern/in index 0fd7c76..f4daa99 100644 --- a/tests/cases/pattern/in +++ b/tests/cases/pattern/in @@ -1,4 +1,9 @@ [ + (a@{ + self, + gomod2nix, + mach-nix, + }: _) ({ self, gomod2nix, diff --git a/tests/cases/pattern/out b/tests/cases/pattern/out index 1f1d57c..3e1eae6 100644 --- a/tests/cases/pattern/out +++ b/tests/cases/pattern/out @@ -1,4 +1,10 @@ [ + (a @ { + self, + gomod2nix, + mach-nix, + }: + _) ({ self, gomod2nix,