pub enum FutureIncompatibilityReason {
FutureReleaseErrorDontReportInDeps,
FutureReleaseErrorReportInDeps,
FutureReleaseSemanticsChange,
EditionError(Edition),
EditionSemanticsChange(Edition),
EditionAndFutureReleaseError(Edition),
EditionAndFutureReleaseSemanticsChange(Edition),
Custom(&'static str),
}
Expand description
The reason for future incompatibility
Future-incompatible lints come in roughly two categories:
- 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.
- 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.
Variants§
FutureReleaseErrorDontReportInDeps
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
.
FutureReleaseErrorReportInDeps
This will be an error in a future release, and Cargo should create a report even for dependencies
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).
FutureReleaseSemanticsChange
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).
EditionError(Edition)
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).
EditionSemanticsChange(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.
EditionAndFutureReleaseError(Edition)
This will be an error in the provided edition and in a future release.
This variant a combination of FutureReleaseErrorDontReportInDeps
and EditionError
. This is useful in rare cases when we
want to have “preview” of a breaking change in an edition, but do a
breaking change later on all editions anyway.
EditionAndFutureReleaseSemanticsChange(Edition)
This will change meaning in the provided edition and in a future release.
This variant a combination of FutureReleaseSemanticsChange
and EditionSemanticsChange
. This is useful in rare cases when we
want to have “preview” of a breaking change in an edition, but do a
breaking change later on all editions anyway.
Custom(&'static str)
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
.
Implementations§
Trait Implementations§
Source§impl Clone for FutureIncompatibilityReason
impl Clone for FutureIncompatibilityReason
Source§fn clone(&self) -> FutureIncompatibilityReason
fn clone(&self) -> FutureIncompatibilityReason
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for FutureIncompatibilityReason
impl Debug for FutureIncompatibilityReason
impl Copy for FutureIncompatibilityReason
Auto Trait Implementations§
impl DynSend for FutureIncompatibilityReason
impl DynSync for FutureIncompatibilityReason
impl Freeze for FutureIncompatibilityReason
impl RefUnwindSafe for FutureIncompatibilityReason
impl Send for FutureIncompatibilityReason
impl Sync for FutureIncompatibilityReason
impl Unpin for FutureIncompatibilityReason
impl UnwindSafe for FutureIncompatibilityReason
Blanket Implementations§
§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on(self, arena: &'tcx Arena<'tcx>) -> &'tcx mut T
fn allocate_from_iter( arena: &'tcx Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'tcx mut [T]
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 24 bytes
Size for each variant:
FutureReleaseErrorDontReportInDeps
: 0 bytesFutureReleaseErrorReportInDeps
: 0 bytesFutureReleaseSemanticsChange
: 0 bytesEditionError
: 1 byteEditionSemanticsChange
: 1 byteEditionAndFutureReleaseError
: 1 byteEditionAndFutureReleaseSemanticsChange
: 1 byteCustom
: 23 bytes