]> git.proxmox.com Git - rustc.git/blame - src/librustc/lint/builtin.rs
New upstream version 1.14.0+dfsg1
[rustc.git] / src / librustc / lint / builtin.rs
CommitLineData
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
17use lint::{LintPass, LateLintPass, LintArray};
18
19declare_lint! {
20 pub CONST_ERR,
21 Warn,
22 "constant evaluation detected erroneous expression"
23}
1a4d82fc
JJ
24
25declare_lint! {
26 pub UNUSED_IMPORTS,
27 Warn,
28 "imports that are never used"
29}
30
31declare_lint! {
32 pub UNUSED_EXTERN_CRATES,
33 Allow,
34 "extern crates that are never used"
35}
36
37declare_lint! {
38 pub UNUSED_QUALIFICATIONS,
39 Allow,
40 "detects unnecessarily qualified names"
41}
42
43declare_lint! {
44 pub UNKNOWN_LINTS,
45 Warn,
46 "unrecognized lint attribute"
47}
48
49declare_lint! {
50 pub UNUSED_VARIABLES,
51 Warn,
52 "detect variables which are not used in any way"
53}
54
55declare_lint! {
56 pub UNUSED_ASSIGNMENTS,
57 Warn,
58 "detect assignments that will never be read"
59}
60
61declare_lint! {
62 pub DEAD_CODE,
63 Warn,
64 "detect unused, unexported items"
65}
66
67declare_lint! {
68 pub UNREACHABLE_CODE,
69 Warn,
70 "detects unreachable code paths"
71}
72
73declare_lint! {
74 pub WARNINGS,
75 Warn,
76 "mass-change the level for lints which produce warnings"
77}
78
79declare_lint! {
85aaf69f
SL
80 pub UNUSED_FEATURES,
81 Warn,
82 "unused or unknown features found in crate-level #[feature] directives"
83}
84
85declare_lint! {
86 pub STABLE_FEATURES,
87 Warn,
88 "stable features found in #[feature] directive"
1a4d82fc
JJ
89}
90
91declare_lint! {
92 pub UNKNOWN_CRATE_TYPES,
93 Deny,
94 "unknown crate type found in #[crate_type] directive"
95}
96
1a4d82fc
JJ
97declare_lint! {
98 pub FAT_PTR_TRANSMUTES,
99 Allow,
100 "detects transmutes of fat pointers"
101}
102
103declare_lint! {
c34b1796 104 pub TRIVIAL_CASTS,
85aaf69f 105 Allow,
c34b1796 106 "detects trivial casts which could be removed"
1a4d82fc
JJ
107}
108
c34b1796
AL
109declare_lint! {
110 pub TRIVIAL_NUMERIC_CASTS,
111 Allow,
112 "detects trivial casts of numeric types which could be removed"
113}
92a42be0 114
9cc50fc6
SL
115declare_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
121declare_lint! {
122 pub INACCESSIBLE_EXTERN_CRATE,
c30ab7b3 123 Deny,
7453a54e
SL
124 "use of inaccessible extern crate erroneously allowed"
125}
126
9cc50fc6
SL
127declare_lint! {
128 pub INVALID_TYPE_PARAM_DEFAULT,
c30ab7b3 129 Deny,
9cc50fc6
SL
130 "type parameter default erroneously allowed in invalid location"
131}
132
54a0048b
SL
133declare_lint! {
134 pub ILLEGAL_FLOATING_POINT_CONSTANT_PATTERN,
c30ab7b3 135 Deny,
54a0048b
SL
136 "floating-point constants cannot be used in patterns"
137}
138
139declare_lint! {
140 pub ILLEGAL_STRUCT_OR_ENUM_CONSTANT_PATTERN,
c30ab7b3 141 Deny,
54a0048b
SL
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
146declare_lint! {
147 pub RAW_POINTER_DERIVE,
148 Warn,
149 "uses of #[derive] with raw pointers are rarely correct"
150}
151
54a0048b
SL
152declare_lint! {
153 pub TRANSMUTE_FROM_FN_ITEM_TYPES,
9e0c209e 154 Deny,
54a0048b
SL
155 "transmute from function item type to pointer-sized type erroneously allowed"
156}
157
a7813a04
XL
158declare_lint! {
159 pub HR_LIFETIME_IN_ASSOC_TYPE,
160 Warn,
161 "binding for associated type references higher-ranked lifetime \
162 that does not appear in the trait input types"
163}
164
54a0048b
SL
165declare_lint! {
166 pub OVERLAPPING_INHERENT_IMPLS,
c30ab7b3 167 Deny,
54a0048b
SL
168 "two overlapping inherent impls define an item with the same name were erroneously allowed"
169}
170
171declare_lint! {
172 pub RENAMED_AND_REMOVED_LINTS,
173 Warn,
174 "lints that have been renamed or removed"
175}
176
177declare_lint! {
178 pub SUPER_OR_SELF_IN_GLOBAL_PATH,
c30ab7b3 179 Deny,
54a0048b
SL
180 "detects super or self keywords at the beginning of global path"
181}
182
a7813a04 183declare_lint! {
9e0c209e 184 pub LIFETIME_UNDERSCORE,
c30ab7b3 185 Deny,
9e0c209e 186 "lifetimes or labels named `'_` were erroneously allowed"
a7813a04
XL
187}
188
3157f602 189declare_lint! {
9e0c209e 190 pub SAFE_EXTERN_STATICS,
3157f602 191 Warn,
9e0c209e 192 "safe access to extern statics was erroneously allowed"
3157f602
XL
193}
194
c30ab7b3
SL
195declare_lint! {
196 pub PATTERNS_IN_FNS_WITHOUT_BODY,
197 Warn,
198 "patterns in functions without body were erroneously allowed"
199}
200
201declare_lint! {
202 pub EXTRA_REQUIREMENT_IN_IMPL,
203 Warn,
204 "detects extra requirements in impls that 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
210pub struct HardwiredLints;
211
212impl 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 235 CONST_ERR,
54a0048b
SL
236 RAW_POINTER_DERIVE,
237 TRANSMUTE_FROM_FN_ITEM_TYPES,
238 OVERLAPPING_INHERENT_IMPLS,
239 RENAMED_AND_REMOVED_LINTS,
a7813a04 240 SUPER_OR_SELF_IN_GLOBAL_PATH,
3157f602 241 HR_LIFETIME_IN_ASSOC_TYPE,
9e0c209e 242 LIFETIME_UNDERSCORE,
c30ab7b3
SL
243 SAFE_EXTERN_STATICS,
244 PATTERNS_IN_FNS_WITHOUT_BODY,
245 EXTRA_REQUIREMENT_IN_IMPL
1a4d82fc
JJ
246 )
247 }
248}
b039eaaf
SL
249
250impl LateLintPass for HardwiredLints {}