pub struct Diag {
pub messages: Vec<(DiagMsg, Style)>,
pub span: MultiSpan,
pub children: Vec<SubDiagnostic>,
pub code: Option<DiagId>,
pub suggestions: Suggestions,
pub created_at: &'static Location<'static>,
/* private fields */
}
Expand description
A compiler diagnostic.
Fields§
§messages: Vec<(DiagMsg, Style)>
§span: MultiSpan
§children: Vec<SubDiagnostic>
§code: Option<DiagId>
§suggestions: Suggestions
§created_at: &'static Location<'static>
Implementations§
Source§impl Diag
impl Diag
Sourcepub fn new<M: Into<DiagMsg>>(level: Level, msg: M) -> Self
pub fn new<M: Into<DiagMsg>>(level: Level, msg: M) -> Self
Creates a new Diag
with a single message.
Sourcepub fn new_with_messages(level: Level, messages: Vec<(DiagMsg, Style)>) -> Self
pub fn new_with_messages(level: Level, messages: Vec<(DiagMsg, Style)>) -> Self
Creates a new Diag
with multiple messages.
Sourcepub fn label_with_style(&self, supports_color: bool) -> Cow<'_, str>
pub fn label_with_style(&self, supports_color: bool) -> Cow<'_, str>
Formats the diagnostic messages into a single string with ANSI color codes if applicable.
Source§impl Diag
Setters.
impl Diag
Setters.
Sourcepub fn span(&mut self, span: impl Into<MultiSpan>) -> &mut Self
pub fn span(&mut self, span: impl Into<MultiSpan>) -> &mut Self
Sets the span of this diagnostic.
Sourcepub fn span_label(&mut self, span: Span, label: impl Into<DiagMsg>) -> &mut Self
pub fn span_label(&mut self, span: Span, label: impl Into<DiagMsg>) -> &mut Self
Adds a span/label to be included in the resulting snippet.
This is pushed onto the MultiSpan
that was created when the diagnostic
was first built. That means it will be shown together with the original
span/label, not a span added by one of the span_{note,warn,help,suggestions}
methods.
This span is not considered a “primary span”; only
the Span
supplied when creating the diagnostic is primary.
Sourcepub fn span_labels(
&mut self,
spans: impl IntoIterator<Item = Span>,
label: impl Into<DiagMsg>,
) -> &mut Self
pub fn span_labels( &mut self, spans: impl IntoIterator<Item = Span>, label: impl Into<DiagMsg>, ) -> &mut Self
Labels all the given spans with the provided label.
See Self::span_label()
for more information.
Source§impl Diag
Sub-diagnostics.
impl Diag
Sub-diagnostics.
Sourcepub fn warn(&mut self, msg: impl Into<DiagMsg>) -> &mut Self
pub fn warn(&mut self, msg: impl Into<DiagMsg>) -> &mut Self
Add a warning attached to this diagnostic.
Sourcepub fn span_warn(
&mut self,
span: impl Into<MultiSpan>,
msg: impl Into<DiagMsg>,
) -> &mut Self
pub fn span_warn( &mut self, span: impl Into<MultiSpan>, msg: impl Into<DiagMsg>, ) -> &mut Self
Prints the span with a warning above it.
This is like Diag::warn()
, but it gets its own span.
Sourcepub fn span_note(
&mut self,
span: impl Into<MultiSpan>,
msg: impl Into<DiagMsg>,
) -> &mut Self
pub fn span_note( &mut self, span: impl Into<MultiSpan>, msg: impl Into<DiagMsg>, ) -> &mut Self
Prints the span with a note above it.
This is like Diag::note()
, but it gets its own span.
pub fn highlighted_note( &mut self, messages: Vec<(impl Into<DiagMsg>, Style)>, ) -> &mut Self
Sourcepub fn note_once(&mut self, msg: impl Into<DiagMsg>) -> &mut Self
pub fn note_once(&mut self, msg: impl Into<DiagMsg>) -> &mut Self
Prints the span with a note above it.
This is like Diag::note()
, but it gets emitted only once.
Sourcepub fn span_note_once(
&mut self,
span: impl Into<MultiSpan>,
msg: impl Into<DiagMsg>,
) -> &mut Self
pub fn span_note_once( &mut self, span: impl Into<MultiSpan>, msg: impl Into<DiagMsg>, ) -> &mut Self
Prints the span with a note above it.
This is like Diag::note_once()
, but it gets its own span.
Sourcepub fn help(&mut self, msg: impl Into<DiagMsg>) -> &mut Self
pub fn help(&mut self, msg: impl Into<DiagMsg>) -> &mut Self
Add a help message attached to this diagnostic.
Sourcepub fn help_once(&mut self, msg: impl Into<DiagMsg>) -> &mut Self
pub fn help_once(&mut self, msg: impl Into<DiagMsg>) -> &mut Self
Prints the span with a help above it.
This is like Diag::help()
, but it gets its own span.
Source§impl Diag
Suggestions.
impl Diag
Suggestions.
Sourcepub fn disable_suggestions(&mut self) -> &mut Self
pub fn disable_suggestions(&mut self) -> &mut Self
Disallow attaching suggestions to this diagnostic.
Any suggestions attached e.g. with the span_suggestion_*
methods
(before and after the call to disable_suggestions
) will be ignored.
Sourcepub fn seal_suggestions(&mut self) -> &mut Self
pub fn seal_suggestions(&mut self) -> &mut Self
Prevent new suggestions from being added to this diagnostic.
Suggestions added before the call to .seal_suggestions()
will be preserved
and new suggestions will be ignored.
Sourcepub fn span_suggestion(
&mut self,
span: Span,
msg: impl Into<DiagMsg>,
suggestion: impl Into<DiagMsg>,
applicability: Applicability,
) -> &mut Self
pub fn span_suggestion( &mut self, span: Span, msg: impl Into<DiagMsg>, suggestion: impl Into<DiagMsg>, applicability: Applicability, ) -> &mut Self
Prints out a message with a suggested edit of the code.
In case of short messages and a simple suggestion, rustc displays it as a label:
try adding parentheses: `(tup.0).1`
The message
- should not end in any punctuation (a
:
is added automatically) - should not be a question (avoid language like “did you mean”)
- should not contain any phrases like “the following”, “as shown”, etc.
- may look like “to do xyz, use” or “to do xyz, use abc”
- may contain a name of a function, variable, or type, but not whole expressions
See CodeSuggestion
for more information.
Sourcepub fn span_suggestion_with_style(
&mut self,
span: Span,
msg: impl Into<DiagMsg>,
suggestion: impl Into<DiagMsg>,
applicability: Applicability,
style: SuggestionStyle,
) -> &mut Self
pub fn span_suggestion_with_style( &mut self, span: Span, msg: impl Into<DiagMsg>, suggestion: impl Into<DiagMsg>, applicability: Applicability, style: SuggestionStyle, ) -> &mut Self
Diag::span_suggestion()
but you can set the SuggestionStyle
.
Sourcepub fn multipart_suggestion(
&mut self,
msg: impl Into<DiagMsg>,
substitutions: Vec<(Span, DiagMsg)>,
applicability: Applicability,
) -> &mut Self
pub fn multipart_suggestion( &mut self, msg: impl Into<DiagMsg>, substitutions: Vec<(Span, DiagMsg)>, applicability: Applicability, ) -> &mut Self
Show a suggestion that has multiple parts to it. In other words, multiple changes need to be applied as part of this suggestion.
Sourcepub fn multipart_suggestion_with_style(
&mut self,
msg: impl Into<DiagMsg>,
substitutions: Vec<(Span, DiagMsg)>,
applicability: Applicability,
style: SuggestionStyle,
) -> &mut Self
pub fn multipart_suggestion_with_style( &mut self, msg: impl Into<DiagMsg>, substitutions: Vec<(Span, DiagMsg)>, applicability: Applicability, style: SuggestionStyle, ) -> &mut Self
Diag::multipart_suggestion()
but you can set the SuggestionStyle
.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Diag
impl RefUnwindSafe for Diag
impl Send for Diag
impl Sync for Diag
impl Unpin for Diag
impl UnwindSafe for Diag
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§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
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>
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: 160 bytes