From 48c941d542cba23142c7396ad6b5543c571611e5 Mon Sep 17 00:00:00 2001 From: Joshua Warner Date: Mon, 2 Dec 2024 07:16:22 -0800 Subject: [PATCH] Add lifting for ext values in types --- crates/compiler/fmt/src/annotation.rs | 57 ++++++++++++++++++ .../comment_in_tuple_ext.expr.formatted.roc | 4 ++ .../pass/comment_in_tuple_ext.expr.result-ast | 59 +++++++++++++++++++ .../pass/comment_in_tuple_ext.expr.roc | 4 ++ .../test_syntax/tests/test_snapshots.rs | 1 + 5 files changed, 125 insertions(+) create mode 100644 crates/compiler/test_syntax/tests/snapshots/pass/comment_in_tuple_ext.expr.formatted.roc create mode 100644 crates/compiler/test_syntax/tests/snapshots/pass/comment_in_tuple_ext.expr.result-ast create mode 100644 crates/compiler/test_syntax/tests/snapshots/pass/comment_in_tuple_ext.expr.roc diff --git a/crates/compiler/fmt/src/annotation.rs b/crates/compiler/fmt/src/annotation.rs index 8a95cbe833..35e909699e 100644 --- a/crates/compiler/fmt/src/annotation.rs +++ b/crates/compiler/fmt/src/annotation.rs @@ -885,6 +885,63 @@ pub fn ann_lift_spaces<'a, 'b: 'a>( inner.after = merge_spaces_conservative(arena, inner.after, spaces); inner } + TypeAnnotation::Tuple { elems, ext } => { + if let Some(ext) = ext { + let lifted = ann_lift_spaces_after(arena, &ext.value); + Spaces { + before: &[], + item: TypeAnnotation::Tuple { + elems: *elems, + ext: Some(arena.alloc(Loc::at_zero(lifted.item))), + }, + after: lifted.after, + } + } else { + Spaces { + before: &[], + item: *ann, + after: &[], + } + } + } + TypeAnnotation::Record { fields, ext } => { + if let Some(ext) = ext { + let lifted = ann_lift_spaces_after(arena, &ext.value); + Spaces { + before: &[], + item: TypeAnnotation::Record { + fields: *fields, + ext: Some(arena.alloc(Loc::at_zero(lifted.item))), + }, + after: lifted.after, + } + } else { + Spaces { + before: &[], + item: *ann, + after: &[], + } + } + } + TypeAnnotation::TagUnion { ext, tags } => { + if let Some(ext) = ext { + let lifted = ann_lift_spaces_after(arena, &ext.value); + Spaces { + before: &[], + item: TypeAnnotation::TagUnion { + ext: Some(arena.alloc(Loc::at_zero(lifted.item))), + tags: *tags, + }, + after: lifted.after, + } + } else { + Spaces { + before: &[], + item: *ann, + after: &[], + } + } + } _ => Spaces { before: &[], item: *ann, diff --git a/crates/compiler/test_syntax/tests/snapshots/pass/comment_in_tuple_ext.expr.formatted.roc b/crates/compiler/test_syntax/tests/snapshots/pass/comment_in_tuple_ext.expr.formatted.roc new file mode 100644 index 0000000000..b76081e707 --- /dev/null +++ b/crates/compiler/test_syntax/tests/snapshots/pass/comment_in_tuple_ext.expr.formatted.roc @@ -0,0 +1,4 @@ +t : ()n # +# + +p # \ No newline at end of file diff --git a/crates/compiler/test_syntax/tests/snapshots/pass/comment_in_tuple_ext.expr.result-ast b/crates/compiler/test_syntax/tests/snapshots/pass/comment_in_tuple_ext.expr.result-ast new file mode 100644 index 0000000000..e69ed0ab0f --- /dev/null +++ b/crates/compiler/test_syntax/tests/snapshots/pass/comment_in_tuple_ext.expr.result-ast @@ -0,0 +1,59 @@ +SpaceAfter( + Defs( + Defs { + tags: [ + EitherIndex(2147483648), + ], + regions: [ + @0-11, + ], + space_before: [ + Slice { start: 0, length: 0 }, + ], + space_after: [ + Slice { start: 0, length: 0 }, + ], + spaces: [], + type_defs: [], + value_defs: [ + Annotation( + @0-1 Identifier { + ident: "t", + }, + @2-11 Tuple { + elems: [], + ext: Some( + @5-6 SpaceAfter( + BoundVariable( + "n", + ), + [ + LineComment( + "", + ), + LineComment( + "", + ), + ], + ), + ), + }, + ), + ], + }, + @12-13 SpaceBefore( + Var { + module_name: "", + ident: "p", + }, + [ + Newline, + ], + ), + ), + [ + LineComment( + "", + ), + ], +) diff --git a/crates/compiler/test_syntax/tests/snapshots/pass/comment_in_tuple_ext.expr.roc b/crates/compiler/test_syntax/tests/snapshots/pass/comment_in_tuple_ext.expr.roc new file mode 100644 index 0000000000..97c2671251 --- /dev/null +++ b/crates/compiler/test_syntax/tests/snapshots/pass/comment_in_tuple_ext.expr.roc @@ -0,0 +1,4 @@ +t:()(n# +# +) +p# diff --git a/crates/compiler/test_syntax/tests/test_snapshots.rs b/crates/compiler/test_syntax/tests/test_snapshots.rs index 47d973a382..63a6229808 100644 --- a/crates/compiler/test_syntax/tests/test_snapshots.rs +++ b/crates/compiler/test_syntax/tests/test_snapshots.rs @@ -344,6 +344,7 @@ mod test_snapshots { pass/comment_in_backpassing_args.expr, pass/comment_in_closure_pat.expr, pass/comment_in_closure_pat_apply.expr, + pass/comment_in_tuple_ext.expr, pass/comment_indent_in_parens.expr, pass/comment_inside_empty_list.expr, pass/comment_with_non_ascii.expr,