mirror of
https://github.com/rust-lang/cargo.git
synced 2025-09-28 11:20:36 +00:00
refactor(shell): Prepare for Report
s being generated in more places (#15920)
### What does this PR try to resolve? This is preparation for changes like #15917 where we start to use `annotate_snippets::Report` for handling more of the rendering of our user messages to be more consistent with rustc and more feature rich in what we are able to render. ### How to test and review this PR?
This commit is contained in:
commit
761c4658d0
@ -222,10 +222,7 @@ impl Shell {
|
||||
|
||||
/// Prints an amber 'warning' message.
|
||||
pub fn warn<T: fmt::Display>(&mut self, message: T) -> CargoResult<()> {
|
||||
match self.verbosity {
|
||||
Verbosity::Quiet => Ok(()),
|
||||
_ => self.print(&"warning", Some(&message), &WARN, false),
|
||||
}
|
||||
self.print(&"warning", Some(&message), &WARN, false)
|
||||
}
|
||||
|
||||
/// Prints a cyan 'note' message.
|
||||
@ -407,16 +404,22 @@ impl Shell {
|
||||
}
|
||||
|
||||
/// Prints the passed in [`Report`] to stderr
|
||||
pub fn print_report(&mut self, report: Report<'_>) -> std::io::Result<()> {
|
||||
pub fn print_report(&mut self, report: Report<'_>, force: bool) -> CargoResult<()> {
|
||||
if !force && matches!(self.verbosity, Verbosity::Quiet) {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
if self.needs_clear {
|
||||
self.err_erase_line();
|
||||
}
|
||||
let term_width = self
|
||||
.err_width()
|
||||
.diagnostic_terminal_width()
|
||||
.unwrap_or(annotate_snippets::renderer::DEFAULT_TERM_WIDTH);
|
||||
writeln!(
|
||||
self.err(),
|
||||
"{}",
|
||||
Renderer::styled().term_width(term_width).render(report)
|
||||
)
|
||||
let rendered = Renderer::styled().term_width(term_width).render(report);
|
||||
self.err().write_all(rendered.as_bytes())?;
|
||||
self.err().write_all("\n".as_bytes())?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -171,7 +171,7 @@ fn verify_feature_enabled(
|
||||
}
|
||||
|
||||
*error_count += 1;
|
||||
gctx.shell().print_report(&report)?;
|
||||
gctx.shell().print_report(&report, true)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@ -339,6 +339,15 @@ impl LintLevel {
|
||||
LintLevel::Forbid => Level::ERROR,
|
||||
}
|
||||
}
|
||||
|
||||
fn force(self) -> bool {
|
||||
match self {
|
||||
Self::Allow => false,
|
||||
Self::Warn => true,
|
||||
Self::Deny => true,
|
||||
Self::Forbid => true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TomlLintLevel> for LintLevel {
|
||||
@ -459,7 +468,7 @@ pub fn check_im_a_teapot(
|
||||
)
|
||||
.element(Level::NOTE.message(&emitted_reason))];
|
||||
|
||||
gctx.shell().print_report(report)?;
|
||||
gctx.shell().print_report(report, lint_level.force())?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@ -568,7 +577,7 @@ fn output_unknown_lints(
|
||||
);
|
||||
}
|
||||
|
||||
gctx.shell().print_report(&report)?;
|
||||
gctx.shell().print_report(&report, lint_level.force())?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
@ -1930,7 +1930,7 @@ fn missing_dep_diagnostic(
|
||||
group.element(snippet)
|
||||
};
|
||||
|
||||
if let Err(err) = gctx.shell().print_report(&[group]) {
|
||||
if let Err(err) = gctx.shell().print_report(&[group], true) {
|
||||
return Err(err.into());
|
||||
}
|
||||
Err(AlreadyPrintedError::new(anyhow!("").into()).into())
|
||||
@ -2798,7 +2798,7 @@ fn emit_diagnostic(
|
||||
.annotation(AnnotationKind::Primary.span(span)),
|
||||
);
|
||||
|
||||
if let Err(err) = gctx.shell().print_report(&[group]) {
|
||||
if let Err(err) = gctx.shell().print_report(&[group], true) {
|
||||
return err.into();
|
||||
}
|
||||
return AlreadyPrintedError::new(e.into()).into();
|
||||
|
Loading…
x
Reference in New Issue
Block a user