Skip to content

Commit

Permalink
Merge pull request #7536 from joshuawarner32/remove-indented-else
Browse files Browse the repository at this point in the history
Remove indented-else syntax from the formatter
  • Loading branch information
lukewilliamboswell authored Jan 21, 2025
2 parents 2493c8a + 20d092e commit 5b4c8e7
Show file tree
Hide file tree
Showing 8 changed files with 121 additions and 50 deletions.
30 changes: 6 additions & 24 deletions crates/compiler/fmt/src/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -233,16 +233,9 @@ fn format_expr_only(
Expr::If {
if_thens: branches,
final_else,
indented_else,
indented_else: _,
} => {
fmt_if(
buf,
branches,
final_else,
item.is_multiline(),
*indented_else,
indent,
);
fmt_if(buf, branches, final_else, item.is_multiline(), indent);
}
Expr::When(loc_condition, branches) => fmt_when(buf, loc_condition, branches, indent),
Expr::Tuple(items) => fmt_expr_collection(buf, indent, Braces::Round, *items, Newlines::No),
Expand Down Expand Up @@ -1927,8 +1920,6 @@ fn fmt_if<'a>(
branches: &'a [(Loc<Expr<'a>>, Loc<Expr<'a>>)],
final_else: &'a Loc<Expr<'a>>,
is_multiline: bool,
indented_else: bool,

indent: u16,
) {
// let is_multiline_then = loc_then.is_multiline();
Expand Down Expand Up @@ -1972,29 +1963,20 @@ fn fmt_if<'a>(
}

buf.ensure_ends_with_whitespace();
if indented_else {
buf.indent(indent + INDENT);
buf.push_str("else");
buf.newline();
buf.newline();
} else if is_multiline {
buf.indent(indent);
buf.push_str("else");
buf.indent(indent);
buf.push_str("else");
if is_multiline {
buf.newline();
} else {
buf.indent(indent);
buf.push_str("else");
buf.spaces(1);
}
let indent = if indented_else { indent } else { return_indent };
final_else.format(buf, indent);
final_else.format(buf, return_indent);
}

fn fmt_closure<'a>(
buf: &mut Buf,
loc_patterns: &'a [Loc<Pattern<'a>>],
loc_ret: &'a Loc<Expr<'a>>,

indent: u16,
) {
use self::Expr::*;
Expand Down
4 changes: 2 additions & 2 deletions crates/compiler/parse/src/normalize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -778,11 +778,11 @@ impl<'a> Normalize<'a> for Expr<'a> {
Expr::If {
if_thens,
final_else,
indented_else,
indented_else: _,
} => Expr::If {
if_thens: if_thens.normalize(arena),
final_else: arena.alloc(final_else.normalize(arena)),
indented_else,
indented_else: false,
},
Expr::When(a, b) => Expr::When(arena.alloc(a.normalize(arena)), b.normalize(arena)),
Expr::ParensAround(a) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
if !a! then
t
else
l
5
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
@1-24 SpaceAfter(
Defs(
Defs {
tags: [
EitherIndex(2147483648),
],
regions: [
@1-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: [],
value_defs: [
Stmt(
@1-22 If {
if_thens: [
(
@3-6 UnaryOp(
@4-6 Var {
module_name: "",
ident: "a!",
},
@3-4 Not,
),
@11-12 SpaceBefore(
SpaceAfter(
Var {
module_name: "",
ident: "t",
},
[
Newline,
],
),
[
Newline,
],
),
),
],
final_else: @21-22 SpaceBefore(
Var {
module_name: "",
ident: "l",
},
[
Newline,
],
),
indented_else: true,
},
),
],
},
@23-24 SpaceBefore(
Num(
"5",
),
[
Newline,
],
),
),
[
Newline,
],
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
if!a!then
t
else
l
5
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ if
k
then
A
else

e
r
else
e
r
47 changes: 27 additions & 20 deletions crates/compiler/test_syntax/tests/test_fmt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3061,15 +3061,15 @@ mod test_fmt {
x,
y
}| a
identity 43
"
),
indoc!(
r"
identity =
|{ x, y }| a
identity 43
"
),
Expand All @@ -3083,15 +3083,15 @@ mod test_fmt {
x,
y
} -> a
identity 43
"
),
indoc!(
r"
identity =
|{ x, y }| a
identity 43
"
),
Expand Down Expand Up @@ -3996,15 +3996,25 @@ mod test_fmt {

#[test]
fn early_return_else() {
expr_formats_same(indoc!(
r"
if foo then
bar
else
expr_formats_to(
indoc!(
r"
if foo then
bar
else
baz
"
));
baz
"
),
indoc!(
r"
if foo then
bar
else
baz
"
),
);

expr_formats_to(
indoc!(
Expand All @@ -4019,9 +4029,8 @@ mod test_fmt {
r"
if thing then
whatever
else
too close
else
too close
"
),
);
Expand All @@ -4031,18 +4040,16 @@ mod test_fmt {
r"
if isGrowing plant then
LetBe
else
else
Water
"
),
indoc!(
r"
if isGrowing plant then
LetBe
else
Water
else
Water
"
),
);
Expand Down
1 change: 1 addition & 0 deletions crates/compiler/test_syntax/tests/test_snapshots.rs
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,7 @@ mod test_snapshots {
pass/highest_float.expr,
pass/highest_int.expr,
pass/i_over_not_g.expr,
pass/if_bang_then_bang_indented_else.expr,
pass/if_bang_then_else_one_line.expr,
pass/if_def.expr,
pass/if_newline_then_negate_else_recordupdater.expr,
Expand Down

0 comments on commit 5b4c8e7

Please sign in to comment.