about summary refs log tree commit diff
path: root/src/tools/clippy/tests/ui/useless_attribute.rs
blob: 3f530de7fd8e35c914c97fa96a2c42c121cf339d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
//@aux-build:proc_macro_derive.rs

#![allow(unused, clippy::duplicated_attributes)]
#![warn(clippy::useless_attribute)]
#![warn(unreachable_pub)]
#![feature(rustc_private)]

#[allow(dead_code)]
//~^ useless_attribute
#[cfg_attr(clippy, allow(dead_code))]
//~^ useless_attribute
#[rustfmt::skip]
#[allow(unused_imports)]
#[allow(unused_extern_crates)]
#[macro_use]
extern crate regex as regex_crate;

#[macro_use]
extern crate proc_macro_derive;

fn test_indented_attr() {
    #[allow(clippy::almost_swapped)]
    //~^ useless_attribute
    use std::collections::HashSet;

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

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

// don't lint on unused for `use` items
#[allow(unused)]
use std::option;

// 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;
}

// don't lint on clippy::wildcard_imports for `use` items
#[allow(clippy::wildcard_imports)]
pub use std::io::prelude::*;

// don't lint on clippy::enum_glob_use for `use` items
#[allow(clippy::enum_glob_use)]
pub use std::cmp::Ordering::*;

// don't lint on clippy::redundant_pub_crate
mod c {
    #[allow(clippy::redundant_pub_crate)]
    pub(crate) struct S;
}

// https://github.com/rust-lang/rust-clippy/issues/7511
pub mod split {
    #[allow(clippy::module_name_repetitions)]
    pub use regex::SplitN;
}

// https://github.com/rust-lang/rust-clippy/issues/8768
#[allow(clippy::single_component_path_imports)]
use regex;

mod module {
    pub(crate) struct Struct;
}

#[rustfmt::skip]
#[allow(unused_import_braces)]
#[allow(unused_braces)]
use module::{Struct};

fn main() {
    test_indented_attr();
}

// Regression test for https://github.com/rust-lang/rust-clippy/issues/4467
#[allow(dead_code)]
use std::collections as puppy_doggy;

// Regression test for https://github.com/rust-lang/rust-clippy/issues/11595
pub mod hidden_glob_reexports {
    #![allow(unreachable_pub)]

    mod my_prelude {
        pub struct MyCoolTypeInternal;
        pub use MyCoolTypeInternal as MyCoolType;
    }

    mod my_uncool_type {
        pub(crate) struct MyUncoolType;
    }

    // This exports `MyCoolType`.
    pub use my_prelude::*;

    // This hides `my_prelude::MyCoolType`.
    #[allow(hidden_glob_reexports)]
    use my_uncool_type::MyUncoolType as MyCoolType;
}

// Regression test for https://github.com/rust-lang/rust-clippy/issues/10878
pub mod ambiguous_glob_exports {
    #![allow(unreachable_pub)]

    mod my_prelude {
        pub struct MyType;
    }

    mod my_type {
        pub struct MyType;
    }

    #[allow(ambiguous_glob_reexports)]
    pub use my_prelude::*;
    pub use my_type::*;
}

// Regression test for https://github.com/rust-lang/rust-clippy/issues/13764
pub mod unknown_namespace {
    pub mod some_module {
        pub struct SomeType;
    }
    #[allow(rustc::non_glob_import_of_type_ir_inherent)]
    use some_module::SomeType;
}

// Regression test for https://github.com/rust-lang/rust-clippy/issues/15316
pub mod redundant_imports_issue {
    macro_rules! empty {
        () => {};
    }

    #[expect(redundant_imports)]
    pub(crate) use empty;

    empty!();
}

pub mod issue15636 {
    pub mod f {
        #[deprecated(since = "TBD")]
        pub mod deprec {}
    }

    #[allow(deprecated_in_future)]
    pub use f::deprec;
}