diff --git a/crates/aiken-lang/src/format.rs b/crates/aiken-lang/src/format.rs index d74c6ad8..c163d34b 100644 --- a/crates/aiken-lang/src/format.rs +++ b/crates/aiken-lang/src/format.rs @@ -1146,7 +1146,7 @@ impl<'comments> Formatter<'comments> { let precedence = name.precedence(); let left_precedence = left.binop_precedence(); - let right_precedence = right.binop_precedence(); + let right_precedence = dbg!(right).binop_precedence(); let left = self.expr(left, false); let right = self.expr(right, false); @@ -1155,7 +1155,7 @@ impl<'comments> Formatter<'comments> { .append(" ") .append(name) .append(" ") - .append(self.operator_side(right, precedence, right_precedence - 1)) + .append(self.operator_side(right, precedence, right_precedence.saturating_sub(1))) } pub fn operator_side<'a>(&mut self, doc: Document<'a>, op: u8, side: u8) -> Document<'a> { @@ -1745,7 +1745,7 @@ impl<'comments> Formatter<'comments> { let right = self.clause_guard(right); self.operator_side(left, name_precedence, left_precedence) .append(name) - .append(self.operator_side(right, name_precedence, right_precedence - 1)) + .append(self.operator_side(right, name_precedence, right_precedence.saturating_sub(1))) } fn clause_guard<'a>(&mut self, clause_guard: &'a UntypedClauseGuard) -> Document<'a> { diff --git a/crates/aiken-lang/src/tests/format.rs b/crates/aiken-lang/src/tests/format.rs index d796b09c..9c9c12cb 100644 --- a/crates/aiken-lang/src/tests/format.rs +++ b/crates/aiken-lang/src/tests/format.rs @@ -87,6 +87,39 @@ fn format_grouped_expression() { ); } +#[test] +fn format_grouped_expression_2() { + assert_format!( + r#" + fn foo() { + ( y == x ) |> f + } + "# + ); +} + +#[test] +fn format_grouped_expression_3() { + assert_format!( + r#" + fn foo() { + { x |> f } == y + } + "# + ); +} + +#[test] +fn format_grouped_expression_4() { + assert_format!( + r#" + fn foo() { + x |> { f == y } + } + "# + ); +} + #[test] fn format_validator() { assert_format!( diff --git a/crates/aiken-lang/src/tests/snapshots/format_grouped_expression.snap b/crates/aiken-lang/src/tests/snapshots/format_grouped_expression.snap new file mode 100644 index 00000000..b6c5fdc1 --- /dev/null +++ b/crates/aiken-lang/src/tests/snapshots/format_grouped_expression.snap @@ -0,0 +1,8 @@ +--- +source: crates/aiken-lang/src/tests/format.rs +description: "Code:\n\nfn foo() {\n y == { x |> f }\n}\n" +--- +fn foo() { + y == ( x |> f ) +} + diff --git a/crates/aiken-lang/src/tests/snapshots/format_grouped_expression_2.snap b/crates/aiken-lang/src/tests/snapshots/format_grouped_expression_2.snap new file mode 100644 index 00000000..b4485e14 --- /dev/null +++ b/crates/aiken-lang/src/tests/snapshots/format_grouped_expression_2.snap @@ -0,0 +1,8 @@ +--- +source: crates/aiken-lang/src/tests/format.rs +description: "Code:\n\nfn foo() {\n ( y == x ) |> f\n}\n" +--- +fn foo() { + ( y == x ) |> f +} + diff --git a/crates/aiken-lang/src/tests/snapshots/format_grouped_expression_3.snap b/crates/aiken-lang/src/tests/snapshots/format_grouped_expression_3.snap new file mode 100644 index 00000000..31fc7441 --- /dev/null +++ b/crates/aiken-lang/src/tests/snapshots/format_grouped_expression_3.snap @@ -0,0 +1,8 @@ +--- +source: crates/aiken-lang/src/tests/format.rs +description: "Code:\n\nfn foo() {\n { x |> f } == y\n}\n" +--- +fn foo() { + ( x |> f ) == y +} + diff --git a/crates/aiken-lang/src/tests/snapshots/format_grouped_expression_4.snap b/crates/aiken-lang/src/tests/snapshots/format_grouped_expression_4.snap new file mode 100644 index 00000000..0b591aea --- /dev/null +++ b/crates/aiken-lang/src/tests/snapshots/format_grouped_expression_4.snap @@ -0,0 +1,8 @@ +--- +source: crates/aiken-lang/src/tests/format.rs +description: "Code:\n\nfn foo() {\n x |> { f == y }\n}\n" +--- +fn foo() { + x |> f == y +} +