]> git.lizzy.rs Git - rust.git/blob - src/librustc/lint/builtin.rs
Changed issue number to 36105
[rust.git] / src / librustc / lint / builtin.rs
1 // Copyright 2012-2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 //! Some lints that are built in to the compiler.
12 //!
13 //! These are the built-in lints that are emitted direct in the main
14 //! compiler code, rather than using their own custom pass. Those
15 //! lints are all available in `rustc_lint::builtin`.
16
17 use lint::{LintPass, LateLintPass, LintArray};
18
19 declare_lint! {
20     pub CONST_ERR,
21     Warn,
22     "constant evaluation detected erroneous expression"
23 }
24
25 declare_lint! {
26     pub UNUSED_IMPORTS,
27     Warn,
28     "imports that are never used"
29 }
30
31 declare_lint! {
32     pub UNUSED_EXTERN_CRATES,
33     Allow,
34     "extern crates that are never used"
35 }
36
37 declare_lint! {
38     pub UNUSED_QUALIFICATIONS,
39     Allow,
40     "detects unnecessarily qualified names"
41 }
42
43 declare_lint! {
44     pub UNKNOWN_LINTS,
45     Warn,
46     "unrecognized lint attribute"
47 }
48
49 declare_lint! {
50     pub UNUSED_VARIABLES,
51     Warn,
52     "detect variables which are not used in any way"
53 }
54
55 declare_lint! {
56     pub UNUSED_ASSIGNMENTS,
57     Warn,
58     "detect assignments that will never be read"
59 }
60
61 declare_lint! {
62     pub DEAD_CODE,
63     Warn,
64     "detect unused, unexported items"
65 }
66
67 declare_lint! {
68     pub UNREACHABLE_CODE,
69     Warn,
70     "detects unreachable code paths"
71 }
72
73 declare_lint! {
74     pub WARNINGS,
75     Warn,
76     "mass-change the level for lints which produce warnings"
77 }
78
79 declare_lint! {
80     pub UNUSED_FEATURES,
81     Warn,
82     "unused or unknown features found in crate-level #[feature] directives"
83 }
84
85 declare_lint! {
86     pub STABLE_FEATURES,
87     Warn,
88     "stable features found in #[feature] directive"
89 }
90
91 declare_lint! {
92     pub UNKNOWN_CRATE_TYPES,
93     Deny,
94     "unknown crate type found in #[crate_type] directive"
95 }
96
97 declare_lint! {
98     pub FAT_PTR_TRANSMUTES,
99     Allow,
100     "detects transmutes of fat pointers"
101 }
102
103 declare_lint! {
104     pub TRIVIAL_CASTS,
105     Allow,
106     "detects trivial casts which could be removed"
107 }
108
109 declare_lint! {
110     pub TRIVIAL_NUMERIC_CASTS,
111     Allow,
112     "detects trivial casts of numeric types which could be removed"
113 }
114
115 declare_lint! {
116     pub PRIVATE_IN_PUBLIC,
117     Deny,
118     "detect private items in public interfaces not caught by the old implementation"
119 }
120
121 declare_lint! {
122     pub INACCESSIBLE_EXTERN_CRATE,
123     Warn,
124     "use of inaccessible extern crate erroneously allowed"
125 }
126
127 declare_lint! {
128     pub INVALID_TYPE_PARAM_DEFAULT,
129     Warn,
130     "type parameter default erroneously allowed in invalid location"
131 }
132
133 declare_lint! {
134     pub ILLEGAL_FLOATING_POINT_CONSTANT_PATTERN,
135     Warn,
136     "floating-point constants cannot be used in patterns"
137 }
138
139 declare_lint! {
140     pub ILLEGAL_STRUCT_OR_ENUM_CONSTANT_PATTERN,
141     Warn,
142     "constants of struct or enum type can only be used in a pattern if \
143      the struct or enum has `#[derive(PartialEq, Eq)]`"
144 }
145
146 declare_lint! {
147     pub MATCH_OF_UNIT_VARIANT_VIA_PAREN_DOTDOT,
148     Deny,
149     "unit struct or enum variant erroneously allowed to match via path::ident(..)"
150 }
151
152 declare_lint! {
153     pub RAW_POINTER_DERIVE,
154     Warn,
155     "uses of #[derive] with raw pointers are rarely correct"
156 }
157
158 declare_lint! {
159     pub TRANSMUTE_FROM_FN_ITEM_TYPES,
160     Warn,
161     "transmute from function item type to pointer-sized type erroneously allowed"
162 }
163
164 declare_lint! {
165     pub HR_LIFETIME_IN_ASSOC_TYPE,
166     Warn,
167     "binding for associated type references higher-ranked lifetime \
168      that does not appear in the trait input types"
169 }
170
171 declare_lint! {
172     pub OVERLAPPING_INHERENT_IMPLS,
173     Warn,
174     "two overlapping inherent impls define an item with the same name were erroneously allowed"
175 }
176
177 declare_lint! {
178     pub RENAMED_AND_REMOVED_LINTS,
179     Warn,
180     "lints that have been renamed or removed"
181 }
182
183 declare_lint! {
184     pub SUPER_OR_SELF_IN_GLOBAL_PATH,
185     Warn,
186     "detects super or self keywords at the beginning of global path"
187 }
188
189 declare_lint! {
190     pub UNSIZED_IN_TUPLE,
191     Warn,
192     "unsized types in the interior of a tuple were erroneously allowed"
193 }
194
195 declare_lint! {
196     pub OBJECT_UNSAFE_FRAGMENT,
197     Warn,
198     "object-unsafe non-principal fragments in object types were erroneously allowed"
199 }
200
201 declare_lint! {
202     pub LIFETIME_UNDERSCORE,
203     Warn,
204     "lifetimes or labels named `'_` were erroneously allowed"
205 }
206
207 /// Does nothing as a lint pass, but registers some `Lint`s
208 /// which are used by other parts of the compiler.
209 #[derive(Copy, Clone)]
210 pub struct HardwiredLints;
211
212 impl LintPass for HardwiredLints {
213     fn get_lints(&self) -> LintArray {
214         lint_array!(
215             UNUSED_IMPORTS,
216             UNUSED_EXTERN_CRATES,
217             UNUSED_QUALIFICATIONS,
218             UNKNOWN_LINTS,
219             UNUSED_VARIABLES,
220             UNUSED_ASSIGNMENTS,
221             DEAD_CODE,
222             UNREACHABLE_CODE,
223             WARNINGS,
224             UNUSED_FEATURES,
225             STABLE_FEATURES,
226             UNKNOWN_CRATE_TYPES,
227             FAT_PTR_TRANSMUTES,
228             TRIVIAL_CASTS,
229             TRIVIAL_NUMERIC_CASTS,
230             PRIVATE_IN_PUBLIC,
231             INACCESSIBLE_EXTERN_CRATE,
232             INVALID_TYPE_PARAM_DEFAULT,
233             ILLEGAL_FLOATING_POINT_CONSTANT_PATTERN,
234             ILLEGAL_STRUCT_OR_ENUM_CONSTANT_PATTERN,
235             MATCH_OF_UNIT_VARIANT_VIA_PAREN_DOTDOT,
236             CONST_ERR,
237             RAW_POINTER_DERIVE,
238             TRANSMUTE_FROM_FN_ITEM_TYPES,
239             OVERLAPPING_INHERENT_IMPLS,
240             RENAMED_AND_REMOVED_LINTS,
241             SUPER_OR_SELF_IN_GLOBAL_PATH,
242             UNSIZED_IN_TUPLE,
243             OBJECT_UNSAFE_FRAGMENT,
244             HR_LIFETIME_IN_ASSOC_TYPE,
245             LIFETIME_UNDERSCORE
246         )
247     }
248 }
249
250 impl LateLintPass for HardwiredLints {}