Maintain highlighting in note and help even when they have a span

This commit is contained in:
Esteban Küber 2024-05-09 20:55:32 +00:00
parent 60d146580c
commit db6c05f9b9
2 changed files with 26 additions and 2 deletions

View File

@ -741,6 +741,16 @@ pub fn highlighted_note(&mut self, msg: Vec<StringPart>) -> &mut Self {
self self
} }
#[rustc_lint_diagnostics]
pub fn highlighted_span_note(
&mut self,
span: impl Into<MultiSpan>,
msg: Vec<StringPart>,
) -> &mut Self {
self.sub_with_highlights(Level::Note, msg, span.into());
self
}
/// This is like [`Diag::note()`], but it's only printed once. /// This is like [`Diag::note()`], but it's only printed once.
#[rustc_lint_diagnostics] #[rustc_lint_diagnostics]
pub fn note_once(&mut self, msg: impl Into<SubdiagMessage>) -> &mut Self { pub fn note_once(&mut self, msg: impl Into<SubdiagMessage>) -> &mut Self {
@ -815,6 +825,17 @@ pub fn highlighted_help(&mut self, msg: Vec<StringPart>) -> &mut Self {
self self
} }
/// Add a help message attached to this diagnostic with a customizable highlighted message.
#[rustc_lint_diagnostics]
pub fn highlighted_span_help(
&mut self,
span: impl Into<MultiSpan>,
msg: Vec<StringPart>,
) -> &mut Self {
self.sub_with_highlights(Level::Help, msg, span.into());
self
}
/// Prints the span with some help above it. /// Prints the span with some help above it.
/// This is like [`Diag::help()`], but it gets its own span. /// This is like [`Diag::help()`], but it gets its own span.
#[rustc_lint_diagnostics] #[rustc_lint_diagnostics]

View File

@ -1347,7 +1347,7 @@ fn emit_messages_default_inner(
label_width += 2; label_width += 2;
} }
let mut line = 0; let mut line = 0;
for (text, _) in msgs.iter() { for (text, style) in msgs.iter() {
let text = self.translate_message(text, args).map_err(Report::new).unwrap(); let text = self.translate_message(text, args).map_err(Report::new).unwrap();
// Account for newlines to align output to its label. // Account for newlines to align output to its label.
for text in normalize_whitespace(&text).lines() { for text in normalize_whitespace(&text).lines() {
@ -1358,7 +1358,10 @@ fn emit_messages_default_inner(
if line == 0 { String::new() } else { " ".repeat(label_width) }, if line == 0 { String::new() } else { " ".repeat(label_width) },
text text
), ),
header_style, match style {
Style::Highlight => *style,
_ => header_style,
},
); );
line += 1; line += 1;
} }