From 47a15cf8b20800bde8ca113bbb80c593befe088e Mon Sep 17 00:00:00 2001 From: KtorZ Date: Sun, 15 Sep 2024 14:59:47 +0200 Subject: [PATCH] Fix formatting of long multiline if/is expressions. --- CHANGELOG.md | 1 + crates/aiken-lang/src/format.rs | 5 +-- crates/aiken-lang/src/tests/check.rs | 12 +++++++ crates/aiken-lang/src/tests/format.rs | 32 +++++++++++++++++++ .../src/tests/snapshots/multiline_if_is.snap | 12 +++++++ .../tests/snapshots/multiline_if_is_2.snap | 15 +++++++++ 6 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 crates/aiken-lang/src/tests/snapshots/multiline_if_is.snap create mode 100644 crates/aiken-lang/src/tests/snapshots/multiline_if_is_2.snap diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c0f2149..d14f59ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - **aiken-project**: Fix documentation link-tree generation messing up with modules when re-inserting the same module. @KtorZ - **aiken-lang**: Fix formatter adding extra unnecessary newlines after literal lists clause values or assignments. @KtorZ +- **aiken0lang**: Fix formatting of long multi-line if/is expressions. @KtorZ ### Removed diff --git a/crates/aiken-lang/src/format.rs b/crates/aiken-lang/src/format.rs index a9d24430..21a89dff 100644 --- a/crates/aiken-lang/src/format.rs +++ b/crates/aiken-lang/src/format.rs @@ -1323,10 +1323,7 @@ impl<'comments> Formatter<'comments> { .group() }; - break_("", " ") - .append("is") - .append(break_("", " ")) - .append(is) + break_("", " ").append("is ").append(is) } None => nil(), }) diff --git a/crates/aiken-lang/src/tests/check.rs b/crates/aiken-lang/src/tests/check.rs index c41f807e..26adb637 100644 --- a/crates/aiken-lang/src/tests/check.rs +++ b/crates/aiken-lang/src/tests/check.rs @@ -3264,3 +3264,15 @@ fn constant_usage() { }] if name == "some_string_constant" )); } + +#[test] +fn wrong_arity_on_known_builtin() { + let source_code = r#" + const foo: Option = Some() + "#; + + assert!(matches!( + check_validator(parse(source_code)), + Err((_, Error::IncorrectFunctionCallArity { .. })) + )) +} diff --git a/crates/aiken-lang/src/tests/format.rs b/crates/aiken-lang/src/tests/format.rs index 5a47510f..64f10449 100644 --- a/crates/aiken-lang/src/tests/format.rs +++ b/crates/aiken-lang/src/tests/format.rs @@ -1388,3 +1388,35 @@ fn callback_and_op() { "# ); } + +#[test] +fn multiline_if_is() { + assert_format!( + r#" + fn foo() { + if first_asset + is + Pair(first_asset_policy, first_asset_tokens): Pair { + True + } else { + False } + } + "# + ); +} + +#[test] +fn multiline_if_is_2() { + assert_format!( + r#" + fn foo() { + if [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0] + is + Pair(first_asset_policy, first_asset_tokens): Pair { + True + } else { + False } + } + "# + ); +} diff --git a/crates/aiken-lang/src/tests/snapshots/multiline_if_is.snap b/crates/aiken-lang/src/tests/snapshots/multiline_if_is.snap new file mode 100644 index 00000000..0b5c4eaa --- /dev/null +++ b/crates/aiken-lang/src/tests/snapshots/multiline_if_is.snap @@ -0,0 +1,12 @@ +--- +source: crates/aiken-lang/src/tests/format.rs +description: "Code:\n\nfn foo() {\n if first_asset\n is\n Pair(first_asset_policy, first_asset_tokens): Pair {\n True\n } else {\n False }\n}\n" +--- +fn foo() { + if first_asset + is Pair(first_asset_policy, first_asset_tokens): Pair { + True + } else { + False + } +} diff --git a/crates/aiken-lang/src/tests/snapshots/multiline_if_is_2.snap b/crates/aiken-lang/src/tests/snapshots/multiline_if_is_2.snap new file mode 100644 index 00000000..2758cf59 --- /dev/null +++ b/crates/aiken-lang/src/tests/snapshots/multiline_if_is_2.snap @@ -0,0 +1,15 @@ +--- +source: crates/aiken-lang/src/tests/format.rs +description: "Code:\n\nfn foo() {\n if [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]\n is\n Pair(first_asset_policy, first_asset_tokens): Pair {\n True\n } else {\n False }\n}\n" +--- +fn foo() { + if [ + 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 0, + ] + is Pair(first_asset_policy, first_asset_tokens): Pair { + True + } else { + False + } +}