summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_lint_defs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:25:56 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:25:56 +0000
commit018c4950b9406055dec02ef0fb52f132e2bb1e2c (patch)
treea835ebdf2088ef88fa681f8fad45f09922c1ae9a /compiler/rustc_lint_defs
parentAdding debian version 1.75.0+dfsg1-5. (diff)
downloadrustc-018c4950b9406055dec02ef0fb52f132e2bb1e2c.tar.xz
rustc-018c4950b9406055dec02ef0fb52f132e2bb1e2c.zip
Merging upstream version 1.76.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'compiler/rustc_lint_defs')
-rw-r--r--compiler/rustc_lint_defs/src/builtin.rs341
-rw-r--r--compiler/rustc_lint_defs/src/lib.rs71
2 files changed, 239 insertions, 173 deletions
diff --git a/compiler/rustc_lint_defs/src/builtin.rs b/compiler/rustc_lint_defs/src/builtin.rs
index bef9f469c..f9b66239b 100644
--- a/compiler/rustc_lint_defs/src/builtin.rs
+++ b/compiler/rustc_lint_defs/src/builtin.rs
@@ -8,6 +8,134 @@ use crate::{declare_lint, declare_lint_pass, FutureIncompatibilityReason};
use rustc_span::edition::Edition;
use rustc_span::symbol::sym;
+declare_lint_pass! {
+ /// Does nothing as a lint pass, but registers some `Lint`s
+ /// that are used by other parts of the compiler.
+ HardwiredLints => [
+ // tidy-alphabetical-start
+ ABSOLUTE_PATHS_NOT_STARTING_WITH_CRATE,
+ AMBIGUOUS_ASSOCIATED_ITEMS,
+ AMBIGUOUS_GLOB_IMPORTS,
+ AMBIGUOUS_GLOB_REEXPORTS,
+ ARITHMETIC_OVERFLOW,
+ ASM_SUB_REGISTER,
+ BAD_ASM_STYLE,
+ BARE_TRAIT_OBJECTS,
+ BINDINGS_WITH_VARIANT_NAME,
+ BREAK_WITH_LABEL_AND_LOOP,
+ BYTE_SLICE_IN_PACKED_STRUCT_WITH_DERIVE,
+ CENUM_IMPL_DROP_CAST,
+ COHERENCE_LEAK_CHECK,
+ COINDUCTIVE_OVERLAP_IN_COHERENCE,
+ CONFLICTING_REPR_HINTS,
+ CONST_EVALUATABLE_UNCHECKED,
+ CONST_ITEM_MUTATION,
+ CONST_PATTERNS_WITHOUT_PARTIAL_EQ,
+ DEAD_CODE,
+ DEPRECATED,
+ DEPRECATED_CFG_ATTR_CRATE_TYPE_NAME,
+ DEPRECATED_IN_FUTURE,
+ DEPRECATED_WHERE_CLAUSE_LOCATION,
+ DUPLICATE_MACRO_ATTRIBUTES,
+ ELIDED_LIFETIMES_IN_ASSOCIATED_CONSTANT,
+ ELIDED_LIFETIMES_IN_PATHS,
+ EXPORTED_PRIVATE_DEPENDENCIES,
+ FFI_UNWIND_CALLS,
+ FORBIDDEN_LINT_GROUPS,
+ FUNCTION_ITEM_REFERENCES,
+ FUZZY_PROVENANCE_CASTS,
+ HIDDEN_GLOB_REEXPORTS,
+ ILL_FORMED_ATTRIBUTE_INPUT,
+ ILLEGAL_FLOATING_POINT_LITERAL_PATTERN,
+ INCOMPLETE_INCLUDE,
+ INDIRECT_STRUCTURAL_MATCH,
+ INEFFECTIVE_UNSTABLE_TRAIT_IMPL,
+ INLINE_NO_SANITIZE,
+ INVALID_DOC_ATTRIBUTES,
+ INVALID_MACRO_EXPORT_ARGUMENTS,
+ INVALID_TYPE_PARAM_DEFAULT,
+ IRREFUTABLE_LET_PATTERNS,
+ LARGE_ASSIGNMENTS,
+ LATE_BOUND_LIFETIME_ARGUMENTS,
+ LEGACY_DERIVE_HELPERS,
+ LONG_RUNNING_CONST_EVAL,
+ LOSSY_PROVENANCE_CASTS,
+ MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS,
+ MACRO_USE_EXTERN_CRATE,
+ META_VARIABLE_MISUSE,
+ MISSING_ABI,
+ MISSING_FRAGMENT_SPECIFIER,
+ MUST_NOT_SUSPEND,
+ NAMED_ARGUMENTS_USED_POSITIONALLY,
+ NON_EXHAUSTIVE_OMITTED_PATTERNS,
+ NONTRIVIAL_STRUCTURAL_MATCH,
+ ORDER_DEPENDENT_TRAIT_OBJECTS,
+ OVERLAPPING_RANGE_ENDPOINTS,
+ PATTERNS_IN_FNS_WITHOUT_BODY,
+ POINTER_STRUCTURAL_MATCH,
+ PRIVATE_BOUNDS,
+ PRIVATE_INTERFACES,
+ PROC_MACRO_BACK_COMPAT,
+ PROC_MACRO_DERIVE_RESOLUTION_FALLBACK,
+ PUB_USE_OF_PRIVATE_EXTERN_CRATE,
+ REFINING_IMPL_TRAIT,
+ RENAMED_AND_REMOVED_LINTS,
+ REPR_TRANSPARENT_EXTERNAL_PRIVATE_FIELDS,
+ RUST_2021_INCOMPATIBLE_CLOSURE_CAPTURES,
+ RUST_2021_INCOMPATIBLE_OR_PATTERNS,
+ RUST_2021_PREFIXES_INCOMPATIBLE_SYNTAX,
+ RUST_2021_PRELUDE_COLLISIONS,
+ SEMICOLON_IN_EXPRESSIONS_FROM_MACROS,
+ SINGLE_USE_LIFETIMES,
+ SOFT_UNSTABLE,
+ STABLE_FEATURES,
+ SUSPICIOUS_AUTO_TRAIT_IMPLS,
+ TEST_UNSTABLE_LINT,
+ TEXT_DIRECTION_CODEPOINT_IN_COMMENT,
+ TRIVIAL_CASTS,
+ TRIVIAL_NUMERIC_CASTS,
+ TYVAR_BEHIND_RAW_POINTER,
+ UNCONDITIONAL_PANIC,
+ UNCONDITIONAL_RECURSION,
+ UNDEFINED_NAKED_FUNCTION_ABI,
+ UNEXPECTED_CFGS,
+ UNFULFILLED_LINT_EXPECTATIONS,
+ UNINHABITED_STATIC,
+ UNKNOWN_CRATE_TYPES,
+ UNKNOWN_LINTS,
+ UNKNOWN_OR_MALFORMED_DIAGNOSTIC_ATTRIBUTES,
+ UNNAMEABLE_TEST_ITEMS,
+ UNNAMEABLE_TYPES,
+ UNREACHABLE_CODE,
+ UNREACHABLE_PATTERNS,
+ UNSAFE_OP_IN_UNSAFE_FN,
+ UNSTABLE_NAME_COLLISIONS,
+ UNSTABLE_SYNTAX_PRE_EXPANSION,
+ UNSUPPORTED_CALLING_CONVENTIONS,
+ UNUSED_ASSIGNMENTS,
+ UNUSED_ASSOCIATED_TYPE_BOUNDS,
+ UNUSED_ATTRIBUTES,
+ UNUSED_CRATE_DEPENDENCIES,
+ UNUSED_EXTERN_CRATES,
+ UNUSED_FEATURES,
+ UNUSED_IMPORTS,
+ UNUSED_LABELS,
+ UNUSED_LIFETIMES,
+ UNUSED_MACRO_RULES,
+ UNUSED_MACROS,
+ UNUSED_MUT,
+ UNUSED_QUALIFICATIONS,
+ UNUSED_TUPLE_STRUCT_FIELDS,
+ UNUSED_UNSAFE,
+ UNUSED_VARIABLES,
+ USELESS_DEPRECATED,
+ WARNINGS,
+ WHERE_CLAUSES_OBJECT_SAFETY,
+ WRITES_THROUGH_IMMUTABLE_POINTER,
+ // tidy-alphabetical-end
+ ]
+}
+
declare_lint! {
/// The `forbidden_lint_groups` lint detects violations of
/// `forbid` applied to a lint group. Due to a bug in the compiler,
@@ -3135,7 +3263,7 @@ declare_lint! {
/// ### Example
///
/// ```text
- /// rustc --check-cfg 'names()'
+ /// rustc --check-cfg 'cfg()'
/// ```
///
/// ```rust,ignore (needs command line option)
@@ -3146,7 +3274,7 @@ declare_lint! {
/// This will produce:
///
/// ```text
- /// warning: unknown condition name used
+ /// warning: unexpected `cfg` condition name: `widnows`
/// --> lint_example.rs:1:7
/// |
/// 1 | #[cfg(widnows)]
@@ -3157,9 +3285,10 @@ declare_lint! {
///
/// ### Explanation
///
- /// This lint is only active when a `--check-cfg='names(...)'` option has been passed
- /// to the compiler and triggers whenever an unknown condition name or value is used.
- /// The known condition include names or values passed in `--check-cfg`, `--cfg`, and some
+ /// This lint is only active when `--check-cfg` arguments are being passed
+ /// to the compiler and triggers whenever an unexpected condition name or value is used.
+ ///
+ /// The known condition include names or values passed in `--check-cfg`, and some
/// well-knows names and values built into the compiler.
pub UNEXPECTED_CFGS,
Warn,
@@ -3348,133 +3477,6 @@ declare_lint! {
"name introduced by a private item shadows a name introduced by a public glob re-export",
}
-declare_lint_pass! {
- /// Does nothing as a lint pass, but registers some `Lint`s
- /// that are used by other parts of the compiler.
- HardwiredLints => [
- // tidy-alphabetical-start
- ABSOLUTE_PATHS_NOT_STARTING_WITH_CRATE,
- AMBIGUOUS_ASSOCIATED_ITEMS,
- AMBIGUOUS_GLOB_IMPORTS,
- AMBIGUOUS_GLOB_REEXPORTS,
- ARITHMETIC_OVERFLOW,
- ASM_SUB_REGISTER,
- BAD_ASM_STYLE,
- BARE_TRAIT_OBJECTS,
- BINDINGS_WITH_VARIANT_NAME,
- BREAK_WITH_LABEL_AND_LOOP,
- BYTE_SLICE_IN_PACKED_STRUCT_WITH_DERIVE,
- CENUM_IMPL_DROP_CAST,
- COHERENCE_LEAK_CHECK,
- COINDUCTIVE_OVERLAP_IN_COHERENCE,
- CONFLICTING_REPR_HINTS,
- CONST_EVALUATABLE_UNCHECKED,
- CONST_ITEM_MUTATION,
- CONST_PATTERNS_WITHOUT_PARTIAL_EQ,
- DEAD_CODE,
- DEPRECATED,
- DEPRECATED_CFG_ATTR_CRATE_TYPE_NAME,
- DEPRECATED_IN_FUTURE,
- DEPRECATED_WHERE_CLAUSE_LOCATION,
- DUPLICATE_MACRO_ATTRIBUTES,
- ELIDED_LIFETIMES_IN_ASSOCIATED_CONSTANT,
- ELIDED_LIFETIMES_IN_PATHS,
- EXPORTED_PRIVATE_DEPENDENCIES,
- FFI_UNWIND_CALLS,
- FORBIDDEN_LINT_GROUPS,
- FUNCTION_ITEM_REFERENCES,
- FUZZY_PROVENANCE_CASTS,
- HIDDEN_GLOB_REEXPORTS,
- ILL_FORMED_ATTRIBUTE_INPUT,
- ILLEGAL_FLOATING_POINT_LITERAL_PATTERN,
- IMPLIED_BOUNDS_ENTAILMENT,
- INCOMPLETE_INCLUDE,
- INDIRECT_STRUCTURAL_MATCH,
- INEFFECTIVE_UNSTABLE_TRAIT_IMPL,
- INLINE_NO_SANITIZE,
- INVALID_DOC_ATTRIBUTES,
- INVALID_MACRO_EXPORT_ARGUMENTS,
- INVALID_TYPE_PARAM_DEFAULT,
- IRREFUTABLE_LET_PATTERNS,
- LARGE_ASSIGNMENTS,
- LATE_BOUND_LIFETIME_ARGUMENTS,
- LEGACY_DERIVE_HELPERS,
- LONG_RUNNING_CONST_EVAL,
- LOSSY_PROVENANCE_CASTS,
- MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS,
- MACRO_USE_EXTERN_CRATE,
- META_VARIABLE_MISUSE,
- MISSING_ABI,
- MISSING_FRAGMENT_SPECIFIER,
- MUST_NOT_SUSPEND,
- NAMED_ARGUMENTS_USED_POSITIONALLY,
- NON_EXHAUSTIVE_OMITTED_PATTERNS,
- NONTRIVIAL_STRUCTURAL_MATCH,
- ORDER_DEPENDENT_TRAIT_OBJECTS,
- OVERLAPPING_RANGE_ENDPOINTS,
- PATTERNS_IN_FNS_WITHOUT_BODY,
- POINTER_STRUCTURAL_MATCH,
- PRIVATE_BOUNDS,
- PRIVATE_INTERFACES,
- PROC_MACRO_BACK_COMPAT,
- PROC_MACRO_DERIVE_RESOLUTION_FALLBACK,
- PUB_USE_OF_PRIVATE_EXTERN_CRATE,
- REFINING_IMPL_TRAIT,
- RENAMED_AND_REMOVED_LINTS,
- REPR_TRANSPARENT_EXTERNAL_PRIVATE_FIELDS,
- RUST_2021_INCOMPATIBLE_CLOSURE_CAPTURES,
- RUST_2021_INCOMPATIBLE_OR_PATTERNS,
- RUST_2021_PREFIXES_INCOMPATIBLE_SYNTAX,
- RUST_2021_PRELUDE_COLLISIONS,
- SEMICOLON_IN_EXPRESSIONS_FROM_MACROS,
- SINGLE_USE_LIFETIMES,
- SOFT_UNSTABLE,
- STABLE_FEATURES,
- SUSPICIOUS_AUTO_TRAIT_IMPLS,
- TEST_UNSTABLE_LINT,
- TEXT_DIRECTION_CODEPOINT_IN_COMMENT,
- TRIVIAL_CASTS,
- TRIVIAL_NUMERIC_CASTS,
- TYVAR_BEHIND_RAW_POINTER,
- UNCONDITIONAL_PANIC,
- UNCONDITIONAL_RECURSION,
- UNDEFINED_NAKED_FUNCTION_ABI,
- UNFULFILLED_LINT_EXPECTATIONS,
- UNINHABITED_STATIC,
- UNKNOWN_CRATE_TYPES,
- UNKNOWN_LINTS,
- UNKNOWN_OR_MALFORMED_DIAGNOSTIC_ATTRIBUTES,
- UNNAMEABLE_TEST_ITEMS,
- UNNAMEABLE_TYPES,
- UNREACHABLE_CODE,
- UNREACHABLE_PATTERNS,
- UNSAFE_OP_IN_UNSAFE_FN,
- UNSTABLE_NAME_COLLISIONS,
- UNSTABLE_SYNTAX_PRE_EXPANSION,
- UNSUPPORTED_CALLING_CONVENTIONS,
- UNUSED_ASSIGNMENTS,
- UNUSED_ASSOCIATED_TYPE_BOUNDS,
- UNUSED_ATTRIBUTES,
- UNUSED_CRATE_DEPENDENCIES,
- UNUSED_EXTERN_CRATES,
- UNUSED_FEATURES,
- UNUSED_IMPORTS,
- UNUSED_LABELS,
- UNUSED_LIFETIMES,
- UNUSED_MACRO_RULES,
- UNUSED_MACROS,
- UNUSED_MUT,
- UNUSED_QUALIFICATIONS,
- UNUSED_TUPLE_STRUCT_FIELDS,
- UNUSED_UNSAFE,
- UNUSED_VARIABLES,
- USELESS_DEPRECATED,
- WARNINGS,
- WHERE_CLAUSES_OBJECT_SAFETY,
- // tidy-alphabetical-end
- ]
-}
-
declare_lint! {
/// The `long_running_const_eval` lint is emitted when const
/// eval is running for a long time to ensure rustc terminates
@@ -4233,47 +4235,6 @@ declare_lint! {
}
declare_lint! {
- /// The `implied_bounds_entailment` lint detects cases where the arguments of an impl method
- /// have stronger implied bounds than those from the trait method it's implementing.
- ///
- /// ### Example
- ///
- /// ```rust,compile_fail
- /// #![deny(implied_bounds_entailment)]
- ///
- /// trait Trait {
- /// fn get<'s>(s: &'s str, _: &'static &'static ()) -> &'static str;
- /// }
- ///
- /// impl Trait for () {
- /// fn get<'s>(s: &'s str, _: &'static &'s ()) -> &'static str {
- /// s
- /// }
- /// }
- ///
- /// let val = <() as Trait>::get(&String::from("blah blah blah"), &&());
- /// println!("{}", val);
- /// ```
- ///
- /// {{produces}}
- ///
- /// ### Explanation
- ///
- /// Neither the trait method, which provides no implied bounds about `'s`, nor the impl,
- /// requires the main function to prove that 's: 'static, but the impl method is allowed
- /// to assume that `'s: 'static` within its own body.
- ///
- /// This can be used to implement an unsound API if used incorrectly.
- pub IMPLIED_BOUNDS_ENTAILMENT,
- Deny,
- "impl method assumes more implied bounds than its corresponding trait method",
- @future_incompatible = FutureIncompatibleInfo {
- reason: FutureIncompatibilityReason::FutureReleaseErrorReportInDeps,
- reference: "issue #105572 <https://github.com/rust-lang/rust/issues/105572>",
- };
-}
-
-declare_lint! {
/// The `byte_slice_in_packed_struct_with_derive` lint detects cases where a byte slice field
/// (`[u8]`) or string slice field (`str`) is used in a `packed` struct that derives one or
/// more built-in traits.
@@ -4619,3 +4580,37 @@ declare_lint! {
reference: "issue #115010 <https://github.com/rust-lang/rust/issues/115010>",
};
}
+
+declare_lint! {
+ /// The `writes_through_immutable_pointer` lint detects writes through pointers derived from
+ /// shared references.
+ ///
+ /// ### Example
+ ///
+ /// ```rust,compile_fail
+ /// #![feature(const_mut_refs)]
+ /// const WRITE_AFTER_CAST: () = unsafe {
+ /// let mut x = 0;
+ /// let ptr = &x as *const i32 as *mut i32;
+ /// *ptr = 0;
+ /// };
+ /// ```
+ ///
+ /// {{produces}}
+ ///
+ /// ### Explanation
+ ///
+ /// Shared references are immutable (when there is no `UnsafeCell` involved),
+ /// and writing through them or through pointers derived from them is Undefined Behavior.
+ /// The compiler recently learned to detect such Undefined Behavior during compile-time
+ /// evaluation, and in the future this will raise a hard error.
+ ///
+ /// [future-incompatible]: ../index.md#future-incompatible-lints
+ pub WRITES_THROUGH_IMMUTABLE_POINTER,
+ Warn,
+ "shared references are immutable, and pointers derived from them must not be written to",
+ @future_incompatible = FutureIncompatibleInfo {
+ reason: FutureIncompatibilityReason::FutureReleaseErrorReportInDeps,
+ reference: "issue #X <https://github.com/rust-lang/rust/issues/X>",
+ };
+}
diff --git a/compiler/rustc_lint_defs/src/lib.rs b/compiler/rustc_lint_defs/src/lib.rs
index 878c1a65d..a25cfe68e 100644
--- a/compiler/rustc_lint_defs/src/lib.rs
+++ b/compiler/rustc_lint_defs/src/lib.rs
@@ -345,12 +345,34 @@ pub struct FutureIncompatibleInfo {
}
/// The reason for future incompatibility
+///
+/// Future-incompatible lints come in roughly two categories:
+///
+/// 1. There was a mistake in the compiler (such as a soundness issue), and
+/// we're trying to fix it, but it may be a breaking change.
+/// 2. A change across an Edition boundary, typically used for the
+/// introduction of new language features that can't otherwise be
+/// introduced in a backwards-compatible way.
+///
+/// See <https://rustc-dev-guide.rust-lang.org/bug-fix-procedure.html> and
+/// <https://rustc-dev-guide.rust-lang.org/diagnostics.html#future-incompatible-lints>
+/// for more information.
#[derive(Copy, Clone, Debug)]
pub enum FutureIncompatibilityReason {
/// This will be an error in a future release for all editions
///
/// This will *not* show up in cargo's future breakage report.
/// The warning will hence only be seen in local crates, not in dependencies.
+ ///
+ /// Choose this variant when you are first introducing a "future
+ /// incompatible" warning that is intended to eventually be fixed in the
+ /// future. This allows crate developers an opportunity to fix the warning
+ /// before blasting all dependents with a warning they can't fix
+ /// (dependents have to wait for a new release of the affected crate to be
+ /// published).
+ ///
+ /// After a lint has been in this state for a while, consider graduating
+ /// it to [`FutureIncompatibilityReason::FutureReleaseErrorReportInDeps`].
FutureReleaseErrorDontReportInDeps,
/// This will be an error in a future release, and
/// Cargo should create a report even for dependencies
@@ -358,17 +380,62 @@ pub enum FutureIncompatibilityReason {
/// This is the *only* reason that will make future incompatibility warnings show up in cargo's
/// reports. All other future incompatibility warnings are not visible when they occur in a
/// dependency.
+ ///
+ /// Choose this variant after the lint has been sitting in the
+ /// [`FutureIncompatibilityReason::FutureReleaseErrorDontReportInDeps`]
+ /// state for a while, and you feel like it is ready to graduate to
+ /// warning everyone. It is a good signal that it is ready if you can
+ /// determine that all or most affected crates on crates.io have been
+ /// updated.
+ ///
+ /// After some period of time, lints with this variant can be turned into
+ /// hard errors (and the lint removed). Preferably when there is some
+ /// confidence that the number of impacted projects is very small (few
+ /// should have a broken dependency in their dependency tree).
FutureReleaseErrorReportInDeps,
/// Code that changes meaning in some way in a
/// future release.
+ ///
+ /// Choose this variant when the semantics of existing code is changing,
+ /// (as opposed to
+ /// [`FutureIncompatibilityReason::FutureReleaseErrorDontReportInDeps`],
+ /// which is for when code is going to be rejected in the future).
FutureReleaseSemanticsChange,
/// Previously accepted code that will become an
/// error in the provided edition
+ ///
+ /// Choose this variant for code that you want to start rejecting across
+ /// an edition boundary. This will automatically include the lint in the
+ /// `rust-20xx-compatibility` lint group, which is used by `cargo fix
+ /// --edition` to do migrations. The lint *should* be auto-fixable with
+ /// [`Applicability::MachineApplicable`].
+ ///
+ /// The lint can either be `Allow` or `Warn` by default. If it is `Allow`,
+ /// users usually won't see this warning unless they are doing an edition
+ /// migration manually or there is a problem during the migration (cargo's
+ /// automatic migrations will force the level to `Warn`). If it is `Warn`
+ /// by default, users on all editions will see this warning (only do this
+ /// if you think it is important for everyone to be aware of the change,
+ /// and to encourage people to update their code on all editions).
+ ///
+ /// See also [`FutureIncompatibilityReason::EditionSemanticsChange`] if
+ /// you have code that is changing semantics across the edition (as
+ /// opposed to being rejected).
EditionError(Edition),
/// Code that changes meaning in some way in
/// the provided edition
+ ///
+ /// This is the same as [`FutureIncompatibilityReason::EditionError`],
+ /// except for situations where the semantics change across an edition. It
+ /// slightly changes the text of the diagnostic, but is otherwise the
+ /// same.
EditionSemanticsChange(Edition),
/// A custom reason.
+ ///
+ /// Choose this variant if the built-in text of the diagnostic of the
+ /// other variants doesn't match your situation. This is behaviorally
+ /// equivalent to
+ /// [`FutureIncompatibilityReason::FutureReleaseErrorDontReportInDeps`].
Custom(&'static str),
}
@@ -583,6 +650,10 @@ pub enum BuiltinLintDiagnostics {
elided: bool,
span: Span,
},
+ RedundantImportVisibility {
+ span: Span,
+ max_vis: String,
+ },
}
/// Lints that are buffered up early on in the `Session` before the