Only allow indented else if there's a newline after the else

This commit is contained in:
Joshua Warner 2024-12-02 07:42:24 -08:00
parent 48c941d542
commit cabe67f88d
No known key found for this signature in database
GPG key ID: 89AD497003F93FDD
5 changed files with 94 additions and 1 deletions

View file

@ -2762,8 +2762,12 @@ fn if_expr_help<'a>(options: ExprParseOptions) -> impl Parser<'a, Expr<'a>, EIf<
} }
}; };
let has_newline_next = require_newline_or_eof(EExpr::IndentEnd)
.parse(arena, state_final_else.clone(), min_indent)
.is_ok();
let else_indent = state_final_else.line_indent(); let else_indent = state_final_else.line_indent();
let indented_else = else_indent > if_indent; let indented_else = else_indent > if_indent && has_newline_next;
let min_indent = if !indented_else { let min_indent = if !indented_else {
else_indent + 1 else_indent + 1

View file

@ -0,0 +1,7 @@
if
h
then
A
else
&e
s #

View file

@ -0,0 +1,75 @@
SpaceAfter(
Defs(
Defs {
tags: [
EitherIndex(2147483648),
],
regions: [
@0-20,
],
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(
@0-20 If {
if_thens: [
(
@3-4 SpaceBefore(
SpaceAfter(
Var {
module_name: "",
ident: "h",
},
[
Newline,
],
),
[
Newline,
],
),
@10-11 SpaceBefore(
SpaceAfter(
Tag(
"A",
),
[
Newline,
],
),
[
Newline,
],
),
),
],
final_else: @18-20 RecordUpdater(
"e",
),
indented_else: false,
},
),
],
},
@21-22 SpaceBefore(
Var {
module_name: "",
ident: "s",
},
[
Newline,
],
),
),
[
LineComment(
"",
),
],
)

View file

@ -0,0 +1,6 @@
if
h
then
A
else &e
s#

View file

@ -274,6 +274,7 @@ mod test_snapshots {
pass/ability_multi_line.expr, pass/ability_multi_line.expr,
pass/ability_single_line.expr, pass/ability_single_line.expr,
pass/ability_two_in_a_row.expr, pass/ability_two_in_a_row.expr,
pass/accidentally_indented_else.expr,
pass/add_var_with_spaces.expr, pass/add_var_with_spaces.expr,
pass/add_with_spaces.expr, pass/add_with_spaces.expr,
pass/alias_ann_in_parens.expr, pass/alias_ann_in_parens.expr,