Rollup merge of #121085 - davidtwco:always-eager-diagnostics, r=nnethercote
errors: only eagerly translate subdiagnostics Subdiagnostics don't need to be lazily translated, they can always be eagerly translated. Eager translation is slightly more complex as we need to have a `DiagCtxt` available to perform the translation, which involves slightly more threading of that context. This slight increase in complexity should enable later simplifications - like passing `DiagCtxt` into `AddToDiagnostic` and moving Fluent messages into the diagnostic structs rather than having them in separate files (working on that was what led to this change). r? ```@nnethercote```
This commit is contained in:
commit
163c3ebf52
@ -1,3 +1,4 @@
|
|||||||
|
use std::borrow::Cow;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::sync::atomic::{AtomicBool, Ordering};
|
use std::sync::atomic::{AtomicBool, Ordering};
|
||||||
|
|
||||||
@ -40,6 +41,16 @@ fn fluent_bundle(&self) -> Option<&Lrc<rustc_errors::FluentBundle>> {
|
|||||||
fn fallback_fluent_bundle(&self) -> &rustc_errors::FluentBundle {
|
fn fallback_fluent_bundle(&self) -> &rustc_errors::FluentBundle {
|
||||||
panic!("silent emitter attempted to translate a diagnostic");
|
panic!("silent emitter attempted to translate a diagnostic");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Override `translate_message` for the silent emitter because eager translation of
|
||||||
|
// subdiagnostics result in a call to this.
|
||||||
|
fn translate_message<'a>(
|
||||||
|
&'a self,
|
||||||
|
message: &'a rustc_errors::DiagnosticMessage,
|
||||||
|
_: &'a rustc_errors::translation::FluentArgs<'_>,
|
||||||
|
) -> Result<Cow<'_, str>, rustc_errors::error::TranslateError<'_>> {
|
||||||
|
rustc_errors::emitter::silent_translate(message)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Emitter for SilentEmitter {
|
impl Emitter for SilentEmitter {
|
||||||
|
Loading…
Reference in New Issue
Block a user