]>
Commit | Line | Data |
---|---|---|
c34b1796 | 1 | // Copyright 2012-2015 The Rust Project Developers. See the COPYRIGHT |
1a4d82fc JJ |
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 | ||
c34b1796 | 11 | //! Some lints that are built in to the compiler. |
1a4d82fc | 12 | //! |
c34b1796 AL |
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`. | |
1a4d82fc | 16 | |
b039eaaf SL |
17 | use lint::{LintPass, LateLintPass, LintArray}; |
18 | ||
19 | declare_lint! { | |
20 | pub CONST_ERR, | |
21 | Warn, | |
22 | "constant evaluation detected erroneous expression" | |
23 | } | |
1a4d82fc JJ |
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! { | |
85aaf69f SL |
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" | |
1a4d82fc JJ |
89 | } |
90 | ||
91 | declare_lint! { | |
92 | pub UNKNOWN_CRATE_TYPES, | |
93 | Deny, | |
94 | "unknown crate type found in #[crate_type] directive" | |
95 | } | |
96 | ||
1a4d82fc JJ |
97 | declare_lint! { |
98 | pub FAT_PTR_TRANSMUTES, | |
99 | Allow, | |
100 | "detects transmutes of fat pointers" | |
101 | } | |
102 | ||
103 | declare_lint! { | |
c34b1796 | 104 | pub TRIVIAL_CASTS, |
85aaf69f | 105 | Allow, |
c34b1796 | 106 | "detects trivial casts which could be removed" |
1a4d82fc JJ |
107 | } |
108 | ||
c34b1796 AL |
109 | declare_lint! { |
110 | pub TRIVIAL_NUMERIC_CASTS, | |
111 | Allow, | |
112 | "detects trivial casts of numeric types which could be removed" | |
113 | } | |
92a42be0 | 114 | |
9cc50fc6 SL |
115 | declare_lint! { |
116 | pub PRIVATE_IN_PUBLIC, | |
117 | Warn, | |
118 | "detect private items in public interfaces not caught by the old implementation" | |
119 | } | |
120 | ||
7453a54e SL |
121 | declare_lint! { |
122 | pub INACCESSIBLE_EXTERN_CRATE, | |
123 | Warn, | |
124 | "use of inaccessible extern crate erroneously allowed" | |
125 | } | |
126 | ||
9cc50fc6 SL |
127 | declare_lint! { |
128 | pub INVALID_TYPE_PARAM_DEFAULT, | |
129 | Warn, | |
130 | "type parameter default erroneously allowed in invalid location" | |
131 | } | |
132 | ||
54a0048b SL |
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 | ||
92a42be0 SL |
146 | declare_lint! { |
147 | pub MATCH_OF_UNIT_VARIANT_VIA_PAREN_DOTDOT, | |
7453a54e | 148 | Deny, |
92a42be0 SL |
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 | ||
54a0048b SL |
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 | ||
a7813a04 XL |
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 | ||
54a0048b SL |
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 | ||
a7813a04 XL |
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 | ||
3157f602 XL |
201 | declare_lint! { |
202 | pub LIFETIME_UNDERSCORE, | |
203 | Warn, | |
204 | "lifetimes or labels named `'_` were erroneously allowed" | |
205 | } | |
206 | ||
1a4d82fc JJ |
207 | /// Does nothing as a lint pass, but registers some `Lint`s |
208 | /// which are used by other parts of the compiler. | |
c34b1796 | 209 | #[derive(Copy, Clone)] |
1a4d82fc JJ |
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, | |
85aaf69f SL |
224 | UNUSED_FEATURES, |
225 | STABLE_FEATURES, | |
1a4d82fc | 226 | UNKNOWN_CRATE_TYPES, |
c34b1796 AL |
227 | FAT_PTR_TRANSMUTES, |
228 | TRIVIAL_CASTS, | |
b039eaaf | 229 | TRIVIAL_NUMERIC_CASTS, |
9cc50fc6 | 230 | PRIVATE_IN_PUBLIC, |
7453a54e | 231 | INACCESSIBLE_EXTERN_CRATE, |
9cc50fc6 | 232 | INVALID_TYPE_PARAM_DEFAULT, |
54a0048b SL |
233 | ILLEGAL_FLOATING_POINT_CONSTANT_PATTERN, |
234 | ILLEGAL_STRUCT_OR_ENUM_CONSTANT_PATTERN, | |
92a42be0 SL |
235 | MATCH_OF_UNIT_VARIANT_VIA_PAREN_DOTDOT, |
236 | CONST_ERR, | |
54a0048b SL |
237 | RAW_POINTER_DERIVE, |
238 | TRANSMUTE_FROM_FN_ITEM_TYPES, | |
239 | OVERLAPPING_INHERENT_IMPLS, | |
240 | RENAMED_AND_REMOVED_LINTS, | |
a7813a04 XL |
241 | SUPER_OR_SELF_IN_GLOBAL_PATH, |
242 | UNSIZED_IN_TUPLE, | |
243 | OBJECT_UNSAFE_FRAGMENT, | |
3157f602 XL |
244 | HR_LIFETIME_IN_ASSOC_TYPE, |
245 | LIFETIME_UNDERSCORE | |
1a4d82fc JJ |
246 | ) |
247 | } | |
248 | } | |
b039eaaf SL |
249 | |
250 | impl LateLintPass for HardwiredLints {} |