|  | // Copyright 2012-2015 The Rust Project Developers. See the COPYRIGHT | 
|  | // file at the top-level directory of this distribution and at | 
|  | // http://rust-lang.org/COPYRIGHT. | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | 
|  | // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | 
|  | // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | 
|  | // option. This file may not be copied, modified, or distributed | 
|  | // except according to those terms. | 
|  |  | 
|  | //! Some lints that are built in to the compiler. | 
|  | //! | 
|  | //! These are the built-in lints that are emitted direct in the main | 
|  | //! compiler code, rather than using their own custom pass. Those | 
|  | //! lints are all available in `rustc_lint::builtin`. | 
|  |  | 
|  | use lint::{LintPass, LateLintPass, LintArray}; | 
|  |  | 
|  | declare_lint! { | 
|  | pub CONST_ERR, | 
|  | Warn, | 
|  | "constant evaluation detected erroneous expression" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub UNUSED_IMPORTS, | 
|  | Warn, | 
|  | "imports that are never used" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub UNUSED_EXTERN_CRATES, | 
|  | Allow, | 
|  | "extern crates that are never used" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub UNUSED_QUALIFICATIONS, | 
|  | Allow, | 
|  | "detects unnecessarily qualified names" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub UNKNOWN_LINTS, | 
|  | Warn, | 
|  | "unrecognized lint attribute" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub UNUSED_VARIABLES, | 
|  | Warn, | 
|  | "detect variables which are not used in any way" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub UNUSED_ASSIGNMENTS, | 
|  | Warn, | 
|  | "detect assignments that will never be read" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub DEAD_CODE, | 
|  | Warn, | 
|  | "detect unused, unexported items" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub UNREACHABLE_CODE, | 
|  | Warn, | 
|  | "detects unreachable code paths" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub WARNINGS, | 
|  | Warn, | 
|  | "mass-change the level for lints which produce warnings" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub UNUSED_FEATURES, | 
|  | Warn, | 
|  | "unused or unknown features found in crate-level #[feature] directives" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub STABLE_FEATURES, | 
|  | Warn, | 
|  | "stable features found in #[feature] directive" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub UNKNOWN_CRATE_TYPES, | 
|  | Deny, | 
|  | "unknown crate type found in #[crate_type] directive" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub VARIANT_SIZE_DIFFERENCES, | 
|  | Allow, | 
|  | "detects enums with widely varying variant sizes" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub FAT_PTR_TRANSMUTES, | 
|  | Allow, | 
|  | "detects transmutes of fat pointers" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub TRIVIAL_CASTS, | 
|  | Allow, | 
|  | "detects trivial casts which could be removed" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub TRIVIAL_NUMERIC_CASTS, | 
|  | Allow, | 
|  | "detects trivial casts of numeric types which could be removed" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub PRIVATE_IN_PUBLIC, | 
|  | Warn, | 
|  | "detect private items in public interfaces not caught by the old implementation" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub INVALID_TYPE_PARAM_DEFAULT, | 
|  | Warn, | 
|  | "type parameter default erroneously allowed in invalid location" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub MATCH_OF_UNIT_VARIANT_VIA_PAREN_DOTDOT, | 
|  | Warn, | 
|  | "unit struct or enum variant erroneously allowed to match via path::ident(..)" | 
|  | } | 
|  |  | 
|  | declare_lint! { | 
|  | pub RAW_POINTER_DERIVE, | 
|  | Warn, | 
|  | "uses of #[derive] with raw pointers are rarely correct" | 
|  | } | 
|  |  | 
|  | /// Does nothing as a lint pass, but registers some `Lint`s | 
|  | /// which are used by other parts of the compiler. | 
|  | #[derive(Copy, Clone)] | 
|  | pub struct HardwiredLints; | 
|  |  | 
|  | impl LintPass for HardwiredLints { | 
|  | fn get_lints(&self) -> LintArray { | 
|  | lint_array!( | 
|  | UNUSED_IMPORTS, | 
|  | UNUSED_EXTERN_CRATES, | 
|  | UNUSED_QUALIFICATIONS, | 
|  | UNKNOWN_LINTS, | 
|  | UNUSED_VARIABLES, | 
|  | UNUSED_ASSIGNMENTS, | 
|  | DEAD_CODE, | 
|  | UNREACHABLE_CODE, | 
|  | WARNINGS, | 
|  | UNUSED_FEATURES, | 
|  | STABLE_FEATURES, | 
|  | UNKNOWN_CRATE_TYPES, | 
|  | VARIANT_SIZE_DIFFERENCES, | 
|  | FAT_PTR_TRANSMUTES, | 
|  | TRIVIAL_CASTS, | 
|  | TRIVIAL_NUMERIC_CASTS, | 
|  | PRIVATE_IN_PUBLIC, | 
|  | INVALID_TYPE_PARAM_DEFAULT, | 
|  | MATCH_OF_UNIT_VARIANT_VIA_PAREN_DOTDOT, | 
|  | CONST_ERR, | 
|  | RAW_POINTER_DERIVE | 
|  | ) | 
|  | } | 
|  | } | 
|  |  | 
|  | impl LateLintPass for HardwiredLints {} |