From fad74c8ac9dcf9cd0f9db5439a30e5cadf5d6542 Mon Sep 17 00:00:00 2001 From: sinkuu Date: Mon, 13 Feb 2017 03:16:11 +0900 Subject: [PATCH] Support field-init-shorthand (#1308) --- src/expr.rs | 35 ++++++++++++++++++++--------------- tests/source/struct_lits.rs | 8 ++++++++ tests/target/struct_lits.rs | 15 +++++++++++++++ 3 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/expr.rs b/src/expr.rs index 4b7a76c733e..2498ee653af 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -1837,22 +1837,27 @@ pub fn type_annotation_separator(config: &Config) -> &str { fn rewrite_field(context: &RewriteContext, field: &ast::Field, shape: Shape) -> Option { let name = &field.ident.node.to_string(); - let separator = type_annotation_separator(context.config); - let overhead = name.len() + separator.len(); - let expr = field.expr.rewrite(context, - Shape::legacy(try_opt!(shape.width.checked_sub(overhead)), - shape.indent + overhead)); + if field.is_shorthand { + Some(name.to_string()) + } else { + let separator = type_annotation_separator(context.config); + let overhead = name.len() + separator.len(); + let expr = field.expr.rewrite(context, + Shape::legacy(try_opt!(shape.width.checked_sub(overhead)), + shape.indent + overhead)); - match expr { - Some(e) => Some(format!("{}{}{}", name, separator, e)), - None => { - let expr_offset = shape.indent.block_indent(context.config); - let expr = field.expr.rewrite(context, - Shape::legacy(try_opt!(context.config - .max_width - .checked_sub(expr_offset.width())), - expr_offset)); - expr.map(|s| format!("{}:\n{}{}", name, expr_offset.to_string(&context.config), s)) + match expr { + Some(e) => Some(format!("{}{}{}", name, separator, e)), + None => { + let expr_offset = shape.indent.block_indent(context.config); + let expr = field.expr + .rewrite(context, + Shape::legacy(try_opt!(context.config + .max_width + .checked_sub(expr_offset.width())), + expr_offset)); + expr.map(|s| format!("{}:\n{}{}", name, expr_offset.to_string(&context.config), s)) + } } } } diff --git a/tests/source/struct_lits.rs b/tests/source/struct_lits.rs index 8d762eed980..c5aaf7ef881 100644 --- a/tests/source/struct_lits.rs +++ b/tests/source/struct_lits.rs @@ -133,3 +133,11 @@ fn issue835() { }; MyStruct {} } + +fn field_init_shorthand() { + MyStruct { x, y, z }; + MyStruct { x, y, z, .. base }; + Foo { aaaaaaaaaa, bbbbbbbb, cccccccccc, dddddddddd, /* a comment */ + eeeeeeeee }; + Record { ffffffffffffffffffffffffffieldsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa }; +} diff --git a/tests/target/struct_lits.rs b/tests/target/struct_lits.rs index 5ab8de3f235..05840b703d3 100644 --- a/tests/target/struct_lits.rs +++ b/tests/target/struct_lits.rs @@ -169,3 +169,18 @@ fn issue835() { }; MyStruct {} } + +fn field_init_shorthand() { + MyStruct { x, y, z }; + MyStruct { x, y, z, ..base }; + Foo { + aaaaaaaaaa, + bbbbbbbb, + cccccccccc, + dddddddddd, // a comment + eeeeeeeee, + }; + Record { + ffffffffffffffffffffffffffieldsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, + }; +}