From b7ea6ea391d4b98bf48a9516379f1968502afbda Mon Sep 17 00:00:00 2001 From: KtorZ Date: Sat, 7 Sep 2024 11:32:18 +0200 Subject: [PATCH] Fix list-pattern formatting --- CHANGELOG.md | 1 + crates/aiken-lang/src/format.rs | 16 ++++++++++------ crates/aiken-lang/src/tests/format.rs | 18 ++++++++++++++++++ .../src/tests/snapshots/list_pattern.snap | 14 ++++++++++++++ 4 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 crates/aiken-lang/src/tests/snapshots/list_pattern.snap diff --git a/CHANGELOG.md b/CHANGELOG.md index 12fd0a31..3f40d245 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ### Changed - **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 ### Removed diff --git a/crates/aiken-lang/src/format.rs b/crates/aiken-lang/src/format.rs index 6bfbc3d0..472f9925 100644 --- a/crates/aiken-lang/src/format.rs +++ b/crates/aiken-lang/src/format.rs @@ -1878,12 +1878,16 @@ impl<'comments> Formatter<'comments> { .. } | UntypedExpr::Sequence { .. } - | UntypedExpr::Assignment { .. } => " {" - .to_doc() - .append(line().append(self.expr(expr, true)).nest(INDENT).group()) - .append(line()) - .append("}") - .force_break(), + | UntypedExpr::Assignment { .. } => Document::Str(" {") + .append(break_("", " ").nest(INDENT)) + .append( + self.expr(expr, true) + .nest(INDENT) + .group() + .append(line()) + .append("}") + .force_break(), + ), UntypedExpr::Fn { .. } | UntypedExpr::List { .. } => { line().append(self.expr(expr, false)).nest(INDENT).group() diff --git a/crates/aiken-lang/src/tests/format.rs b/crates/aiken-lang/src/tests/format.rs index 353e04ed..0ea0f1c0 100644 --- a/crates/aiken-lang/src/tests/format.rs +++ b/crates/aiken-lang/src/tests/format.rs @@ -1247,3 +1247,21 @@ fn format_validator_exhaustive_handlers_extra_non_default_fallback() { "# ); } + +#[test] +fn list_pattern() { + assert_format!( + r#" + fn foo() { + when xs is { + [_] -> True + [1, 2] -> False + [_, x] -> { + let y = x + y == 42 + } + } + } + "# + ); +} diff --git a/crates/aiken-lang/src/tests/snapshots/list_pattern.snap b/crates/aiken-lang/src/tests/snapshots/list_pattern.snap new file mode 100644 index 00000000..91ed3b65 --- /dev/null +++ b/crates/aiken-lang/src/tests/snapshots/list_pattern.snap @@ -0,0 +1,14 @@ +--- +source: crates/aiken-lang/src/tests/format.rs +description: "Code:\n\nfn foo() {\n when xs is {\n [_] -> True\n [1, 2] -> False\n [_, x] -> {\n let y = x\n y == 42\n }\n }\n}\n" +--- +fn foo() { + when xs is { + [_] -> True + [1, 2] -> False + [_, x] -> { + let y = x + y == 42 + } + } +}