@@ -339,15 +339,13 @@ impl<'tcx> FormatArgsExpn<'tcx> {
339
339
expr_visitor_no_bodies ( |e| {
340
340
// if we're still inside of the macro definition...
341
341
if e. span . ctxt ( ) == expr. span . ctxt ( ) {
342
- // ArgumnetV1::new (<value>, <format_trait>::fmt )
342
+ // ArgumnetV1::new_<format_trait> (<value>)
343
343
if_chain ! {
344
- if let ExprKind :: Call ( callee, [ val, fmt_path ] ) = e. kind;
344
+ if let ExprKind :: Call ( callee, [ val] ) = e. kind;
345
345
if let ExprKind :: Path ( QPath :: TypeRelative ( ty, seg) ) = callee. kind;
346
- if seg. ident. name == sym:: new;
347
346
if let hir:: TyKind :: Path ( QPath :: Resolved ( _, path) ) = ty. kind;
348
347
if path. segments. last( ) . unwrap( ) . ident. name == sym:: ArgumentV1 ;
349
- if let ExprKind :: Path ( QPath :: Resolved ( _, path) ) = fmt_path. kind;
350
- if let [ .., fmt_trait, _fmt] = path. segments;
348
+ if seg. ident. name. as_str( ) . starts_with( "new_" ) ;
351
349
then {
352
350
let val_idx = if_chain! {
353
351
if val. span. ctxt( ) == expr. span. ctxt( ) ;
@@ -361,7 +359,19 @@ impl<'tcx> FormatArgsExpn<'tcx> {
361
359
formatters. len( )
362
360
}
363
361
} ;
364
- formatters. push( ( val_idx, fmt_trait. ident. name) ) ;
362
+ let fmt_trait = match seg. ident. name. as_str( ) {
363
+ "new_display" => "Display" ,
364
+ "new_debug" => "Debug" ,
365
+ "new_lower_exp" => "LowerExp" ,
366
+ "new_upper_exp" => "UpperExp" ,
367
+ "new_octal" => "Octal" ,
368
+ "new_pointer" => "Pointer" ,
369
+ "new_binary" => "Binary" ,
370
+ "new_lower_hex" => "LowerHex" ,
371
+ "new_upper_hex" => "UpperHex" ,
372
+ _ => unreachable!( ) ,
373
+ } ;
374
+ formatters. push( ( val_idx, Symbol :: intern( fmt_trait) ) ) ;
365
375
}
366
376
}
367
377
if let ExprKind :: Struct ( QPath :: Resolved ( _, path) , ..) = e. kind {
0 commit comments