Skip to content

Commit

Permalink
fix(format): Indent long record pattern matches
Browse files Browse the repository at this point in the history
  • Loading branch information
Marwes committed Aug 10, 2017
1 parent d7e238d commit c2a5cf3
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 22 deletions.
2 changes: 1 addition & 1 deletion base/src/ast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -567,7 +567,7 @@ fn get_return_type(env: &TypeEnv, alias_type: &ArcType, arg_count: usize) -> Arc
});

env.find_type_info(alias_ident).unwrap_or_else(|| {
panic!("Unexpected type {:?} is not a function", alias_type)
panic!("Unexpected type {} is not a function", alias_type)
})
};

Expand Down
45 changes: 24 additions & 21 deletions base/src/pretty_print.rs
Original file line number Diff line number Diff line change
Expand Up @@ -134,35 +134,38 @@ where
ref types,
..
} => {
let doc = arena.concat(types.iter().map(|field| {
chain![arena;
arena.space(),
field.name.value.as_ref()
]
}).chain(fields.iter().map(|field| {
chain![arena;
arena.space(),
ident(arena, field.name.value.as_ref()),
match field.value {
Some(ref new_name) => {
chain![arena;
" = ",
pretty_pattern(arena, new_name)
]
}
None => arena.nil(),
}
]
}))
.intersperse(arena.text(",")))
.nest(INDENT);
chain![arena;
"{",
arena.concat(types.iter().map(|field| {
chain![arena;
arena.space(),
field.name.value.as_ref()
]
}).chain(fields.iter().map(|field| {
chain![arena;
arena.space(),
ident(arena, field.name.value.as_ref()),
match field.value {
Some(ref new_name) => {
chain![arena;
" = ",
pretty_pattern(arena, new_name)
]
}
None => arena.nil(),
}
]
})).intersperse(arena.text(","))),
doc,
if types.is_empty() && fields.is_empty() {
arena.nil()
} else {
arena.space()
},
"}"
]
].group()
}
Pattern::Tuple { ref elems, .. } => {
chain![arena;
Expand Down
14 changes: 14 additions & 0 deletions parser/tests/pretty_print.rs
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,20 @@ fn nested_constructor_pattern() {
match None with
| Some (Some x) -> x
| _ -> 123
"#;
assert_eq!(&format_expr(expr).unwrap(), expr);
}

#[test]
fn long_pattern_match() {
let expr = r#"
let {
CCCCCCCCCCCCCC,
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
} =
test
123
"#;
assert_eq!(&format_expr(expr).unwrap(), expr);
}

0 comments on commit c2a5cf3

Please sign in to comment.