Tweak error counting.
We have several methods indicating the presence of errors, lint errors, and delayed bugs. I find it frustrating that it's very unclear which one you should use in any particular spot. This commit attempts to instill a basic principle of "use the least general one possible", because that reflects reality in practice -- `has_errors` is the least general one and has by far the most uses (esp. via `abort_if_errors`). Specifics: - Add some comments giving some usage guidelines. - Prefer `has_errors` to comparing `err_count` to zero. - Remove `has_errors_or_span_delayed_bugs` because it's a weird one: in the cases where we need to count delayed bugs, we should really be counting lint errors as well. - Rename `is_compilation_going_to_fail` as `has_errors_or_lint_errors_or_span_delayed_bugs`, for consistency with `has_errors` and `has_errors_or_lint_errors`. - Change a few other `has_errors_or_lint_errors` calls to `has_errors`, as per the "least general" principle. This didn't turn out to be as neat as I hoped when I started, but I think it's still an improvement.
This commit is contained in:
parent
807c8687de
commit
1f9fa2305a
14 changed files with 35 additions and 32 deletions
|
@ -927,11 +927,13 @@ impl DiagCtxt {
|
|||
self.struct_bug(msg).emit()
|
||||
}
|
||||
|
||||
/// This excludes lint errors and delayed bugs.
|
||||
#[inline]
|
||||
pub fn err_count(&self) -> usize {
|
||||
self.inner.borrow().err_count
|
||||
}
|
||||
|
||||
/// This excludes lint errors and delayed bugs.
|
||||
pub fn has_errors(&self) -> Option<ErrorGuaranteed> {
|
||||
self.inner.borrow().has_errors().then(|| {
|
||||
#[allow(deprecated)]
|
||||
|
@ -939,30 +941,24 @@ impl DiagCtxt {
|
|||
})
|
||||
}
|
||||
|
||||
/// This excludes delayed bugs. Unless absolutely necessary, prefer
|
||||
/// `has_errors` to this method.
|
||||
pub fn has_errors_or_lint_errors(&self) -> Option<ErrorGuaranteed> {
|
||||
let inner = self.inner.borrow();
|
||||
let has_errors_or_lint_errors = inner.has_errors() || inner.lint_err_count > 0;
|
||||
has_errors_or_lint_errors.then(|| {
|
||||
let result = inner.has_errors() || inner.lint_err_count > 0;
|
||||
result.then(|| {
|
||||
#[allow(deprecated)]
|
||||
ErrorGuaranteed::unchecked_claim_error_was_emitted()
|
||||
})
|
||||
}
|
||||
|
||||
pub fn has_errors_or_span_delayed_bugs(&self) -> Option<ErrorGuaranteed> {
|
||||
/// Unless absolutely necessary, prefer `has_errors` or
|
||||
/// `has_errors_or_lint_errors` to this method.
|
||||
pub fn has_errors_or_lint_errors_or_delayed_bugs(&self) -> Option<ErrorGuaranteed> {
|
||||
let inner = self.inner.borrow();
|
||||
let has_errors_or_span_delayed_bugs =
|
||||
inner.has_errors() || !inner.span_delayed_bugs.is_empty();
|
||||
has_errors_or_span_delayed_bugs.then(|| {
|
||||
#[allow(deprecated)]
|
||||
ErrorGuaranteed::unchecked_claim_error_was_emitted()
|
||||
})
|
||||
}
|
||||
|
||||
pub fn is_compilation_going_to_fail(&self) -> Option<ErrorGuaranteed> {
|
||||
let inner = self.inner.borrow();
|
||||
let will_fail =
|
||||
let result =
|
||||
inner.has_errors() || inner.lint_err_count > 0 || !inner.span_delayed_bugs.is_empty();
|
||||
will_fail.then(|| {
|
||||
result.then(|| {
|
||||
#[allow(deprecated)]
|
||||
ErrorGuaranteed::unchecked_claim_error_was_emitted()
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue