Skip to content

Commit

Permalink
Auto merge of #5022 - flip1995:useless_attr, r=phansch
Browse files Browse the repository at this point in the history
Fix useless_attribute suggestion

Fixes #5021

changelog: Fix [`useless_attribute`] suggestion, which tripped rustfix
  • Loading branch information
bors committed Jan 8, 2020
2 parents 52b9e70 + 6eba665 commit 0da0ae3
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 6 deletions.
13 changes: 11 additions & 2 deletions clippy_lints/src/utils/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ use rustc_hir::def_id::{DefId, CRATE_DEF_INDEX, LOCAL_CRATE};
use rustc_hir::Node;
use rustc_hir::*;
use rustc_span::hygiene::ExpnKind;
use rustc_span::source_map::{Span, DUMMY_SP};
use rustc_span::symbol::{kw, Symbol};
use rustc_span::{BytePos, Pos, Span, DUMMY_SP};
use smallvec::SmallVec;
use syntax::ast::{self, Attribute, LitKind};
use syntax::attr;
Expand Down Expand Up @@ -554,7 +554,16 @@ pub fn last_line_of_span<T: LintContext>(cx: &T, span: Span) -> Span {
let source_map_and_line = cx.sess().source_map().lookup_line(span.lo()).unwrap();
let line_no = source_map_and_line.line;
let line_start = &source_map_and_line.sf.lines[line_no];
Span::new(*line_start, span.hi(), span.ctxt())
let span = Span::new(*line_start, span.hi(), span.ctxt());
if_chain! {
if let Some(snip) = snippet_opt(cx, span);
if let Some(first_ch_pos) = snip.find(|c: char| !c.is_whitespace());
then {
span.with_lo(span.lo() + BytePos::from_usize(first_ch_pos))
} else {
span
}
}
}

/// Like `snippet_block`, but add braces if the expr is not an `ExprKind::Block`.
Expand Down
57 changes: 57 additions & 0 deletions tests/ui/useless_attribute.fixed
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// run-rustfix
// aux-build:proc_macro_derive.rs

#![warn(clippy::useless_attribute)]
#![warn(unreachable_pub)]
#![feature(rustc_private)]

#![allow(dead_code)]
#![cfg_attr(feature = "cargo-clippy", allow(dead_code))]
#[rustfmt::skip]
#[allow(unused_imports)]
#[allow(unused_extern_crates)]
#[macro_use]
extern crate rustc;

#[macro_use]
extern crate proc_macro_derive;

// don't lint on unused_import for `use` items
#[allow(unused_imports)]
use std::collections;

// don't lint on deprecated for `use` items
mod foo {
#[deprecated]
pub struct Bar;
}
#[allow(deprecated)]
pub use foo::Bar;

// This should not trigger the lint. There's lint level definitions inside the external derive
// that would trigger the useless_attribute lint.
#[derive(DeriveSomething)]
struct Baz;

// don't lint on unreachable_pub for `use` items
mod a {
mod b {
#[allow(dead_code)]
#[allow(unreachable_pub)]
pub struct C {}
}

#[allow(unreachable_pub)]
pub use self::b::C;
}

fn test_indented_attr() {
#![allow(clippy::almost_swapped)]
use std::collections::HashSet;

let _ = HashSet::<u32>::default();
}

fn main() {
test_indented_attr();
}
12 changes: 11 additions & 1 deletion tests/ui/useless_attribute.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// run-rustfix
// aux-build:proc_macro_derive.rs

#![warn(clippy::useless_attribute)]
Expand Down Expand Up @@ -44,4 +45,13 @@ mod a {
pub use self::b::C;
}

fn main() {}
fn test_indented_attr() {
#[allow(clippy::almost_swapped)]
use std::collections::HashSet;

let _ = HashSet::<u32>::default();
}

fn main() {
test_indented_attr();
}
12 changes: 9 additions & 3 deletions tests/ui/useless_attribute.stderr
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
error: useless lint attribute
--> $DIR/useless_attribute.rs:7:1
--> $DIR/useless_attribute.rs:8:1
|
LL | #[allow(dead_code)]
| ^^^^^^^^^^^^^^^^^^^ help: if you just forgot a `!`, use: `#![allow(dead_code)]`
|
= note: `-D clippy::useless-attribute` implied by `-D warnings`

error: useless lint attribute
--> $DIR/useless_attribute.rs:8:1
--> $DIR/useless_attribute.rs:9:1
|
LL | #[cfg_attr(feature = "cargo-clippy", allow(dead_code))]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if you just forgot a `!`, use: `#![cfg_attr(feature = "cargo-clippy", allow(dead_code)`

error: aborting due to 2 previous errors
error: useless lint attribute
--> $DIR/useless_attribute.rs:49:5
|
LL | #[allow(clippy::almost_swapped)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if you just forgot a `!`, use: `#![allow(clippy::almost_swapped)]`

error: aborting due to 3 previous errors

0 comments on commit 0da0ae3

Please sign in to comment.