Warn on pointless #[derive] in more places
This fixes the regression in #49934 and ensures that unused `#[derive]`s on statements, expressions and generic type parameters survive to trip the `unused_attributes` lint. For `#[derive]` on macro invocations it has a hardcoded warning since linting occurs after expansion. This also adds regression testing for some nodes that were already warning properly. closes #49934
This commit is contained in:
parent
b91e6a2672
commit
f16d2ff7ec
7 changed files with 184 additions and 16 deletions
52
src/test/ui/issue-49934.rs
Normal file
52
src/test/ui/issue-49934.rs
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// compile-pass
|
||||
|
||||
#![feature(stmt_expr_attributes)]
|
||||
#![warn(unused_attributes)] //~ NOTE lint level defined here
|
||||
|
||||
fn foo<#[derive(Debug)] T>() { //~ WARN unused attribute
|
||||
match 0 {
|
||||
#[derive(Debug)] //~ WARN unused attribute
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// fold_stmt (Item)
|
||||
#[allow(dead_code)]
|
||||
#[derive(Debug)] // should not warn
|
||||
struct Foo;
|
||||
|
||||
// fold_stmt (Mac)
|
||||
#[derive(Debug)]
|
||||
//~^ WARN `#[derive]` does nothing on macro invocations
|
||||
//~| NOTE this may become a hard error in a future release
|
||||
println!("Hello, world!");
|
||||
|
||||
// fold_stmt (Semi)
|
||||
#[derive(Debug)] //~ WARN unused attribute
|
||||
"Hello, world!";
|
||||
|
||||
// fold_stmt (Local)
|
||||
#[derive(Debug)] //~ WARN unused attribute
|
||||
let _ = "Hello, world!";
|
||||
|
||||
// fold_expr
|
||||
let _ = #[derive(Debug)] "Hello, world!";
|
||||
//~^ WARN unused attribute
|
||||
|
||||
let _ = [
|
||||
// fold_opt_expr
|
||||
#[derive(Debug)] //~ WARN unused attribute
|
||||
"Hello, world!"
|
||||
];
|
||||
}
|
||||
50
src/test/ui/issue-49934.stderr
Normal file
50
src/test/ui/issue-49934.stderr
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
warning: `#[derive]` does nothing on macro invocations
|
||||
--> $DIR/issue-49934.rs:30:5
|
||||
|
|
||||
LL | #[derive(Debug)]
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this may become a hard error in a future release
|
||||
|
||||
warning: unused attribute
|
||||
--> $DIR/issue-49934.rs:16:8
|
||||
|
|
||||
LL | fn foo<#[derive(Debug)] T>() { //~ WARN unused attribute
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/issue-49934.rs:14:9
|
||||
|
|
||||
LL | #![warn(unused_attributes)] //~ NOTE lint level defined here
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: unused attribute
|
||||
--> $DIR/issue-49934.rs:18:9
|
||||
|
|
||||
LL | #[derive(Debug)] //~ WARN unused attribute
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: unused attribute
|
||||
--> $DIR/issue-49934.rs:36:5
|
||||
|
|
||||
LL | #[derive(Debug)] //~ WARN unused attribute
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: unused attribute
|
||||
--> $DIR/issue-49934.rs:40:5
|
||||
|
|
||||
LL | #[derive(Debug)] //~ WARN unused attribute
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: unused attribute
|
||||
--> $DIR/issue-49934.rs:44:13
|
||||
|
|
||||
LL | let _ = #[derive(Debug)] "Hello, world!";
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: unused attribute
|
||||
--> $DIR/issue-49934.rs:49:9
|
||||
|
|
||||
LL | #[derive(Debug)] //~ WARN unused attribute
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue