From 38d7dd93c6c3739546a761caeb9979d39d32dab1 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Wed, 29 Oct 2025 15:30:58 +0100 Subject: [PATCH 1/5] fix Equal on ImportAttributes --- turbopack/crates/turbopack-css/src/references/import.rs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/turbopack/crates/turbopack-css/src/references/import.rs b/turbopack/crates/turbopack-css/src/references/import.rs index f2433be9fbd45..a33430cb6f81f 100644 --- a/turbopack/crates/turbopack-css/src/references/import.rs +++ b/turbopack/crates/turbopack-css/src/references/import.rs @@ -21,6 +21,7 @@ use crate::{ }; #[turbo_tasks::value(eq = "manual", serialization = "none", shared)] +#[derive(PartialEq)] pub enum ImportAttributes { LightningCss { #[turbo_tasks(trace_ignore)] @@ -32,11 +33,7 @@ pub enum ImportAttributes { }, } -impl PartialEq for ImportAttributes { - fn eq(&self, _: &Self) -> bool { - false - } -} +impl Eq for ImportAttributes {} impl ImportAttributes { pub fn new_from_lightningcss(prelude: &ImportRule<'static>) -> Self { From 2264fdbc1d935ccedc709a380d73a16f2071d725 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Wed, 29 Oct 2025 15:31:17 +0100 Subject: [PATCH 2/5] fix Equal on ParseResult --- turbopack/crates/turbopack-ecmascript/src/parse.rs | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/turbopack/crates/turbopack-ecmascript/src/parse.rs b/turbopack/crates/turbopack-ecmascript/src/parse.rs index 21f193bbd82c0..02071065021a6 100644 --- a/turbopack/crates/turbopack-ecmascript/src/parse.rs +++ b/turbopack/crates/turbopack-ecmascript/src/parse.rs @@ -51,7 +51,7 @@ use crate::{ transform::{EcmascriptInputTransforms, TransformContext}, }; -#[turbo_tasks::value(shared, serialization = "none", eq = "manual")] +#[turbo_tasks::value(shared, serialization = "none", eq = "manual", cell = "new")] #[allow(clippy::large_enum_variant)] pub enum ParseResult { // Note: Ok must not contain any Vc as it's snapshot by failsafe_parse @@ -73,15 +73,6 @@ pub enum ParseResult { NotFound, } -impl PartialEq for ParseResult { - fn eq(&self, other: &Self) -> bool { - match (self, other) { - (Self::Ok { .. }, Self::Ok { .. }) => false, - _ => core::mem::discriminant(self) == core::mem::discriminant(other), - } - } -} - /// `original_source_maps_complete` indicates whether the `original_source_maps` cover the whole /// map, i.e. whether every module that ended up in `mappings` had an original sourcemap. #[instrument(level = "info", name = "generate source map", skip_all)] From 0662dcdd26c3ee6b12343a680c292f1ac35bfa3f Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Wed, 29 Oct 2025 15:31:44 +0100 Subject: [PATCH 3/5] fix Equal on ParseResult --- turbopack/crates/turbopack-ecmascript/src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/turbopack/crates/turbopack-ecmascript/src/lib.rs b/turbopack/crates/turbopack-ecmascript/src/lib.rs index 49f70f47d8f58..431579812fc23 100644 --- a/turbopack/crates/turbopack-ecmascript/src/lib.rs +++ b/turbopack/crates/turbopack-ecmascript/src/lib.rs @@ -500,7 +500,8 @@ impl EcmascriptParsable for EcmascriptModuleAsset { if this.options.await?.keep_last_successful_parse { let real_result_value = real_result.await?; let result_value = if matches!(*real_result_value, ParseResult::Ok { .. }) { - this.last_successful_parse.set(real_result_value.clone()); + this.last_successful_parse + .set_unconditionally(real_result_value.clone()); real_result_value } else { let state_ref = this.last_successful_parse.get(); From 26291e3d88891ffac6f8c762c16b96a8fed93fe4 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Wed, 29 Oct 2025 17:59:49 +0100 Subject: [PATCH 4/5] fix Equal for FinalCssResult --- turbopack/crates/turbopack-css/src/asset.rs | 1 - turbopack/crates/turbopack-css/src/process.rs | 14 ++------------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/turbopack/crates/turbopack-css/src/asset.rs b/turbopack/crates/turbopack-css/src/asset.rs index c90f061c8de46..a3df679862f2a 100644 --- a/turbopack/crates/turbopack-css/src/asset.rs +++ b/turbopack/crates/turbopack-css/src/asset.rs @@ -330,7 +330,6 @@ impl CssChunkItem for CssModuleChunkItem { if let FinalCssResult::Ok { output_code, source_map, - .. } = &*result { Ok(CssChunkItemContent { diff --git a/turbopack/crates/turbopack-css/src/process.rs b/turbopack/crates/turbopack-css/src/process.rs index fa9e905be0611..6c83674a4c9f3 100644 --- a/turbopack/crates/turbopack-css/src/process.rs +++ b/turbopack/crates/turbopack-css/src/process.rs @@ -2,7 +2,7 @@ use std::sync::{Arc, RwLock}; use anyhow::{Result, bail}; use lightningcss::{ - css_modules::{CssModuleExport, CssModuleExports, Pattern, Segment}, + css_modules::{CssModuleExport, Pattern, Segment}, stylesheet::{MinifyOptions, ParserOptions, PrinterOptions, StyleSheet, ToCssResult}, targets::{BrowserslistConfig, Features, Targets}, traits::ToCss, @@ -193,27 +193,18 @@ pub enum CssWithPlaceholderResult { NotFound, } -#[turbo_tasks::value(shared, serialization = "none", eq = "manual")] +#[turbo_tasks::value(shared, serialization = "none")] pub enum FinalCssResult { Ok { #[turbo_tasks(trace_ignore)] output_code: String, - #[turbo_tasks(trace_ignore)] - exports: Option, - source_map: ResolvedVc, }, Unparsable, NotFound, } -impl PartialEq for FinalCssResult { - fn eq(&self, _: &Self) -> bool { - false - } -} - #[turbo_tasks::function] pub async fn process_css_with_placeholder( parse_result: ResolvedVc, @@ -327,7 +318,6 @@ pub async fn finalize_css( Ok(FinalCssResult::Ok { output_code: result.code, - exports: result.exports, source_map: ResolvedVc::cell(srcmap), } .cell()) From b2d6a2499ebac8f20e0a6449b0820eb33c3f84a4 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Wed, 29 Oct 2025 18:01:12 +0100 Subject: [PATCH 5/5] make any_content_changed_of_module deterministic --- turbopack/crates/turbopack-core/src/changed.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/turbopack/crates/turbopack-core/src/changed.rs b/turbopack/crates/turbopack-core/src/changed.rs index b26b7d0c651af..7077ef7de777a 100644 --- a/turbopack/crates/turbopack-core/src/changed.rs +++ b/turbopack/crates/turbopack-core/src/changed.rs @@ -1,7 +1,7 @@ use anyhow::Result; use turbo_tasks::{ Completion, Completions, ResolvedVc, TryJoinIterExt, Vc, - graph::{GraphTraversal, NonDeterministic}, + graph::{AdjacencyMap, GraphTraversal, NonDeterministic}, }; use crate::{ @@ -32,13 +32,13 @@ pub async fn get_referenced_modules( pub async fn any_content_changed_of_module( root: ResolvedVc>, ) -> Result> { - let completions = NonDeterministic::new() + let completions = AdjacencyMap::new() .skip_duplicates() .visit([root], get_referenced_modules) .await .completed()? .into_inner() - .into_iter() + .into_postorder_topological() .map(|m| content_changed(*ResolvedVc::upcast(m))) .map(|v| v.to_resolved()) .try_join()