Revert "Point macros 1.1 errors to the input item"

This reverts commit 3784067edc.
Any errors in the derived output now point at the derive attribute
instead of the item.
This commit is contained in:
Josh Driver 2016-11-08 23:03:33 +10:30
parent 31a508e118
commit 134ef4f793
3 changed files with 5 additions and 19 deletions

View File

@ -14,12 +14,10 @@ use errors::FatalError;
use proc_macro::{TokenStream, __internal};
use syntax::ast::{self, ItemKind, Attribute};
use syntax::attr::{mark_used, mark_known};
use syntax::codemap::{ExpnInfo, MacroAttribute, NameAndSpan, Span};
use syntax::codemap::Span;
use syntax::ext::base::*;
use syntax::fold::Folder;
use syntax::parse::token::InternedString;
use syntax::parse::token::intern;
use syntax::print::pprust;
use syntax::visit::Visitor;
struct MarkAttrs<'a>(&'a [InternedString]);
@ -50,7 +48,7 @@ impl MultiItemModifier for CustomDerive {
fn expand(&self,
ecx: &mut ExtCtxt,
span: Span,
meta_item: &ast::MetaItem,
_meta_item: &ast::MetaItem,
item: Annotatable)
-> Vec<Annotatable> {
let item = match item {
@ -75,18 +73,6 @@ impl MultiItemModifier for CustomDerive {
// Mark attributes as known, and used.
MarkAttrs(&self.attrs).visit_item(&item);
let input_span = Span {
expn_id: ecx.codemap().record_expansion(ExpnInfo {
call_site: span,
callee: NameAndSpan {
format: MacroAttribute(intern(&pprust::meta_item_to_string(meta_item))),
span: Some(span),
allow_internal_unstable: true,
},
}),
..item.span
};
let input = __internal::new_token_stream(item.clone());
let res = __internal::set_parse_sess(&ecx.parse_sess, || {
let inner = self.inner;
@ -113,7 +99,7 @@ impl MultiItemModifier for CustomDerive {
// Reassign spans of all expanded items to the input `item`
// for better errors here.
res.extend(new_items.into_iter().flat_map(|item| {
ChangeSpan { span: input_span }.fold_item(item)
ChangeSpan { span: span }.fold_item(item)
}).map(Annotatable::Item));
res
}

View File

@ -17,8 +17,8 @@
extern crate derive_unstable_2;
#[derive(Unstable)]
struct A;
//~^ ERROR: reserved for internal compiler
struct A;
fn main() {
foo();

View File

@ -17,8 +17,8 @@
extern crate derive_unstable;
#[derive(Unstable)]
struct A;
//~^ ERROR: use of unstable library feature
struct A;
fn main() {
unsafe { foo(); }