Force initial newline in multiline ability def (fixes #7365)

This commit is contained in:
Joshua Warner 2024-12-13 20:09:17 -08:00
parent abde9e86b1
commit f86f440f2f
No known key found for this signature in database
GPG key ID: 89AD497003F93FDD
6 changed files with 96 additions and 8 deletions

View file

@ -494,12 +494,22 @@ impl<'a> Formattable for TypeDef<'a> {
);
} else {
for member in members.iter() {
member.format_with_options(
buf,
Parens::NotNeeded,
Newlines::Yes,
indent + INDENT,
);
let Spaces {
before,
item,
after,
} = member.name.value.extract_spaces();
fmt_spaces(buf, before.iter(), indent + INDENT);
buf.ensure_ends_with_newline();
buf.indent(indent + INDENT);
buf.push_str(item);
fmt_spaces(buf, after.iter(), indent + INDENT);
buf.spaces(1);
buf.push(':');
buf.spaces(1);
member.typ.value.format(buf, indent + 2 * INDENT);
}
}
}

View file

@ -0,0 +1,5 @@
A implements
q : U
e
-> p
d

View file

@ -0,0 +1,68 @@
@0-24 SpaceAfter(
Defs(
Defs {
tags: [
EitherIndex(0),
],
regions: [
@0-22,
],
space_before: [
Slice<roc_parse::ast::CommentOrNewline> { start: 0, length: 0 },
],
space_after: [
Slice<roc_parse::ast::CommentOrNewline> { start: 0, length: 0 },
],
spaces: [],
type_defs: [
Ability {
header: TypeHeader {
name: @0-1 "A",
vars: [],
},
loc_implements: @2-12 Implements,
members: [
AbilityMember {
name: @13-14 "q",
typ: @15-22 Function(
[
@15-19 Apply(
"",
"U",
[
@18-19 SpaceBefore(
BoundVariable(
"e",
),
[
Newline,
],
),
],
),
],
Pure,
@21-22 BoundVariable(
"p",
),
),
},
],
},
],
value_defs: [],
},
@23-24 SpaceBefore(
Var {
module_name: "",
ident: "d",
},
[
Newline,
],
),
),
[
Newline,
],
)

View file

@ -0,0 +1,3 @@
A implements q:U
e->p
d

View file

@ -1,3 +1,4 @@
S implements d : J
S implements
d : J
m #
D

View file

@ -424,6 +424,7 @@ mod test_snapshots {
pass/i_over_not_g.expr,
pass/if_def.expr,
pass/if_newline_then_negate_else_recordupdater.expr,
pass/implements_newline_in_fn_ty.expr,
pass/implements_newlines_comments.expr,
pass/import.moduledefs,
pass/import_from_package.moduledefs,