@@ -311,7 +311,6 @@ pub fn rewrite_macro_def(
311
311
let multi_branch_style = def. legacy || parsed_def. branches . len ( ) != 1 ;
312
312
313
313
let mac_indent = if multi_branch_style {
314
- result += " {" ;
315
314
indent. block_indent ( context. config )
316
315
} else {
317
316
indent
@@ -322,28 +321,25 @@ pub fn rewrite_macro_def(
322
321
let branch_items = itemize_list (
323
322
context. codemap ,
324
323
parsed_def. branches . iter ( ) ,
325
- "" ,
326
- "" ,
327
- |branch| branch. args_span . lo ( ) ,
328
- |branch| branch. body . hi ( ) ,
324
+ "}" ,
325
+ ";" ,
326
+ |branch| {
327
+ branch. span . lo ( )
328
+ } ,
329
+ |branch| {
330
+ branch. span . hi ( )
331
+ } ,
329
332
|branch| {
330
- let mut result = String :: new ( ) ;
331
-
332
333
// Only attempt to format function-like macros.
333
334
if branch. args_paren_kind != DelimToken :: Paren {
334
335
// FIXME(#1539): implement for non-sugared macros.
335
336
return None ;
336
337
}
337
338
338
- let args = format_macro_args ( branch. args . clone ( ) ) ?;
339
+ let mut result = format_macro_args ( branch. args . clone ( ) ) ?;
339
340
340
341
if multi_branch_style {
341
- result += "\n " ;
342
- result += & mac_indent_str;
343
- result += & args;
344
342
result += " =>" ;
345
- } else {
346
- result += & args;
347
343
}
348
344
349
345
// The macro body is the most interesting part. It might end up as various
@@ -415,13 +411,14 @@ pub fn rewrite_macro_def(
415
411
}
416
412
417
413
result += "}" ;
414
+
418
415
if def. legacy {
419
416
result += ";" ;
420
417
}
421
- result += " \n " ;
418
+
422
419
Some ( result)
423
420
} ,
424
- span . lo ( ) ,
421
+ context . codemap . span_after ( span , "{" ) ,
425
422
span. hi ( ) ,
426
423
false
427
424
) . collect :: < Vec < _ > > ( ) ;
@@ -436,14 +433,20 @@ pub fn rewrite_macro_def(
436
433
trailing_separator : SeparatorTactic :: Never ,
437
434
separator_place : SeparatorPlace :: Back ,
438
435
shape : arm_shape,
439
- ends_with_newline : false ,
436
+ ends_with_newline : true ,
440
437
preserve_newline : true ,
441
438
config : context. config ,
442
439
} ;
443
440
441
+ if multi_branch_style {
442
+ result += " {\n " ;
443
+ result += & mac_indent_str;
444
+ }
445
+
444
446
result += write_list ( & branch_items, & fmt) ?. as_str ( ) ;
445
447
446
448
if multi_branch_style {
449
+ result += "\n " ;
447
450
result += & indent. to_string ( context. config ) ;
448
451
result += "}" ;
449
452
}
@@ -786,28 +789,29 @@ impl MacroParser {
786
789
// `(` ... `)` `=>` `{` ... `}`
787
790
fn parse_branch ( & mut self ) -> Option < MacroBranch > {
788
791
let tok = self . toks . next ( ) ?;
789
- let ( args_span , args_paren_kind) = match tok {
792
+ let ( lo , args_paren_kind) = match tok {
790
793
TokenTree :: Token ( ..) => return None ,
791
- TokenTree :: Delimited ( sp, ref d) => ( sp, d. delim ) ,
794
+ TokenTree :: Delimited ( sp, ref d) => ( sp. lo ( ) , d. delim ) ,
792
795
} ;
793
796
let args = tok. joint ( ) . into ( ) ;
794
797
match self . toks . next ( ) ? {
795
798
TokenTree :: Token ( _, Token :: FatArrow ) => { }
796
799
_ => return None ,
797
800
}
798
- let body = match self . toks . next ( ) ? {
801
+ let ( mut hi , body) = match self . toks . next ( ) ? {
799
802
TokenTree :: Token ( ..) => return None ,
800
803
TokenTree :: Delimited ( sp, _) => {
801
804
let data = sp. data ( ) ;
802
- Span :: new ( data. lo + BytePos ( 1 ) , data. hi - BytePos ( 1 ) , data. ctxt )
805
+ ( data . hi , Span :: new ( data. lo + BytePos ( 1 ) , data. hi - BytePos ( 1 ) , data. ctxt ) )
803
806
}
804
807
} ;
805
- if let Some ( TokenTree :: Token ( _ , Token :: Semi ) ) = self . toks . look_ahead ( 0 ) {
808
+ if let Some ( TokenTree :: Token ( sp , Token :: Semi ) ) = self . toks . look_ahead ( 0 ) {
806
809
self . toks . next ( ) ;
810
+ hi = sp. hi ( ) ;
807
811
}
808
812
Some ( MacroBranch {
813
+ span : mk_sp ( lo, hi) ,
809
814
args_paren_kind,
810
- args_span,
811
815
args,
812
816
body,
813
817
} )
@@ -822,8 +826,8 @@ struct Macro {
822
826
// FIXME: it would be more efficient to use references to the token streams
823
827
// rather than clone them, if we can make the borrowing work out.
824
828
struct MacroBranch {
829
+ span : Span ,
825
830
args_paren_kind : DelimToken ,
826
- args_span : Span ,
827
831
args : ThinTokenStream ,
828
832
body : Span ,
829
833
}
0 commit comments