From c2a5cf347934fe03978cf2b390fc8771c736d486 Mon Sep 17 00:00:00 2001 From: Markus Date: Thu, 10 Aug 2017 18:01:09 +0200 Subject: [PATCH] fix(format): Indent long record pattern matches --- base/src/ast.rs | 2 +- base/src/pretty_print.rs | 45 +++++++++++++++++++----------------- parser/tests/pretty_print.rs | 14 +++++++++++ 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/base/src/ast.rs b/base/src/ast.rs index 9e89172bf7..3c0b393e0b 100644 --- a/base/src/ast.rs +++ b/base/src/ast.rs @@ -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) }) }; diff --git a/base/src/pretty_print.rs b/base/src/pretty_print.rs index 4b3f5cb4ed..f9b835ebf4 100644 --- a/base/src/pretty_print.rs +++ b/base/src/pretty_print.rs @@ -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; diff --git a/parser/tests/pretty_print.rs b/parser/tests/pretty_print.rs index 3ae0b44a22..646a0cc9f8 100644 --- a/parser/tests/pretty_print.rs +++ b/parser/tests/pretty_print.rs @@ -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); } \ No newline at end of file