1010
1111use std:: panic;
1212
13+ use errors:: FatalError ;
1314use rustc_macro:: { TokenStream , __internal} ;
1415use syntax:: ast:: { self , ItemKind } ;
15- use syntax:: codemap:: Span ;
16+ use syntax:: codemap:: { ExpnInfo , MacroAttribute , NameAndSpan , Span } ;
1617use syntax:: ext:: base:: * ;
1718use syntax:: fold:: { self , Folder } ;
18- use errors:: FatalError ;
19+ use syntax:: parse:: token:: intern;
20+ use syntax:: print:: pprust;
1921
2022pub struct CustomDerive {
2123 inner : fn ( TokenStream ) -> TokenStream ,
@@ -31,7 +33,7 @@ impl MultiItemModifier for CustomDerive {
3133 fn expand ( & self ,
3234 ecx : & mut ExtCtxt ,
3335 span : Span ,
34- _meta_item : & ast:: MetaItem ,
36+ meta_item : & ast:: MetaItem ,
3537 item : Annotatable )
3638 -> Vec < Annotatable > {
3739 let item = match item {
@@ -53,7 +55,17 @@ impl MultiItemModifier for CustomDerive {
5355 }
5456 }
5557
56- let input_span = item. span ;
58+ let input_span = Span {
59+ expn_id : ecx. codemap ( ) . record_expansion ( ExpnInfo {
60+ call_site : span,
61+ callee : NameAndSpan {
62+ format : MacroAttribute ( intern ( & pprust:: meta_item_to_string ( meta_item) ) ) ,
63+ span : Some ( span) ,
64+ allow_internal_unstable : true ,
65+ } ,
66+ } ) ,
67+ ..item. span
68+ } ;
5769 let input = __internal:: new_token_stream ( item) ;
5870 let res = __internal:: set_parse_sess ( & ecx. parse_sess , || {
5971 let inner = self . inner ;
0 commit comments