about summary refs log tree commit diff
path: root/compiler/rustc_errors
AgeCommit message (Collapse)AuthorLines
2024-03-11Enable creating backtraces via -Ztreat-err-as-bug when stashing errorsOli Scherer-7/+4
2024-03-10Store backtrace for must_produce_diagMichael Goulet-8/+14
2024-03-11Rename `DecorateLint` as `LintDiagnostic`.Nicholas Nethercote-4/+4
To match `derive(LintDiagnostic)`.
2024-03-11Rename `AddToDiagnostic` as `Subdiagnostic`.Nicholas Nethercote-13/+13
To match `derive(Subdiagnostic)`. Also rename `add_to_diagnostic{,_with}` as `add_to_diag{,_with}`.
2024-03-11Rename `IntoDiagnostic` as `Diagnostic`.Nicholas Nethercote-39/+36
To match `derive(Diagnostic)`. Also rename `into_diagnostic` as `into_diag`.
2024-03-11Rename `IntoDiagnosticArg` as `IntoDiagArg`.Nicholas Nethercote-81/+81
Also rename `into_diagnostic_arg` as `into_diag_arg`, and `NotIntoDiagnosticArg` as `NotInotDiagArg`.
2024-03-06Rollup merge of #121382 - nnethercote:rework-untranslatable_diagnostic-lint, ↵Matthias Krüger-16/+55
r=davidtwco Rework `untranslatable_diagnostic` lint Currently it only checks calls to functions marked with `#[rustc_lint_diagnostics]`. This PR changes it to check calls to any function with an `impl Into<{D,Subd}iagnosticMessage>` parameter. This greatly improves its coverage and doesn't rely on people remembering to add `#[rustc_lint_diagnostics]`. It also lets us add `#[rustc_lint_diagnostics]` to a number of functions that don't have an `impl Into<{D,Subd}iagnosticMessage>`, such as `Diag::span`. r? ``@davidtwco``
2024-03-06Add missing `#[rustc_lint_diagnostics]` attributes.Nicholas Nethercote-0/+31
Prior to the previous commit, `#[rust_lint_diagnostics]` attributes could only be used on methods with an `impl Into<{D,Subd}iagMessage>` parameter. But there are many other nearby diagnostic methods (e.g. `Diag::span`) that don't take such a parameter and should have the attribute. This commit adds the missing attribute to these `Diag` methods. This requires adding some missing `#[allow(rustc::diagnostic_outside_of_impl)]` markers at call sites to these methods.
2024-03-05errors: share `SilentEmitter` between rustc and rustfmtDavid Wood-47/+80
Signed-off-by: David Wood <david@davidtw.co>
2024-03-05Change message type in bug functions.Nicholas Nethercote-16/+24
From `impl Into<DiagnosticMessage>` to `impl Into<Cow<'static, str>>`. Because these functions don't produce user-facing output and we don't want their strings to be translated.
2024-03-05Adjust `Diag::new` signature.Nicholas Nethercote-1/+1
Make it use `impl Into<DiagMessage>` like all the other methods nearby.
2024-03-05Rename `SubdiagnosticMessageOp` as `SubdiagMessageOp`.Nicholas Nethercote-5/+5
2024-03-05Rename `SubdiagnosticMessage` as `SubdiagMessage`.Nicholas Nethercote-39/+38
2024-03-05Rename `DiagnosticMessage` as `DiagMessage`.Nicholas Nethercote-77/+75
2024-03-04Rollup merge of #120976 - matthiaskrgr:constify_TL_statics, r=lcnrMatthias Krüger-2/+2
constify a couple thread_local statics
2024-03-01Rollup merge of #120305 - clubby789:unused-import-line, r=estebankMatthias Krüger-1/+11
Delete line if suggestion would replace it with an empty line Fixes #120296
2024-03-01If suggestion would leave an empty line, delete itclubby789-1/+11
2024-03-01Make the `match` in `emit_diagnostic` complete.Nicholas Nethercote-19/+24
This match is complex enough that it's a good idea to enumerate every variant. This also means `can_be_top_or_sub` can just be `can_be_subdiag`.
2024-03-01Add comments about `TRACK_DIAGNOSTIC` use.Nicholas Nethercote-1/+16
Also add an assertion for the levels allowed with `has_future_breakage`.
2024-03-01Move `Expect`/`ForceWarning` handling into the `match`.Nicholas Nethercote-15/+17
Note that `self.suppressed_expected_diag` is no longer set for `ForceWarning`, which is good. Nor is `TRACK_DIAGNOSTIC` called for `Allow`, which is also good.
2024-03-01Reorder `has_future_breakage` handling.Nicholas Nethercote-8/+8
This will enable additional refactorings.
2024-03-01Move `DelayedBug` handling into the `match`.Nicholas Nethercote-23/+28
It results in a tiny bit of duplication (another `self.treat_next_err_as_bug()` condition) but I think it's worth it to get more code into the main `match`.
2024-03-01Inline and remove `Level::get_diagnostic_id`.Nicholas Nethercote-10/+3
It has a single call site, and this will enable subsequent refactorings.
2024-03-01Give `TRACK_DIAGNOSTIC` a return value.Nicholas Nethercote-11/+13
This means `DiagCtxtInner::emit_diagnostic` can return its result directly, rather than having to modify a local variable.
2024-03-01Handle stashing of delayed bugs.Nicholas Nethercote-11/+25
By just emitting them immediately, because it does happen in practice, when errors are downgraded to delayed bugs. We already had one case in `lint.rs` where we handled this at the callsite. This commit changes things so it's handled within `stash_diagnostic` instead, because #121812 identified a second case, and it's possible there are more. Fixes #121812.
2024-03-01Remove unnecessary `Level::` qualifiers.Nicholas Nethercote-7/+7
We have `use Level::*;` in this file.
2024-02-29Rollup merge of #121783 - nnethercote:emitter-cleanups, r=oli-obkGuillaume Gomez-163/+69
Emitter cleanups Some cleanups I made when reading emitter code. In particular, `HumanEmitter` and `JsonEmitter` have gone from three constructors to one. r? `@oli-obk`
2024-02-29Rollup merge of #121669 - nnethercote:count-stashed-errs-again, r=estebankGuillaume Gomez-70/+157
Count stashed errors again Stashed diagnostics are such a pain. Their "might be emitted, might not" semantics messes with lots of things. #120828 and #121206 made some big changes to how they work, improving some things, but still leaving some problems, as seen by the issues caused by #121206. This PR aims to fix all of them by restricting them in a way that eliminates the "might be emitted, might not" semantics while still allowing 98% of their benefit. Details in the individual commit logs. r? `@oli-obk`
2024-02-29Avoid unnecessary `color` local variable.Nicholas Nethercote-6/+3
2024-02-29Add a useful comment.Nicholas Nethercote-0/+1
It took me a while to work this out.
2024-02-29Make `JsonEmitter` more like `HumanEmitter`.Nicholas Nethercote-38/+21
Use `derive(Setters)` to derive setters, and then change `JsonEmitter::new` to only have the arguments that are always used.
2024-02-29Inline and remove `JsonEmitter::{basic,stderr}`.Nicholas Nethercote-55/+1
They are so similar to `JsonEmitter::new` it's not worth having separate functions, it makes the code harder to read.
2024-02-29Inline and remove `HumanEmitter::stderr`.Nicholas Nethercote-5/+2
Because `HumanEmitter::new` is enough, in conjunction with the (renamed) `stderr_destination` function.
2024-02-29Inline and remove `HumanReadableErrorType::new_emitter`.Nicholas Nethercote-23/+16
And likewise with `ColorConfig::suggests_using_colors`. They both have a single call site. And note that `BufWriter::supports_color()` always returns false, which enables a small bit of constant folding along the way.
2024-02-29Merge HumanEmitter::{new,create}.Nicholas Nethercote-7/+2
They have the same signature, and the former just calls the latter.
2024-02-29Rename `DiagCtxt::with_emitter` as `DiagCtxt::new`.Nicholas Nethercote-2/+2
Because it's now the only constructor.
2024-02-29Inline and remove `DiagCtxt::with_tty_emitter`Nicholas Nethercote-9/+2
It only has two call sites, and one of those doesn't set the source map.
2024-02-29Remove unnecessary `output` local variable.Nicholas Nethercote-5/+4
2024-02-29Use `Destination` more.Nicholas Nethercote-6/+3
2024-02-29Simplify `UnusedExterns` lifetimes.Nicholas Nethercote-3/+3
In practice, 'a and 'b and 'c are always the same. This change makes `UnusedExterns` more like `ArtifactNotification`, which uses a single lifetime 'a in multiple ways.
2024-02-29Minor visibility and formatting improvements.Nicholas Nethercote-15/+20
2024-02-29Reinstate `emit_stashed_diagnostics` in `DiagCtxtInner::drop`.Nicholas Nethercote-4/+6
I removed it in #121206 because I thought thought it wasn't necessary. But then I had to add an `emit_stashed_diagnostics` call elsewhere in rustfmt to avoid the assertion failure (which took two attempts to get right, #121487 and #121615), and now there's an assertion failure in clippy as well (https://github.com/rust-lang/rust-clippy/issues/12364). So this commit just reinstates the call in `DiagCtxtInner::drop`. It also reverts the rustfmt changes from #121487 and #121615, though it keeps the tests added for those PRs.
2024-02-29Overhaul how stashed diagnostics work, again.Nicholas Nethercote-67/+152
Stashed errors used to be counted as errors, but could then be cancelled, leading to `ErrorGuaranteed` soundness holes. #120828 changed that, closing the soundness hole. But it introduced other difficulties because you sometimes have to account for pending stashed errors when making decisions about whether errors have occured/will occur and it's easy to overlook these. This commit aims for a middle ground. - Stashed errors (not warnings) are counted immediately as emitted errors, avoiding the possibility of forgetting to consider them. - The ability to cancel (or downgrade) stashed errors is eliminated, by disallowing the use of `steal_diagnostic` with errors, and introducing the more restrictive methods `try_steal_{modify,replace}_and_emit_err` that can be used instead. Other things: - `DiagnosticBuilder::stash` and `DiagCtxt::stash_diagnostic` now both return `Option<ErrorGuaranteed>`, which enables the removal of two `delayed_bug` calls and one `Ty::new_error_with_message` call. This is possible because we store error guarantees in `DiagCtxt::stashed_diagnostics`. - Storing the guarantees also saves us having to maintain a counter. - Calls to the `stashed_err_count` method are no longer necessary alongside calls to `has_errors`, which is a nice simplification, and eliminates two more `span_delayed_bug` calls and one FIXME comment. - Tests are added for three of the four fixed PRs mentioned below. - `issue-121108.rs`'s output improved slightly, omitting a non-useful error message. Fixes #121451. Fixes #121477. Fixes #121504. Fixes #121508.
2024-02-29Refactor `DiagCtxtInner::flush_delayed`.Nicholas Nethercote-21/+21
This commit: - Moves the ICE file create/open outside the loop. (Redoing it on every loop iteration works, but is really weird.) - Moves the explanatory note emission above the loop, which removes the need for the `enumerate` call. - Introduces a `decorate` local.
2024-02-29Add a comment about how `IntoDiagnostic` should be impl'd.Nicholas Nethercote-0/+19
2024-02-28Rename `DiagnosticStyledString` as `DiagStyledString`.Nicholas Nethercote-14/+14
2024-02-28Rename `DiagnosticSymbolList` as `DiagSymbolList`.Nicholas Nethercote-5/+5
2024-02-28Rename `DiagnosticLocation` as `DiagLocation`.Nicholas Nethercote-12/+12
2024-02-28Rename `DiagnosticArgFromDisplay` as `DiagArgFromDisplay`.Nicholas Nethercote-8/+8
2024-02-28Rename `DiagnosticArg{,Map,Name,Value}` as `DiagArg{,Map,Name,Value}`.Nicholas Nethercote-90/+88