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:
parent
ed9173276a
commit
8374ab6d65
3 changed files with 39 additions and 9 deletions
|
@ -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(
|
||||
|
|
22
src/test/ui/lint/auxiliary/add-impl.rs
Normal file
22
src/test/ui/lint/auxiliary/add-impl.rs
Normal 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()
|
||||
}
|
16
src/test/ui/lint/unused-qualification-in-derive-expansion.rs
Normal file
16
src/test/ui/lint/unused-qualification-in-derive-expansion.rs
Normal 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();
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue