From 3f7b59ca2b3f3eaa5659743dfa28dce9f7302a74 Mon Sep 17 00:00:00 2001 From: Seiichi Uchida Date: Sun, 18 Mar 2018 12:33:59 +0900 Subject: [PATCH] Break before meta variables when using multiple lines --- src/macros.rs | 16 ++++++++++++++-- tests/source/macro_rules.rs | 3 +++ tests/target/macro_rules.rs | 4 ++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/macros.rs b/src/macros.rs index e600b1196784..f71c648baac6 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -519,6 +519,14 @@ impl MacroArgKind { } } + fn has_meta_var(&self) -> bool { + match *self { + MacroArgKind::MetaVariable(..) => true, + MacroArgKind::Repeat(_, ref args, _, _) => args.iter().any(|a| a.kind.has_meta_var()), + _ => false, + } + } + fn rewrite( &self, context: &RewriteContext, @@ -812,8 +820,12 @@ fn wrap_macro_args_inner( }; result.push_str(&arg.rewrite(context, nested_shape, use_multiple_lines)?); - if use_multiple_lines && arg.kind.ends_with_space() { - result.pop(); + if use_multiple_lines + && (arg.kind.ends_with_space() || iter.peek().map_or(false, |a| a.kind.has_meta_var())) + { + if arg.kind.ends_with_space() { + result.pop(); + } result.push_str(&indent_str); } else if let Some(ref next_arg) = iter.peek() { let space_before_dollar = diff --git a/tests/source/macro_rules.rs b/tests/source/macro_rules.rs index 17bb30678692..2d0d0e80a6b2 100644 --- a/tests/source/macro_rules.rs +++ b/tests/source/macro_rules.rs @@ -7,6 +7,9 @@ macro_rules! m { ( $($beginning:ident),*;$middle:ident;$($end:ident),* ) => (); ( $($beginning: ident),*; $middle: ident; $($end: ident),*; $($beginning: ident),*; $middle: ident; $($end: ident),* ) => {}; ( $ name : ident ( $ ( $ dol : tt $ var : ident ) * ) $ ( $ body : tt ) * ) => (); + ( $( $ i : ident : $ ty : ty , $def : expr , $stb : expr , $ ( $ dstring : tt ) , + ) ; + $ ( ; ) * + $( $ i : ident : $ ty : ty , $def : expr , $stb : expr , $ ( $ dstring : tt ) , + ) ; + $ ( ; ) * + ) => {}; } macro_rules! m { diff --git a/tests/target/macro_rules.rs b/tests/target/macro_rules.rs index 5bedc2a82588..54d7dde68427 100644 --- a/tests/target/macro_rules.rs +++ b/tests/target/macro_rules.rs @@ -14,6 +14,10 @@ macro_rules! m { $($end: ident),* ) => {}; ($name: ident($($dol: tt $var: ident)*) $($body: tt)*) => {}; + ( + $($i: ident: $ty: ty, $def: expr, $stb: expr, $($dstring: tt),+);+ $(;)* + $($i: ident: $ty: ty, $def: expr, $stb: expr, $($dstring: tt),+);+ $(;)* + ) => {}; } macro_rules! m {