//! 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 crate::lint::FutureIncompatibleInfo; use crate::{declare_lint, declare_lint_pass}; use rustc_span::edition::Edition; declare_lint! { pub ILL_FORMED_ATTRIBUTE_INPUT, Deny, "ill-formed attribute inputs that were previously accepted and used in practice", @future_incompatible = FutureIncompatibleInfo { reference: "issue #57571 ", edition: None, }; } declare_lint! { pub CONFLICTING_REPR_HINTS, Deny, "conflicts between `#[repr(..)]` hints that were previously accepted and used in practice", @future_incompatible = FutureIncompatibleInfo { reference: "issue #68585 ", edition: None, }; } declare_lint! { pub META_VARIABLE_MISUSE, Allow, "possible meta-variable misuse at macro definition" } declare_lint! { pub INCOMPLETE_INCLUDE, Deny, "trailing content in included file" } declare_lint! { pub ARITHMETIC_OVERFLOW, Deny, "arithmetic operation overflows" } declare_lint! { pub UNCONDITIONAL_PANIC, Deny, "operation will cause a panic at runtime" } declare_lint! { pub CONST_ERR, Deny, "constant evaluation detected erroneous expression", report_in_external_macro } 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 UNUSED_ATTRIBUTES, Warn, "detects attributes that were not used by the compiler" } declare_lint! { pub UNREACHABLE_CODE, Warn, "detects unreachable code paths", report_in_external_macro } declare_lint! { pub UNREACHABLE_PATTERNS, Warn, "detects unreachable patterns" } declare_lint! { pub OVERLAPPING_PATTERNS, Warn, "detects overlapping patterns" } declare_lint! { pub BINDINGS_WITH_VARIANT_NAME, Warn, "detects pattern bindings with the same name as one of the matched variants" } declare_lint! { pub UNUSED_MACROS, Warn, "detects macros that were not used" } declare_lint! { pub WARNINGS, Warn, "mass-change the level for lints which produce warnings" } declare_lint! { pub UNUSED_FEATURES, Warn, "unused 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 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", @future_incompatible = FutureIncompatibleInfo { reference: "issue #34537 ", edition: None, }; } declare_lint! { pub EXPORTED_PRIVATE_DEPENDENCIES, Warn, "public interface leaks type from a private dependency" } declare_lint! { pub PUB_USE_OF_PRIVATE_EXTERN_CRATE, Deny, "detect public re-exports of private extern crates", @future_incompatible = FutureIncompatibleInfo { reference: "issue #34537 ", edition: None, }; } declare_lint! { pub INVALID_TYPE_PARAM_DEFAULT, Deny, "type parameter default erroneously allowed in invalid location", @future_incompatible = FutureIncompatibleInfo { reference: "issue #36887 ", edition: None, }; } declare_lint! { pub RENAMED_AND_REMOVED_LINTS, Warn, "lints that have been renamed or removed" } declare_lint! { pub SAFE_PACKED_BORROWS, Warn, "safe borrows of fields of packed structs were was erroneously allowed", @future_incompatible = FutureIncompatibleInfo { reference: "issue #46043 ", edition: None, }; } declare_lint! { pub PATTERNS_IN_FNS_WITHOUT_BODY, Deny, "patterns in functions without body were erroneously allowed", @future_incompatible = FutureIncompatibleInfo { reference: "issue #35203 ", edition: None, }; } declare_lint! { pub MISSING_FRAGMENT_SPECIFIER, Deny, "detects missing fragment specifiers in unused `macro_rules!` patterns", @future_incompatible = FutureIncompatibleInfo { reference: "issue #40107 ", edition: None, }; } declare_lint! { pub LATE_BOUND_LIFETIME_ARGUMENTS, Warn, "detects generic lifetime arguments in path segments with late bound lifetime parameters", @future_incompatible = FutureIncompatibleInfo { reference: "issue #42868 ", edition: None, }; } declare_lint! { pub ORDER_DEPENDENT_TRAIT_OBJECTS, Deny, "trait-object types were treated as different depending on marker-trait order", @future_incompatible = FutureIncompatibleInfo { reference: "issue #56484 ", edition: None, }; } declare_lint! { pub COHERENCE_LEAK_CHECK, Warn, "distinct impls distinguished only by the leak-check code", @future_incompatible = FutureIncompatibleInfo { reference: "issue #56105 ", edition: None, }; } declare_lint! { pub DEPRECATED, Warn, "detects use of deprecated items", report_in_external_macro } declare_lint! { pub UNUSED_UNSAFE, Warn, "unnecessary use of an `unsafe` block" } declare_lint! { pub UNUSED_MUT, Warn, "detect mut variables which don't need to be mutable" } declare_lint! { pub UNCONDITIONAL_RECURSION, Warn, "functions that cannot return without calling themselves" } declare_lint! { pub SINGLE_USE_LIFETIMES, Allow, "detects lifetime parameters that are only used once" } declare_lint! { pub UNUSED_LIFETIMES, Allow, "detects lifetime parameters that are never used" } declare_lint! { pub TYVAR_BEHIND_RAW_POINTER, Warn, "raw pointer to an inference variable", @future_incompatible = FutureIncompatibleInfo { reference: "issue #46906 ", edition: Some(Edition::Edition2018), }; } declare_lint! { pub ELIDED_LIFETIMES_IN_PATHS, Allow, "hidden lifetime parameters in types are deprecated" } declare_lint! { pub BARE_TRAIT_OBJECTS, Warn, "suggest using `dyn Trait` for trait objects" } declare_lint! { pub ABSOLUTE_PATHS_NOT_STARTING_WITH_CRATE, Allow, "fully qualified paths that start with a module name \ instead of `crate`, `self`, or an extern crate name", @future_incompatible = FutureIncompatibleInfo { reference: "issue #53130 ", edition: Some(Edition::Edition2018), }; } declare_lint! { pub ILLEGAL_FLOATING_POINT_LITERAL_PATTERN, Warn, "floating-point literals cannot be used in patterns", @future_incompatible = FutureIncompatibleInfo { reference: "issue #41620 ", edition: None, }; } declare_lint! { pub UNSTABLE_NAME_COLLISIONS, Warn, "detects name collision with an existing but unstable method", @future_incompatible = FutureIncompatibleInfo { reference: "issue #48919 ", edition: None, // Note: this item represents future incompatibility of all unstable functions in the // standard library, and thus should never be removed or changed to an error. }; } declare_lint! { pub IRREFUTABLE_LET_PATTERNS, Warn, "detects irrefutable patterns in if-let and while-let statements" } declare_lint! { pub UNUSED_LABELS, Warn, "detects labels that are never used" } declare_lint! { pub INTRA_DOC_LINK_RESOLUTION_FAILURE, Warn, "failures in resolving intra-doc link targets" } declare_lint! { pub MISSING_DOC_CODE_EXAMPLES, Allow, "detects publicly-exported items without code samples in their documentation" } declare_lint! { pub PRIVATE_DOC_TESTS, Allow, "detects code samples in docs of private items not documented by rustdoc" } declare_lint! { pub WHERE_CLAUSES_OBJECT_SAFETY, Warn, "checks the object safety of where clauses", @future_incompatible = FutureIncompatibleInfo { reference: "issue #51443 ", edition: None, }; } declare_lint! { pub PROC_MACRO_DERIVE_RESOLUTION_FALLBACK, Warn, "detects proc macro derives using inaccessible names from parent modules", @future_incompatible = FutureIncompatibleInfo { reference: "issue #50504 ", edition: None, }; } declare_lint! { pub MACRO_USE_EXTERN_CRATE, Allow, "the `#[macro_use]` attribute is now deprecated in favor of using macros \ via the module system" } declare_lint! { pub MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS, Deny, "macro-expanded `macro_export` macros from the current crate \ cannot be referred to by absolute paths", @future_incompatible = FutureIncompatibleInfo { reference: "issue #52234 ", edition: None, }; } declare_lint! { pub EXPLICIT_OUTLIVES_REQUIREMENTS, Allow, "outlives requirements can be inferred" } declare_lint! { pub INDIRECT_STRUCTURAL_MATCH, // defaulting to allow until rust-lang/rust#62614 is fixed. Allow, "pattern with const indirectly referencing non-`#[structural_match]` type", @future_incompatible = FutureIncompatibleInfo { reference: "issue #62411 ", edition: None, }; } declare_lint! { pub DEPRECATED_IN_FUTURE, Allow, "detects use of items that will be deprecated in a future version", report_in_external_macro } declare_lint! { pub AMBIGUOUS_ASSOCIATED_ITEMS, Deny, "ambiguous associated items", @future_incompatible = FutureIncompatibleInfo { reference: "issue #57644 ", edition: None, }; } declare_lint! { pub MUTABLE_BORROW_RESERVATION_CONFLICT, Warn, "reservation of a two-phased borrow conflicts with other shared borrows", @future_incompatible = FutureIncompatibleInfo { reference: "issue #59159 ", edition: None, }; } declare_lint! { pub SOFT_UNSTABLE, Deny, "a feature gate that doesn't break dependent crates", @future_incompatible = FutureIncompatibleInfo { reference: "issue #64266 ", edition: None, }; } declare_lint! { pub INLINE_NO_SANITIZE, Warn, "detects incompatible use of `#[inline(always)]` and `#[no_sanitize(...)]`", } declare_lint_pass! { /// Does nothing as a lint pass, but registers some `Lint`s /// that are used by other parts of the compiler. HardwiredLints => [ ILLEGAL_FLOATING_POINT_LITERAL_PATTERN, ARITHMETIC_OVERFLOW, UNCONDITIONAL_PANIC, UNUSED_IMPORTS, UNUSED_EXTERN_CRATES, UNUSED_QUALIFICATIONS, UNKNOWN_LINTS, UNUSED_VARIABLES, UNUSED_ASSIGNMENTS, DEAD_CODE, UNREACHABLE_CODE, UNREACHABLE_PATTERNS, OVERLAPPING_PATTERNS, BINDINGS_WITH_VARIANT_NAME, UNUSED_MACROS, WARNINGS, UNUSED_FEATURES, STABLE_FEATURES, UNKNOWN_CRATE_TYPES, TRIVIAL_CASTS, TRIVIAL_NUMERIC_CASTS, PRIVATE_IN_PUBLIC, EXPORTED_PRIVATE_DEPENDENCIES, PUB_USE_OF_PRIVATE_EXTERN_CRATE, INVALID_TYPE_PARAM_DEFAULT, CONST_ERR, RENAMED_AND_REMOVED_LINTS, SAFE_PACKED_BORROWS, PATTERNS_IN_FNS_WITHOUT_BODY, MISSING_FRAGMENT_SPECIFIER, LATE_BOUND_LIFETIME_ARGUMENTS, ORDER_DEPENDENT_TRAIT_OBJECTS, COHERENCE_LEAK_CHECK, DEPRECATED, UNUSED_UNSAFE, UNUSED_MUT, UNCONDITIONAL_RECURSION, SINGLE_USE_LIFETIMES, UNUSED_LIFETIMES, UNUSED_LABELS, TYVAR_BEHIND_RAW_POINTER, ELIDED_LIFETIMES_IN_PATHS, BARE_TRAIT_OBJECTS, ABSOLUTE_PATHS_NOT_STARTING_WITH_CRATE, UNSTABLE_NAME_COLLISIONS, IRREFUTABLE_LET_PATTERNS, INTRA_DOC_LINK_RESOLUTION_FAILURE, MISSING_DOC_CODE_EXAMPLES, PRIVATE_DOC_TESTS, WHERE_CLAUSES_OBJECT_SAFETY, PROC_MACRO_DERIVE_RESOLUTION_FALLBACK, MACRO_USE_EXTERN_CRATE, MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS, ILL_FORMED_ATTRIBUTE_INPUT, CONFLICTING_REPR_HINTS, META_VARIABLE_MISUSE, DEPRECATED_IN_FUTURE, AMBIGUOUS_ASSOCIATED_ITEMS, MUTABLE_BORROW_RESERVATION_CONFLICT, INDIRECT_STRUCTURAL_MATCH, SOFT_UNSTABLE, INLINE_NO_SANITIZE, ] } declare_lint! { pub UNUSED_DOC_COMMENTS, Warn, "detects doc comments that aren't used by rustdoc" } declare_lint_pass!(UnusedDocComment => [UNUSED_DOC_COMMENTS]);