1
Fork 0

Don't add attribute to allow unused-qualifications to derive impl's

Currently `#![forbid(unused_qualifications)]` is incompatible with all
derive's because we add `#[allow(unused_qualifications)]` in all
generated impl's.
This commit is contained in:
Samrat Man Singh 2020-05-07 10:53:44 +05:30 committed by Michael Holloway
parent ed9173276a
commit 8374ab6d65
3 changed files with 39 additions and 9 deletions

View file

@ -727,16 +727,8 @@ impl<'a> TraitDef<'a> {
let attr = cx.attribute(cx.meta_word(self.span, sym::automatically_derived));
let opt_trait_ref = Some(trait_ref);
let unused_qual = {
let word = rustc_ast::attr::mk_nested_word_item(Ident::new(
sym::unused_qualifications,
self.span,
));
let list = rustc_ast::attr::mk_list_item(Ident::new(sym::allow, self.span), vec![word]);
cx.attribute(list)
};
let mut a = vec![attr, unused_qual];
let mut a = vec![attr];
a.extend(self.attributes.iter().cloned());
cx.item(

View file

@ -0,0 +1,22 @@
// force-host
// no-prefer-dynamic
#![crate_type = "proc-macro"]
extern crate proc_macro;
use proc_macro::TokenStream;
#[proc_macro_derive(AddImpl)]
// Unnecessary qualification `bar::foo`
// https://github.com/rust-lang/rust/issues/71898
pub fn derive(input: TokenStream) -> TokenStream {
"impl B {
fn foo(&self) { use bar::foo; bar::foo() }
}
fn foo() {}
mod bar { pub fn foo() {} }
".parse().unwrap()
}

View file

@ -0,0 +1,16 @@
// run-pass
// aux-build:add-impl.rs
#![forbid(unused_qualifications)]
#[macro_use]
extern crate add_impl;
#[derive(AddImpl)]
struct B;
fn main() {
B.foo();
foo();
bar::foo();
}