mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 08:13:41 +00:00
Use StringPart
more.
This commit is contained in:
parent
0621cd46f2
commit
be64802854
@ -165,10 +165,10 @@ impl DiagnosticStyledString {
|
||||
DiagnosticStyledString(vec![])
|
||||
}
|
||||
pub fn push_normal<S: Into<String>>(&mut self, t: S) {
|
||||
self.0.push(StringPart::normal(t.into()));
|
||||
self.0.push(StringPart::normal(t));
|
||||
}
|
||||
pub fn push_highlighted<S: Into<String>>(&mut self, t: S) {
|
||||
self.0.push(StringPart::highlighted(t.into()));
|
||||
self.0.push(StringPart::highlighted(t));
|
||||
}
|
||||
pub fn push<S: Into<String>>(&mut self, t: S, highlight: bool) {
|
||||
if highlight {
|
||||
@ -178,11 +178,11 @@ impl DiagnosticStyledString {
|
||||
}
|
||||
}
|
||||
pub fn normal<S: Into<String>>(t: S) -> DiagnosticStyledString {
|
||||
DiagnosticStyledString(vec![StringPart::normal(t.into())])
|
||||
DiagnosticStyledString(vec![StringPart::normal(t)])
|
||||
}
|
||||
|
||||
pub fn highlighted<S: Into<String>>(t: S) -> DiagnosticStyledString {
|
||||
DiagnosticStyledString(vec![StringPart::highlighted(t.into())])
|
||||
DiagnosticStyledString(vec![StringPart::highlighted(t)])
|
||||
}
|
||||
|
||||
pub fn content(&self) -> String {
|
||||
@ -197,12 +197,12 @@ pub struct StringPart {
|
||||
}
|
||||
|
||||
impl StringPart {
|
||||
fn normal(content: String) -> StringPart {
|
||||
StringPart { content, style: Style::NoStyle }
|
||||
pub fn normal<S: Into<String>>(content: S) -> StringPart {
|
||||
StringPart { content: content.into(), style: Style::NoStyle }
|
||||
}
|
||||
|
||||
fn highlighted(content: String) -> StringPart {
|
||||
StringPart { content, style: Style::Highlight }
|
||||
pub fn highlighted<S: Into<String>>(content: S) -> StringPart {
|
||||
StringPart { content: content.into(), style: Style::Highlight }
|
||||
}
|
||||
}
|
||||
|
||||
@ -391,13 +391,16 @@ impl Diagnostic {
|
||||
} else {
|
||||
(0, found_label.len() - expected_label.len())
|
||||
};
|
||||
let mut msg: Vec<_> =
|
||||
vec![(format!("{}{} `", " ".repeat(expected_padding), expected_label), Style::NoStyle)];
|
||||
msg.extend(expected.0.into_iter().map(|p| (p.content, p.style)));
|
||||
msg.push((format!("`{expected_extra}\n"), Style::NoStyle));
|
||||
msg.push((format!("{}{} `", " ".repeat(found_padding), found_label), Style::NoStyle));
|
||||
msg.extend(found.0.into_iter().map(|p| (p.content, p.style)));
|
||||
msg.push((format!("`{found_extra}"), Style::NoStyle));
|
||||
let mut msg = vec![StringPart::normal(format!(
|
||||
"{}{} `",
|
||||
" ".repeat(expected_padding),
|
||||
expected_label
|
||||
))];
|
||||
msg.extend(expected.0.into_iter());
|
||||
msg.push(StringPart::normal(format!("`{expected_extra}\n")));
|
||||
msg.push(StringPart::normal(format!("{}{} `", " ".repeat(found_padding), found_label)));
|
||||
msg.extend(found.0.into_iter());
|
||||
msg.push(StringPart::normal(format!("`{found_extra}")));
|
||||
|
||||
// For now, just attach these as notes.
|
||||
self.highlighted_note(msg);
|
||||
@ -406,9 +409,9 @@ impl Diagnostic {
|
||||
|
||||
pub fn note_trait_signature(&mut self, name: Symbol, signature: String) -> &mut Self {
|
||||
self.highlighted_note(vec![
|
||||
(format!("`{name}` from trait: `"), Style::NoStyle),
|
||||
(signature, Style::Highlight),
|
||||
("`".to_string(), Style::NoStyle),
|
||||
StringPart::normal(format!("`{name}` from trait: `")),
|
||||
StringPart::highlighted(signature),
|
||||
StringPart::normal("`"),
|
||||
]);
|
||||
self
|
||||
}
|
||||
@ -420,10 +423,7 @@ impl Diagnostic {
|
||||
self
|
||||
}
|
||||
|
||||
fn highlighted_note<M: Into<SubdiagnosticMessage>>(
|
||||
&mut self,
|
||||
msg: Vec<(M, Style)>,
|
||||
) -> &mut Self {
|
||||
fn highlighted_note(&mut self, msg: Vec<StringPart>) -> &mut Self {
|
||||
self.sub_with_highlights(Level::Note, msg, MultiSpan::new());
|
||||
self
|
||||
}
|
||||
@ -492,7 +492,7 @@ impl Diagnostic {
|
||||
}
|
||||
|
||||
/// Add a help message attached to this diagnostic with a customizable highlighted message.
|
||||
pub fn highlighted_help(&mut self, msg: Vec<(String, Style)>) -> &mut Self {
|
||||
pub fn highlighted_help(&mut self, msg: Vec<StringPart>) -> &mut Self {
|
||||
self.sub_with_highlights(Level::Help, msg, MultiSpan::new());
|
||||
self
|
||||
}
|
||||
@ -941,15 +941,10 @@ impl Diagnostic {
|
||||
|
||||
/// Convenience function for internal use, clients should use one of the
|
||||
/// public methods above.
|
||||
fn sub_with_highlights<M: Into<SubdiagnosticMessage>>(
|
||||
&mut self,
|
||||
level: Level,
|
||||
messages: Vec<(M, Style)>,
|
||||
span: MultiSpan,
|
||||
) {
|
||||
fn sub_with_highlights(&mut self, level: Level, messages: Vec<StringPart>, span: MultiSpan) {
|
||||
let messages = messages
|
||||
.into_iter()
|
||||
.map(|m| (self.subdiagnostic_message_to_diagnostic_message(m.0), m.1))
|
||||
.map(|m| (self.subdiagnostic_message_to_diagnostic_message(m.content), m.style))
|
||||
.collect();
|
||||
let sub = SubDiagnostic { level, messages, span };
|
||||
self.children.push(sub);
|
||||
|
@ -34,7 +34,7 @@ extern crate self as rustc_errors;
|
||||
pub use codes::*;
|
||||
pub use diagnostic::{
|
||||
AddToDiagnostic, DecorateLint, Diagnostic, DiagnosticArg, DiagnosticArgName,
|
||||
DiagnosticArgValue, DiagnosticStyledString, IntoDiagnosticArg, SubDiagnostic,
|
||||
DiagnosticArgValue, DiagnosticStyledString, IntoDiagnosticArg, StringPart, SubDiagnostic,
|
||||
};
|
||||
pub use diagnostic_builder::{
|
||||
BugAbort, DiagnosticBuilder, EmissionGuarantee, FatalAbort, IntoDiagnostic,
|
||||
|
@ -20,7 +20,7 @@ use crate::traits::{
|
||||
use rustc_data_structures::fx::{FxHashMap, FxIndexMap};
|
||||
use rustc_errors::{
|
||||
codes::*, pluralize, struct_span_code_err, Applicability, Diagnostic, DiagnosticBuilder,
|
||||
ErrorGuaranteed, MultiSpan, StashKey, Style,
|
||||
ErrorGuaranteed, MultiSpan, StashKey, StringPart,
|
||||
};
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::{DefKind, Namespace, Res};
|
||||
@ -2059,11 +2059,11 @@ impl<'tcx> InferCtxtPrivExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
||||
ct_op: |ct| ct.normalize(self.tcx, ty::ParamEnv::empty()),
|
||||
});
|
||||
err.highlighted_help(vec![
|
||||
(format!("the trait `{}` ", cand.print_trait_sugared()), Style::NoStyle),
|
||||
("is".to_string(), Style::Highlight),
|
||||
(" implemented for `".to_string(), Style::NoStyle),
|
||||
(cand.self_ty().to_string(), Style::Highlight),
|
||||
("`".to_string(), Style::NoStyle),
|
||||
StringPart::normal(format!("the trait `{}` ", cand.print_trait_sugared())),
|
||||
StringPart::highlighted("is"),
|
||||
StringPart::normal(" implemented for `"),
|
||||
StringPart::highlighted(cand.self_ty().to_string()),
|
||||
StringPart::normal("`"),
|
||||
]);
|
||||
|
||||
if let [TypeError::Sorts(exp_found)] = &terrs[..] {
|
||||
@ -2095,12 +2095,12 @@ impl<'tcx> InferCtxtPrivExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
||||
_ => (" implemented for `", ""),
|
||||
};
|
||||
err.highlighted_help(vec![
|
||||
(format!("the trait `{}` ", cand.print_trait_sugared()), Style::NoStyle),
|
||||
("is".to_string(), Style::Highlight),
|
||||
(desc.to_string(), Style::NoStyle),
|
||||
(cand.self_ty().to_string(), Style::Highlight),
|
||||
("`".to_string(), Style::NoStyle),
|
||||
(mention_castable.to_string(), Style::NoStyle),
|
||||
StringPart::normal(format!("the trait `{}` ", cand.print_trait_sugared())),
|
||||
StringPart::highlighted("is"),
|
||||
StringPart::normal(desc),
|
||||
StringPart::highlighted(cand.self_ty().to_string()),
|
||||
StringPart::normal("`"),
|
||||
StringPart::normal(mention_castable),
|
||||
]);
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user