Tweak flush_delayed
.
- Take a `Vec` instead of an iterator, because that's all that is needed. - Do an early return for the "no bugs" case. - Use `enumerate` and an `i == 0` test to identify the first bug. Those changes mean the `no_bug` variable can be removed, which I found hard to read.
This commit is contained in:
parent
757d6f6ef8
commit
a108a3bd8e
1 changed files with 11 additions and 10 deletions
|
@ -1543,13 +1543,16 @@ impl DiagCtxtInner {
|
||||||
|
|
||||||
fn flush_delayed(
|
fn flush_delayed(
|
||||||
&mut self,
|
&mut self,
|
||||||
bugs: impl IntoIterator<Item = DelayedDiagnostic>,
|
bugs: Vec<DelayedDiagnostic>,
|
||||||
explanation: impl Into<DiagnosticMessage> + Copy,
|
explanation: impl Into<DiagnosticMessage> + Copy,
|
||||||
) {
|
) {
|
||||||
let mut no_bugs = true;
|
if bugs.is_empty() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// If backtraces are enabled, also print the query stack
|
// If backtraces are enabled, also print the query stack
|
||||||
let backtrace = std::env::var_os("RUST_BACKTRACE").map_or(true, |x| &x != "0");
|
let backtrace = std::env::var_os("RUST_BACKTRACE").map_or(true, |x| &x != "0");
|
||||||
for bug in bugs {
|
for (i, bug) in bugs.into_iter().enumerate() {
|
||||||
if let Some(file) = self.ice_file.as_ref()
|
if let Some(file) = self.ice_file.as_ref()
|
||||||
&& let Ok(mut out) = std::fs::File::options().create(true).append(true).open(file)
|
&& let Ok(mut out) = std::fs::File::options().create(true).append(true).open(file)
|
||||||
{
|
{
|
||||||
|
@ -1564,16 +1567,16 @@ impl DiagCtxtInner {
|
||||||
&bug.note
|
&bug.note
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
let mut bug =
|
|
||||||
if backtrace || self.ice_file.is_none() { bug.decorate() } else { bug.inner };
|
|
||||||
|
|
||||||
if no_bugs {
|
if i == 0 {
|
||||||
// Put the overall explanation before the `DelayedBug`s, to
|
// Put the overall explanation before the `DelayedBug`s, to
|
||||||
// frame them better (e.g. separate warnings from them).
|
// frame them better (e.g. separate warnings from them).
|
||||||
self.emit_diagnostic(Diagnostic::new(Bug, explanation));
|
self.emit_diagnostic(Diagnostic::new(Bug, explanation));
|
||||||
no_bugs = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut bug =
|
||||||
|
if backtrace || self.ice_file.is_none() { bug.decorate() } else { bug.inner };
|
||||||
|
|
||||||
// "Undelay" the `DelayedBug`s (into plain `Bug`s).
|
// "Undelay" the `DelayedBug`s (into plain `Bug`s).
|
||||||
if bug.level != Level::DelayedBug {
|
if bug.level != Level::DelayedBug {
|
||||||
// NOTE(eddyb) not panicking here because we're already producing
|
// NOTE(eddyb) not panicking here because we're already producing
|
||||||
|
@ -1589,9 +1592,7 @@ impl DiagCtxtInner {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Panic with `DelayedBugPanic` to avoid "unexpected panic" messages.
|
// Panic with `DelayedBugPanic` to avoid "unexpected panic" messages.
|
||||||
if !no_bugs {
|
panic::panic_any(DelayedBugPanic);
|
||||||
panic::panic_any(DelayedBugPanic);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bump_lint_err_count(&mut self) {
|
fn bump_lint_err_count(&mut self) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue