about summary refs log tree commit diff
path: root/compiler/rustc_errors/src/json.rs
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy@goop.org>2023-09-09 10:02:51 -0700
committerJeremy Fitzhardinge <jsgf@fb.com>2023-09-19 14:17:02 -0700
commit62ad57b95a23c40b0153d1b4c1b1801d9c35b72e (patch)
treec86135546687e6ba6f598ab81dcdc9d3fe3c3601 /compiler/rustc_errors/src/json.rs
parent5c8170656bb18995795124d4690f8f3ab503e184 (diff)
downloadrust-62ad57b95a23c40b0153d1b4c1b1801d9c35b72e.tar.gz
rust-62ad57b95a23c40b0153d1b4c1b1801d9c35b72e.zip
Make sure nested Diagnostics in FutureIncompat are also typed for consistency.
Diffstat (limited to 'compiler/rustc_errors/src/json.rs')
-rw-r--r--compiler/rustc_errors/src/json.rs19
1 files changed, 12 insertions, 7 deletions
diff --git a/compiler/rustc_errors/src/json.rs b/compiler/rustc_errors/src/json.rs
index 7b937bd1459..2050600ee08 100644
--- a/compiler/rustc_errors/src/json.rs
+++ b/compiler/rustc_errors/src/json.rs
@@ -161,7 +161,7 @@ impl JsonEmitter {
 enum EmitTyped<'a> {
     Diagnostic(Diagnostic),
     Artifact(ArtifactNotification<'a>),
-    FutureIncompat(FutureIncompatReport),
+    FutureIncompat(FutureIncompatReport<'a>),
     UnusedExtern(UnusedExterns<'a, 'a, 'a>),
 }
 
@@ -193,13 +193,17 @@ impl Emitter for JsonEmitter {
     }
 
     fn emit_future_breakage_report(&mut self, diags: Vec<crate::Diagnostic>) {
-        let data: Vec<FutureBreakageItem> = diags
+        let data: Vec<FutureBreakageItem<'_>> = diags
             .into_iter()
             .map(|mut diag| {
                 if diag.level == crate::Level::Allow {
                     diag.level = crate::Level::Warning(None);
                 }
-                FutureBreakageItem { diagnostic: Diagnostic::from_errors_diagnostic(&diag, self) }
+                FutureBreakageItem {
+                    diagnostic: EmitTyped::Diagnostic(Diagnostic::from_errors_diagnostic(
+                        &diag, self,
+                    )),
+                }
             })
             .collect();
         let report = FutureIncompatReport { future_incompat_report: data };
@@ -311,13 +315,14 @@ struct ArtifactNotification<'a> {
 }
 
 #[derive(Serialize)]
-struct FutureBreakageItem {
-    diagnostic: Diagnostic,
+struct FutureBreakageItem<'a> {
+    // Actually Diagnostic, but we want to make sure it gets serialized with `type`.
+    diagnostic: EmitTyped<'a>,
 }
 
 #[derive(Serialize)]
-struct FutureIncompatReport {
-    future_incompat_report: Vec<FutureBreakageItem>,
+struct FutureIncompatReport<'a> {
+    future_incompat_report: Vec<FutureBreakageItem<'a>>,
 }
 
 // NOTE: Keep this in sync with the equivalent structs in rustdoc's