Skip to content

Commit 3f7b59c

Browse files
committed
Break before meta variables when using multiple lines
1 parent 95507e3 commit 3f7b59c

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

src/macros.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,14 @@ impl MacroArgKind {
519519
}
520520
}
521521

522+
fn has_meta_var(&self) -> bool {
523+
match *self {
524+
MacroArgKind::MetaVariable(..) => true,
525+
MacroArgKind::Repeat(_, ref args, _, _) => args.iter().any(|a| a.kind.has_meta_var()),
526+
_ => false,
527+
}
528+
}
529+
522530
fn rewrite(
523531
&self,
524532
context: &RewriteContext,
@@ -812,8 +820,12 @@ fn wrap_macro_args_inner(
812820
};
813821
result.push_str(&arg.rewrite(context, nested_shape, use_multiple_lines)?);
814822

815-
if use_multiple_lines && arg.kind.ends_with_space() {
816-
result.pop();
823+
if use_multiple_lines
824+
&& (arg.kind.ends_with_space() || iter.peek().map_or(false, |a| a.kind.has_meta_var()))
825+
{
826+
if arg.kind.ends_with_space() {
827+
result.pop();
828+
}
817829
result.push_str(&indent_str);
818830
} else if let Some(ref next_arg) = iter.peek() {
819831
let space_before_dollar =

tests/source/macro_rules.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ macro_rules! m {
77
( $($beginning:ident),*;$middle:ident;$($end:ident),* ) => ();
88
( $($beginning: ident),*; $middle: ident; $($end: ident),*; $($beginning: ident),*; $middle: ident; $($end: ident),* ) => {};
99
( $ name : ident ( $ ( $ dol : tt $ var : ident ) * ) $ ( $ body : tt ) * ) => ();
10+
( $( $ i : ident : $ ty : ty , $def : expr , $stb : expr , $ ( $ dstring : tt ) , + ) ; + $ ( ; ) *
11+
$( $ i : ident : $ ty : ty , $def : expr , $stb : expr , $ ( $ dstring : tt ) , + ) ; + $ ( ; ) *
12+
) => {};
1013
}
1114

1215
macro_rules! m {

tests/target/macro_rules.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ macro_rules! m {
1414
$($end: ident),*
1515
) => {};
1616
($name: ident($($dol: tt $var: ident)*) $($body: tt)*) => {};
17+
(
18+
$($i: ident: $ty: ty, $def: expr, $stb: expr, $($dstring: tt),+);+ $(;)*
19+
$($i: ident: $ty: ty, $def: expr, $stb: expr, $($dstring: tt),+);+ $(;)*
20+
) => {};
1721
}
1822

1923
macro_rules! m {

0 commit comments

Comments
 (0)