pub struct MultiSpan {
pub(crate) primary_spans: Vec<Span>,
pub(crate) span_labels: Vec<(Span, DiagMessage)>,
}
Expand description
A collection of Span
s.
Spans have two orthogonal attributes:
- They can be primary spans. In this case they are the locus of
the error, and would be rendered with
^^^
. - They can have a label. In this case, the label is written next to the mark in the snippet when we render.
Fields§
§primary_spans: Vec<Span>
§span_labels: Vec<(Span, DiagMessage)>
Implementations§
source§impl MultiSpan
impl MultiSpan
pub fn new() -> MultiSpan
pub fn from_span(primary_span: Span) -> MultiSpan
pub fn from_spans(vec: Vec<Span>) -> MultiSpan
pub fn push_span_label(&mut self, span: Span, label: impl Into<DiagMessage>)
sourcepub fn primary_span(&self) -> Option<Span>
pub fn primary_span(&self) -> Option<Span>
Selects the first primary span (if any).
sourcepub fn primary_spans(&self) -> &[Span]
pub fn primary_spans(&self) -> &[Span]
Returns all primary spans.
sourcepub fn has_primary_spans(&self) -> bool
pub fn has_primary_spans(&self) -> bool
Returns true
if any of the primary spans are displayable.
sourcepub fn is_dummy(&self) -> bool
pub fn is_dummy(&self) -> bool
Returns true
if this contains only a dummy primary span with any hygienic context.
sourcepub fn replace(&mut self, before: Span, after: Span) -> bool
pub fn replace(&mut self, before: Span, after: Span) -> bool
Replaces all occurrences of one Span with another. Used to move Span
s in areas that don’t
display well (like std macros). Returns whether replacements occurred.
pub fn pop_span_label(&mut self) -> Option<(Span, DiagMessage)>
sourcepub fn span_labels(&self) -> Vec<SpanLabel>
pub fn span_labels(&self) -> Vec<SpanLabel>
Returns the strings to highlight. We always ensure that there
is an entry for each of the primary spans – for each primary
span P
, if there is at least one label with span P
, we return
those labels (marked as primary). But otherwise we return
SpanLabel
instances with empty labels.
sourcepub fn has_span_labels(&self) -> bool
pub fn has_span_labels(&self) -> bool
Returns true
if any of the span labels is displayable.
sourcepub fn clone_ignoring_labels(&self) -> Self
pub fn clone_ignoring_labels(&self) -> Self
Clone this MultiSpan
without keeping any of the span labels - sometimes a MultiSpan
is
to be re-used in another diagnostic, but includes span_labels
which have translated
messages. These translated messages would fail to translate without their diagnostic
arguments which are unlikely to be cloned alongside the Span
.
Trait Implementations§
source§impl<__D: SpanDecoder> Decodable<__D> for MultiSpan
impl<__D: SpanDecoder> Decodable<__D> for MultiSpan
source§impl<__E: SpanEncoder> Encodable<__E> for MultiSpan
impl<__E: SpanEncoder> Encodable<__E> for MultiSpan
impl Eq for MultiSpan
impl StructuralPartialEq for MultiSpan
Auto Trait Implementations§
impl Freeze for MultiSpan
impl RefUnwindSafe for MultiSpan
impl !Send for MultiSpan
impl !Sync for MultiSpan
impl Unpin for MultiSpan
impl UnwindSafe for MultiSpan
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.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> 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: 48 bytes