about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2017-01-10 04:44:04 +0000
committerbors <bors@rust-lang.org>2017-01-10 04:44:04 +0000
commit2fa9feb37a06abf96f4aeee7d92888135319d546 (patch)
tree14967657644ca562f3669cea9edbad6d608c81c1
parent26dc969b3df61255646f54e0a5dd1664f419ba3d (diff)
parent3be6991099d612088c34eeed7cbfd5eaee3873a8 (diff)
downloadrust-2fa9feb37a06abf96f4aeee7d92888135319d546.tar.gz
rust-2fa9feb37a06abf96f4aeee7d92888135319d546.zip
Auto merge of #38947 - nrc:custom-derive-span, r=jseyfried
Give custom derive spans an expansion ID

r? @jseyfried
-rw-r--r--src/libsyntax_ext/deriving/mod.rs27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/libsyntax_ext/deriving/mod.rs b/src/libsyntax_ext/deriving/mod.rs
index 2573690d153..096f6dfd5d8 100644
--- a/src/libsyntax_ext/deriving/mod.rs
+++ b/src/libsyntax_ext/deriving/mod.rs
@@ -90,10 +90,10 @@ fn allow_unstable(cx: &mut ExtCtxt, span: Span, attr_name: &str) -> Span {
 }
 
 pub fn expand_derive(cx: &mut ExtCtxt,
-                 span: Span,
-                 mitem: &MetaItem,
-                 annotatable: Annotatable)
-                 -> Vec<Annotatable> {
+                     span: Span,
+                     mitem: &MetaItem,
+                     annotatable: Annotatable)
+                     -> Vec<Annotatable> {
     debug!("expand_derive: span = {:?}", span);
     debug!("expand_derive: mitem = {:?}", mitem);
     debug!("expand_derive: annotatable input  = {:?}", annotatable);
@@ -235,8 +235,21 @@ pub fn expand_derive(cx: &mut ExtCtxt,
         let titem = cx.meta_list_item_word(titem.span, titem.name().unwrap());
         let mitem = cx.meta_list(titem.span, derive, vec![titem]);
         let item = Annotatable::Item(item);
+
+        let span = Span {
+            expn_id: cx.codemap().record_expansion(codemap::ExpnInfo {
+                call_site: mitem.span,
+                callee: codemap::NameAndSpan {
+                    format: codemap::MacroAttribute(Symbol::intern(&format!("derive({})", tname))),
+                    span: None,
+                    allow_internal_unstable: false,
+                },
+            }),
+            ..mitem.span
+        };
+
         if let SyntaxExtension::CustomDerive(ref ext) = *ext {
-            return ext.expand(cx, mitem.span, &mitem, item);
+            return ext.expand(cx, span, &mitem, item);
         } else {
             unreachable!()
         }
@@ -285,8 +298,8 @@ pub fn expand_derive(cx: &mut ExtCtxt,
             expn_id: cx.codemap().record_expansion(codemap::ExpnInfo {
                 call_site: titem.span,
                 callee: codemap::NameAndSpan {
-                    format: codemap::MacroAttribute(Symbol::intern(&format!("derive({})", tname))),
-                    span: Some(titem.span),
+                    format: codemap::MacroAttribute(name),
+                    span: None,
                     allow_internal_unstable: true,
                 },
             }),