From 62ad57b95a23c40b0153d1b4c1b1801d9c35b72e Mon Sep 17 00:00:00 2001 From: Jeremy Fitzhardinge Date: Sat, 9 Sep 2023 10:02:51 -0700 Subject: [PATCH] Make sure nested Diagnostics in FutureIncompat are also typed for consistency. --- compiler/rustc_errors/src/json.rs | 19 ++++++++++++------- 1 file 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) { - let data: Vec = diags + let data: Vec> = 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, +struct FutureIncompatReport<'a> { + future_incompat_report: Vec>, } // NOTE: Keep this in sync with the equivalent structs in rustdoc's