From 2dc22245a0588c35f45094a01b88a32ed50a5461 Mon Sep 17 00:00:00 2001 From: OJ Kwon <1210596+kwonoj@users.noreply.github.com> Date: Mon, 17 Jul 2023 09:49:42 -0700 Subject: [PATCH] feat(turbopack_core): define trait for diagnostics --- crates/turbopack-core/src/diagnostics/mod.rs | 55 ++++++++++++++++++++ crates/turbopack-core/src/lib.rs | 1 + 2 files changed, 56 insertions(+) create mode 100644 crates/turbopack-core/src/diagnostics/mod.rs diff --git a/crates/turbopack-core/src/diagnostics/mod.rs b/crates/turbopack-core/src/diagnostics/mod.rs new file mode 100644 index 00000000000000..e39c0b1cc7a28d --- /dev/null +++ b/crates/turbopack-core/src/diagnostics/mod.rs @@ -0,0 +1,55 @@ +use anyhow::Result; +use async_trait::async_trait; +use turbo_tasks::{emit, CollectiblesSource, Upcast, Vc}; + +/// An arbitrary payload can be used to analyze, diagnose +/// Turbopack's behavior. +#[turbo_tasks::value_trait] +pub trait Diagnostic { + // [TODO]: These are subject to change; not finalized yet. + fn category(&self) -> Vc; + fn key(&self) -> Vc; + fn value(&self) -> Vc; +} + +pub trait DiagnosticExt { + fn emit(self); +} + +impl DiagnosticExt for Vc +where + T: Upcast>, +{ + fn emit(self) { + let diagnostic = Vc::upcast::>(self); + emit(diagnostic); + } +} + +#[async_trait] +pub trait DiagnosticContextExt +where + Self: Sized, +{ + async fn peek_diagnostics_with_path(self) -> Result>; +} + +#[async_trait] +impl DiagnosticContextExt for T +where + T: CollectiblesSource + Copy + Send, +{ + async fn peek_diagnostics_with_path(self) -> Result> { + Ok(CapturedDiagnostics::cell(CapturedDiagnostics { + diagnostics: self.peek_collectibles().strongly_consistent().await?, + })) + } +} + +/// A list of diagnostics captured with +/// [`DiagnosticsVc::peek_diagnostics_with_path`] and +#[derive(Debug)] +#[turbo_tasks::value] +pub struct CapturedDiagnostics { + pub diagnostics: auto_hash_map::AutoSet>>, +} diff --git a/crates/turbopack-core/src/lib.rs b/crates/turbopack-core/src/lib.rs index 6c74a5de2d808a..c4c0f8f9dd4295 100644 --- a/crates/turbopack-core/src/lib.rs +++ b/crates/turbopack-core/src/lib.rs @@ -13,6 +13,7 @@ pub mod chunk; pub mod code_builder; pub mod compile_time_info; pub mod context; +pub mod diagnostics; pub mod environment; pub mod error; pub mod file_source;