about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2024-02-17 18:47:40 +0100
committerGitHub <noreply@github.com>2024-02-17 18:47:40 +0100
commit163c3ebf52f2b24f0e8d491375ee3d43af71e6d2 (patch)
tree5b02b51cf9326c1f31ba803bd4dc800c1fbd9f3e /src
parent6674be96570d63b460c36869d6edd5d590356290 (diff)
parentaba5f546de28a10f6c374c90200f6142d47a8e38 (diff)
downloadrust-163c3ebf52f2b24f0e8d491375ee3d43af71e6d2.tar.gz
rust-163c3ebf52f2b24f0e8d491375ee3d43af71e6d2.zip
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```
Diffstat (limited to 'src')
-rw-r--r--src/parse/session.rs11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/parse/session.rs b/src/parse/session.rs
index f0af401d3da..cff025cf2ab 100644
--- a/src/parse/session.rs
+++ b/src/parse/session.rs
@@ -1,3 +1,4 @@
+use std::borrow::Cow;
 use std::path::Path;
 use std::sync::atomic::{AtomicBool, Ordering};
 
@@ -40,6 +41,16 @@ impl Translate for SilentEmitter {
     fn fallback_fluent_bundle(&self) -> &rustc_errors::FluentBundle {
         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 {