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.
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.
11 //! Some lints that are built in to the compiler.
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`.
17 use lint
::{LintPass, LateLintPass, LintArray}
;
22 "constant evaluation detected erroneous expression"
28 "imports that are never used"
32 pub UNUSED_EXTERN_CRATES
,
34 "extern crates that are never used"
38 pub UNUSED_QUALIFICATIONS
,
40 "detects unnecessarily qualified names"
46 "unrecognized lint attribute"
52 "detect variables which are not used in any way"
56 pub UNUSED_ASSIGNMENTS
,
58 "detect assignments that will never be read"
64 "detect unused, unexported items"
70 "detects unreachable code paths"
76 "mass-change the level for lints which produce warnings"
82 "unused or unknown features found in crate-level #[feature] directives"
88 "stable features found in #[feature] directive"
92 pub UNKNOWN_CRATE_TYPES
,
94 "unknown crate type found in #[crate_type] directive"
98 pub FAT_PTR_TRANSMUTES
,
100 "detects transmutes of fat pointers"
106 "detects trivial casts which could be removed"
110 pub TRIVIAL_NUMERIC_CASTS
,
112 "detects trivial casts of numeric types which could be removed"
116 pub PRIVATE_IN_PUBLIC
,
118 "detect private items in public interfaces not caught by the old implementation"
122 pub INACCESSIBLE_EXTERN_CRATE
,
124 "use of inaccessible extern crate erroneously allowed"
128 pub INVALID_TYPE_PARAM_DEFAULT
,
130 "type parameter default erroneously allowed in invalid location"
134 pub ILLEGAL_FLOATING_POINT_CONSTANT_PATTERN
,
136 "floating-point constants cannot be used in patterns"
140 pub ILLEGAL_STRUCT_OR_ENUM_CONSTANT_PATTERN
,
142 "constants of struct or enum type can only be used in a pattern if \
143 the struct or enum has `#[derive(PartialEq, Eq)]`"
147 pub MATCH_OF_UNIT_VARIANT_VIA_PAREN_DOTDOT
,
149 "unit struct or enum variant erroneously allowed to match via path::ident(..)"
153 pub RAW_POINTER_DERIVE
,
155 "uses of #[derive] with raw pointers are rarely correct"
159 pub TRANSMUTE_FROM_FN_ITEM_TYPES
,
161 "transmute from function item type to pointer-sized type erroneously allowed"
165 pub HR_LIFETIME_IN_ASSOC_TYPE
,
167 "binding for associated type references higher-ranked lifetime \
168 that does not appear in the trait input types"
172 pub OVERLAPPING_INHERENT_IMPLS
,
174 "two overlapping inherent impls define an item with the same name were erroneously allowed"
178 pub RENAMED_AND_REMOVED_LINTS
,
180 "lints that have been renamed or removed"
184 pub SUPER_OR_SELF_IN_GLOBAL_PATH
,
186 "detects super or self keywords at the beginning of global path"
190 pub LIFETIME_UNDERSCORE
,
192 "lifetimes or labels named `'_` were erroneously allowed"
196 pub SAFE_EXTERN_STATICS
,
198 "safe access to extern statics was erroneously allowed"
201 /// Does nothing as a lint pass, but registers some `Lint`s
202 /// which are used by other parts of the compiler.
203 #[derive(Copy, Clone)]
204 pub struct HardwiredLints
;
206 impl LintPass
for HardwiredLints
{
207 fn get_lints(&self) -> LintArray
{
210 UNUSED_EXTERN_CRATES
,
211 UNUSED_QUALIFICATIONS
,
223 TRIVIAL_NUMERIC_CASTS
,
225 INACCESSIBLE_EXTERN_CRATE
,
226 INVALID_TYPE_PARAM_DEFAULT
,
227 ILLEGAL_FLOATING_POINT_CONSTANT_PATTERN
,
228 ILLEGAL_STRUCT_OR_ENUM_CONSTANT_PATTERN
,
229 MATCH_OF_UNIT_VARIANT_VIA_PAREN_DOTDOT
,
232 TRANSMUTE_FROM_FN_ITEM_TYPES
,
233 OVERLAPPING_INHERENT_IMPLS
,
234 RENAMED_AND_REMOVED_LINTS
,
235 SUPER_OR_SELF_IN_GLOBAL_PATH
,
236 HR_LIFETIME_IN_ASSOC_TYPE
,
243 impl LateLintPass
for HardwiredLints {}