Struct rustc_borrowck::diags::BorrowckDiags
source · pub(crate) struct BorrowckDiags<'infcx, 'tcx> {
buffered_move_errors: BTreeMap<Vec<MoveOutIndex>, (PlaceRef<'tcx>, Diag<'infcx>)>,
buffered_mut_errors: FxIndexMap<Span, (Diag<'infcx>, usize)>,
buffered_diags: Vec<BufferedDiag<'infcx>>,
}
Fields§
§buffered_move_errors: BTreeMap<Vec<MoveOutIndex>, (PlaceRef<'tcx>, Diag<'infcx>)>
This field keeps track of move errors that are to be reported for given move indices.
There are situations where many errors can be reported for a single move out (see #53807) and we want only the best of those errors.
The report_use_of_moved_or_uninitialized
function checks this map and replaces the
diagnostic (if there is one) if the Place
of the error being reported is a prefix of
the Place
of the previous most diagnostic. This happens instead of buffering the
error. Once all move errors have been reported, any diagnostics in this map are added
to the buffer to be emitted.
BTreeMap
is used to preserve the order of insertions when iterating. This is necessary
when errors in the map are being re-added to the error buffer so that errors with the
same primary span come out in a consistent order.
buffered_mut_errors: FxIndexMap<Span, (Diag<'infcx>, usize)>
§buffered_diags: Vec<BufferedDiag<'infcx>>
Buffer of diagnostics to be reported. A mixture of error and non-error diagnostics.
Implementations§
source§impl<'infcx, 'tcx> BorrowckDiags<'infcx, 'tcx>
impl<'infcx, 'tcx> BorrowckDiags<'infcx, 'tcx>
pub(crate) fn new() -> Self
pub(crate) fn buffer_error(&mut self, diag: Diag<'infcx>)
pub(crate) fn buffer_non_error(&mut self, diag: Diag<'infcx, ()>)
Auto Trait Implementations§
impl<'infcx, 'tcx> Freeze for BorrowckDiags<'infcx, 'tcx>
impl<'infcx, 'tcx> !RefUnwindSafe for BorrowckDiags<'infcx, 'tcx>
impl<'infcx, 'tcx> !Send for BorrowckDiags<'infcx, 'tcx>
impl<'infcx, 'tcx> !Sync for BorrowckDiags<'infcx, 'tcx>
impl<'infcx, 'tcx> Unpin for BorrowckDiags<'infcx, 'tcx>
impl<'infcx, 'tcx> !UnwindSafe for BorrowckDiags<'infcx, 'tcx>
Blanket Implementations§
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, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
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<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> 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: 104 bytes