From 0c0369ad61329703b45ac90d0fa22e65e2d22df9 Mon Sep 17 00:00:00 2001 From: KtorZ Date: Sun, 8 Sep 2024 16:21:45 +0200 Subject: [PATCH] Fix needed parentheses under trace-if-false disappearing when formatting. --- CHANGELOG.md | 1 + crates/aiken-lang/src/format.rs | 12 ++++- crates/aiken-lang/src/tests/format.rs | 44 +++++++++++++++++++ .../tests/snapshots/trace_if_false_fail.snap | 7 +++ .../snapshots/trace_if_false_pipeline.snap | 7 +++ .../tests/snapshots/trace_if_false_todo.snap | 7 +++ .../tests/snapshots/trace_if_false_unop.snap | 7 +++ 7 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 crates/aiken-lang/src/tests/snapshots/trace_if_false_fail.snap create mode 100644 crates/aiken-lang/src/tests/snapshots/trace_if_false_pipeline.snap create mode 100644 crates/aiken-lang/src/tests/snapshots/trace_if_false_todo.snap create mode 100644 crates/aiken-lang/src/tests/snapshots/trace_if_false_unop.snap diff --git a/CHANGELOG.md b/CHANGELOG.md index 221cf27b..25e3c985 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - **aiken-lang**: Fix underflow in error message reported by the validator arity. See [#1013](https://github.com/aiken-lang/aiken/issues/1013) @KtorZ - **aiken-lang**: Fix list-pattern needlessly formatting over multiple lines. @KtorZ - **aiken-lang**: Fix formatter on long alternative patterns spanning over multiple lines. @KtorZ +- **aiken-lang**: Fix needed parentheses under trace-if-false operator for todo, fail, unop & pipelines; removed when formatting. @KtorZ ### Removed diff --git a/crates/aiken-lang/src/format.rs b/crates/aiken-lang/src/format.rs index 7aadd6e6..5a39ccd8 100644 --- a/crates/aiken-lang/src/format.rs +++ b/crates/aiken-lang/src/format.rs @@ -2028,7 +2028,17 @@ impl<'comments> Formatter<'comments> { fn wrap_unary_op<'a>(&mut self, expr: &'a UntypedExpr) -> Document<'a> { match expr { - UntypedExpr::BinOp { .. } => "(".to_doc().append(self.expr(expr, false)).append(")"), + UntypedExpr::Trace { + kind: TraceKind::Error, + .. + } + | UntypedExpr::Trace { + kind: TraceKind::Todo, + .. + } + | UntypedExpr::PipeLine { .. } + | UntypedExpr::BinOp { .. } + | UntypedExpr::UnOp { .. } => "(".to_doc().append(self.expr(expr, false)).append(")"), _ => self.wrap_expr(expr), } } diff --git a/crates/aiken-lang/src/tests/format.rs b/crates/aiken-lang/src/tests/format.rs index ee095e4d..6aa2cdd8 100644 --- a/crates/aiken-lang/src/tests/format.rs +++ b/crates/aiken-lang/src/tests/format.rs @@ -1296,3 +1296,47 @@ fn multiline_alternative_patterns() { "# ); } + +#[test] +fn trace_if_false_pipeline() { + assert_format!( + r#" + fn main(self) { + (self.extra_signatories |> list.has(self.extra_signatories, config.cold_key))? + } + "# + ); +} + +#[test] +fn trace_if_false_unop() { + assert_format!( + r#" + fn main(self) { + (!True)? + } + "# + ); +} + +#[test] +fn trace_if_false_todo() { + assert_format!( + r#" + fn main(self) { + (todo @"whatever")? + } + "# + ); +} + +#[test] +fn trace_if_false_fail() { + assert_format!( + r#" + fn main(self) { + (fail @"whatever")? + } + "# + ); +} diff --git a/crates/aiken-lang/src/tests/snapshots/trace_if_false_fail.snap b/crates/aiken-lang/src/tests/snapshots/trace_if_false_fail.snap new file mode 100644 index 00000000..5aefda9a --- /dev/null +++ b/crates/aiken-lang/src/tests/snapshots/trace_if_false_fail.snap @@ -0,0 +1,7 @@ +--- +source: crates/aiken-lang/src/tests/format.rs +description: "Code:\n\nfn main(self) {\n (fail @\"whatever\")?\n}\n" +--- +fn main(self) { + (fail @"whatever")? +} diff --git a/crates/aiken-lang/src/tests/snapshots/trace_if_false_pipeline.snap b/crates/aiken-lang/src/tests/snapshots/trace_if_false_pipeline.snap new file mode 100644 index 00000000..163fbd2b --- /dev/null +++ b/crates/aiken-lang/src/tests/snapshots/trace_if_false_pipeline.snap @@ -0,0 +1,7 @@ +--- +source: crates/aiken-lang/src/tests/format.rs +description: "Code:\n\nfn main(self) {\n (self.extra_signatories |> list.has(self.extra_signatories, config.cold_key))?\n}\n" +--- +fn main(self) { + (self.extra_signatories |> list.has(self.extra_signatories, config.cold_key))? +} diff --git a/crates/aiken-lang/src/tests/snapshots/trace_if_false_todo.snap b/crates/aiken-lang/src/tests/snapshots/trace_if_false_todo.snap new file mode 100644 index 00000000..ba18cef1 --- /dev/null +++ b/crates/aiken-lang/src/tests/snapshots/trace_if_false_todo.snap @@ -0,0 +1,7 @@ +--- +source: crates/aiken-lang/src/tests/format.rs +description: "Code:\n\nfn main(self) {\n (todo @\"whatever\")?\n}\n" +--- +fn main(self) { + (todo @"whatever")? +} diff --git a/crates/aiken-lang/src/tests/snapshots/trace_if_false_unop.snap b/crates/aiken-lang/src/tests/snapshots/trace_if_false_unop.snap new file mode 100644 index 00000000..7bd4c48e --- /dev/null +++ b/crates/aiken-lang/src/tests/snapshots/trace_if_false_unop.snap @@ -0,0 +1,7 @@ +--- +source: crates/aiken-lang/src/tests/format.rs +description: "Code:\n\nfn main(self) {\n (!True)?\n}\n" +--- +fn main(self) { + (!True)? +}