From c07aa937d13f3a810f17f7ccfbe1bb66436ef391 Mon Sep 17 00:00:00 2001 From: Giacomo Cavalieri Date: Thu, 16 Jul 2026 13:09:22 +0200 Subject: [PATCH] fix formatting --- CHANGELOG.md | 3 +++ format/src/lib.rs | 19 +++++++++++-------- format/src/tests/guards.rs | 25 +++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index be679a5a3..c4379fe59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -520,6 +520,9 @@ writing a constructor with a lowercase name. ([Giacomo Cavalieri](https://github.com/giacomocavalieri)) +- Fixed a bug where guards with comments wouldn't be formatted properly. + ([Giacomo Cavalieri](https://github.com/giacomocavalieri)) + - A `gleam@@compile.erl` is no longer left in the build output of `gleam compile-package`. ([Louis Pilfold](https://github.com/lpil)) diff --git a/format/src/lib.rs b/format/src/lib.rs index b64ba2600..b3620c880 100644 --- a/format/src/lib.rs +++ b/format/src/lib.rs @@ -3093,14 +3093,17 @@ impl<'a, 'doc> Formatter<'a> { left: &'a UntypedClauseGuard, right: &'a UntypedClauseGuard, ) -> Document<'a, 'doc> { - self.clause_guard_bin_op_side(arena, name, left, left.precedence()) - .append(arena, BREAKABLE_SPACE_DOCUMENT) - .append(arena, binop(*name)) - .append(arena, SPACE_DOCUMENT) - .append( - arena, - self.clause_guard_bin_op_side(arena, name, right, right.precedence() - 1), - ) + let left_comments = self.pop_comments(left.location().start); + let left = self.clause_guard_bin_op_side(arena, name, left, left.precedence()); + let left = commented(arena, left, left_comments); + + let right_comments = self.pop_comments(right.location().start); + let right = self.clause_guard_bin_op_side(arena, name, right, right.precedence() - 1); + let right = docvec![arena, binop(*name), SPACE_DOCUMENT, right]; + let right = commented(arena, right, right_comments); + + left.append(arena, BREAKABLE_SPACE_DOCUMENT) + .append(arena, right) } fn clause_guard_bin_op_side( diff --git a/format/src/tests/guards.rs b/format/src/tests/guards.rs index e359e36bb..7ac0788d6 100644 --- a/format/src/tests/guards.rs +++ b/format/src/tests/guards.rs @@ -51,6 +51,31 @@ fn operators_in_guard() { ); } +#[test] +fn commented_operators_in_guard() { + assert_format!( + r#"pub fn main() { + case list.map(codepoints, string.utf_codepoint_to_int) { + [drive, colon, slash] + if { slash == 47 || slash == 92 } + && colon == 58 + // Hello + && drive >= 65 + && drive <= 90 + // This is a comment + || drive >= 97 + // And another one + && drive <= 122 + -> { + 1 + |> 2 + } + } +} +"# + ); +} + #[test] fn a_comment_before_a_guard_doesnt_force_it_to_break() { assert_format!( -- 2.51.2