pub enum FutureIncompatibilityReason {
FutureReleaseError,
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§
FutureReleaseError
This will be an error in a future release for all editions
Choose this variant when you are first introducing a “future incompatible” warning that is intended to eventually be fixed in the future.
After a lint has been in this state for a while and you feel like it is ready to graduate
to warning everyone, consider setting FutureIncompatibleInfo::report_in_deps
to true.
(see it’s documentation for more guidance)
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::FutureReleaseError
,
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 FutureReleaseError
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::FutureReleaseError
.
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§
Source§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<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:
FutureReleaseError
: 0 bytesFutureReleaseSemanticsChange
: 0 bytesEditionError
: 1 byteEditionSemanticsChange
: 1 byteEditionAndFutureReleaseError
: 1 byteEditionAndFutureReleaseSemanticsChange
: 1 byteCustom
: 23 bytes