1
Fork 0

Make sure nested Diagnostics in FutureIncompat are also typed for consistency.

This commit is contained in:
Jeremy Fitzhardinge 2023-09-09 10:02:51 -07:00 committed by Jeremy Fitzhardinge
parent 5c8170656b
commit 62ad57b95a

View file

@ -161,7 +161,7 @@ impl JsonEmitter {
enum EmitTyped<'a> { enum EmitTyped<'a> {
Diagnostic(Diagnostic), Diagnostic(Diagnostic),
Artifact(ArtifactNotification<'a>), Artifact(ArtifactNotification<'a>),
FutureIncompat(FutureIncompatReport), FutureIncompat(FutureIncompatReport<'a>),
UnusedExtern(UnusedExterns<'a, 'a, '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>) { fn emit_future_breakage_report(&mut self, diags: Vec<crate::Diagnostic>) {
let data: Vec<FutureBreakageItem> = diags let data: Vec<FutureBreakageItem<'_>> = diags
.into_iter() .into_iter()
.map(|mut diag| { .map(|mut diag| {
if diag.level == crate::Level::Allow { if diag.level == crate::Level::Allow {
diag.level = crate::Level::Warning(None); 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(); .collect();
let report = FutureIncompatReport { future_incompat_report: data }; let report = FutureIncompatReport { future_incompat_report: data };
@ -311,13 +315,14 @@ struct ArtifactNotification<'a> {
} }
#[derive(Serialize)] #[derive(Serialize)]
struct FutureBreakageItem { struct FutureBreakageItem<'a> {
diagnostic: Diagnostic, // Actually Diagnostic, but we want to make sure it gets serialized with `type`.
diagnostic: EmitTyped<'a>,
} }
#[derive(Serialize)] #[derive(Serialize)]
struct FutureIncompatReport { struct FutureIncompatReport<'a> {
future_incompat_report: Vec<FutureBreakageItem>, future_incompat_report: Vec<FutureBreakageItem<'a>>,
} }
// NOTE: Keep this in sync with the equivalent structs in rustdoc's // NOTE: Keep this in sync with the equivalent structs in rustdoc's