Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 33 additions & 30 deletions crates/rspack_core/src/compilation/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ use std::{
collections::{VecDeque, hash_map},
fmt::{self, Debug},
hash::{BuildHasherDefault, Hash},
mem,
sync::{
Arc,
atomic::{AtomicBool, AtomicU32, Ordering},
Expand Down Expand Up @@ -251,35 +250,35 @@ pub struct Compilation {
// artifact for collect_dependencies_diagnostics
pub dependencies_diagnostics_artifact: DerefOption<DependenciesDiagnosticsArtifact>,
// artifact for side_effects_flag_plugin
pub side_effects_optimize_artifact: SideEffectsOptimizeArtifact,
pub side_effects_optimize_artifact: DerefOption<SideEffectsOptimizeArtifact>,
// artifact for module_ids
pub module_ids_artifact: ModuleIdsArtifact,
pub module_ids_artifact: DerefOption<ModuleIdsArtifact>,
// artifact for chunk_ids
pub chunk_ids_artifact: ChunkIdsArtifact,
pub chunk_ids_artifact: DerefOption<ChunkIdsArtifact>,
// artifact for code_generation
pub code_generation_results: BindingCell<CodeGenerationResults>,
// artifact for create_module_hashes
pub cgm_hash_artifact: CgmHashArtifact,
pub cgm_hash_artifact: DerefOption<CgmHashArtifact>,
// artifact for process_modules_runtime_requirements
pub cgm_runtime_requirements_artifact: CgmRuntimeRequirementsArtifact,
pub cgm_runtime_requirements_artifact: DerefOption<CgmRuntimeRequirementsArtifact>,
// artifact for process_chunks_runtime_requirements
pub cgc_runtime_requirements_artifact: CgcRuntimeRequirementsArtifact,
pub cgc_runtime_requirements_artifact: DerefOption<CgcRuntimeRequirementsArtifact>,
// artifact for create_hash
pub chunk_hashes_artifact: ChunkHashesArtifact,
pub chunk_hashes_artifact: DerefOption<ChunkHashesArtifact>,
// artifact for create_chunk_assets
pub chunk_render_artifact: ChunkRenderArtifact,
pub chunk_render_artifact: DerefOption<ChunkRenderArtifact>,
// artifact for caching get_mode
pub module_graph_cache_artifact: ModuleGraphCacheArtifact,
pub module_graph_cache_artifact: DerefOption<ModuleGraphCacheArtifact>,
// artifact for caching module static info
pub module_static_cache_artifact: ModuleStaticCacheArtifact,
pub module_static_cache_artifact: DerefOption<ModuleStaticCacheArtifact>,
// artifact for chunk render cache
pub chunk_render_cache_artifact: ChunkRenderCacheArtifact,
pub imported_by_defer_modules_artifact: ImportedByDeferModulesArtifact,
pub chunk_render_cache_artifact: DerefOption<ChunkRenderCacheArtifact>,
pub imported_by_defer_modules_artifact: DerefOption<ImportedByDeferModulesArtifact>,

pub code_generated_modules: IdentifierSet,
pub build_time_executed_modules: IdentifierSet,
pub old_cache: Arc<OldCache>,
pub build_chunk_graph_artifact: BuildChunkGraphArtifact,
pub build_chunk_graph_artifact: DerefOption<BuildChunkGraphArtifact>,
pub incremental: Incremental,

pub hash: Option<RspackHashDigest>,
Expand All @@ -299,7 +298,7 @@ pub struct Compilation {

pub modified_files: ArcPathSet,
pub removed_files: ArcPathSet,
pub build_module_graph_artifact: BuildModuleGraphArtifact,
pub build_module_graph_artifact: DerefOption<BuildModuleGraphArtifact>,
pub input_filesystem: Arc<dyn ReadableFileSystem>,

pub intermediate_filesystem: Arc<dyn IntermediateFileSystem>,
Expand Down Expand Up @@ -391,7 +390,7 @@ impl Compilation {
dependencies_diagnostics_artifact: DerefOption::new(
DependenciesDiagnosticsArtifact::default(),
),
side_effects_optimize_artifact: Default::default(),
side_effects_optimize_artifact: DerefOption::new(Default::default()),
module_ids_artifact: Default::default(),
chunk_ids_artifact: Default::default(),
code_generation_results: Default::default(),
Expand All @@ -408,11 +407,12 @@ impl Compilation {
CacheOptions::Memory { max_generations } => max_generations.unwrap_or(1),
CacheOptions::Disabled => 0, // FIXME: this should be removed in future
},
)),
))
.into(),
build_time_executed_modules: Default::default(),
old_cache,
incremental,
build_chunk_graph_artifact: Default::default(),
build_chunk_graph_artifact: DerefOption::new(Default::default()),

hash: None,

Expand All @@ -428,7 +428,7 @@ impl Compilation {
module_executor,
in_finish_make: AtomicBool::new(false),

build_module_graph_artifact: BuildModuleGraphArtifact::default(),
build_module_graph_artifact: BuildModuleGraphArtifact::default().into(),
modified_files,
removed_files,
input_filesystem,
Expand All @@ -455,7 +455,7 @@ impl Compilation {
);
}
pub fn swap_build_module_graph_artifact(&mut self, make_artifact: &mut BuildModuleGraphArtifact) {
mem::swap(&mut self.build_module_graph_artifact, make_artifact);
self.build_module_graph_artifact.swap(make_artifact);
}

pub fn get_module_graph(&self) -> ModuleGraphRef<'_> {
Expand Down Expand Up @@ -690,7 +690,7 @@ impl Compilation {
self.add_entry(entry, options).await?;
}

let make_artifact = mem::take(&mut self.build_module_graph_artifact);
let make_artifact = self.build_module_graph_artifact.take();
self.build_module_graph_artifact = update_module_graph(
self,
make_artifact,
Expand All @@ -704,7 +704,8 @@ impl Compilation {
.collect(),
)],
)
.await?;
.await?
.into();
Ok(())
}

Expand Down Expand Up @@ -737,7 +738,7 @@ impl Compilation {

// Recheck entry and clean useless entry
// This should before finish_modules hook is called, ensure providedExports effects on new added modules
let make_artifact = mem::take(&mut self.build_module_graph_artifact);
let make_artifact = self.build_module_graph_artifact.take();
self.build_module_graph_artifact = update_module_graph(
self,
make_artifact,
Expand All @@ -751,7 +752,8 @@ impl Compilation {
.collect(),
)],
)
.await?;
.await?
.into();
Ok(())
}

Expand Down Expand Up @@ -1047,8 +1049,8 @@ impl Compilation {
self.module_executor = Some(module_executor);
}

let artifact = std::mem::take(&mut self.build_module_graph_artifact);
self.build_module_graph_artifact = build_module_graph(self, artifact).await?;
let artifact = self.build_module_graph_artifact.take();
self.build_module_graph_artifact = build_module_graph(self, artifact).await?.into();

self.in_finish_make.store(true, Ordering::Release);

Expand All @@ -1060,7 +1062,7 @@ impl Compilation {
module_identifiers: IdentifierSet,
f: impl Fn(Vec<&BoxModule>) -> T,
) -> Result<T> {
let artifact = std::mem::take(&mut self.build_module_graph_artifact);
let artifact = self.build_module_graph_artifact.take();

// https://github.com/webpack/webpack/blob/19ca74127f7668aaf60d59f4af8fcaee7924541a/lib/Compilation.js#L2462C21-L2462C25
self.module_graph_cache_artifact.unfreeze();
Expand All @@ -1070,7 +1072,8 @@ impl Compilation {
artifact,
vec![UpdateParam::ForceBuildModules(module_identifiers.clone())],
)
.await?;
.await?
.into();

let module_graph = self.get_module_graph();
Ok(f(module_identifiers
Expand Down Expand Up @@ -1465,8 +1468,8 @@ impl Compilation {
pub async fn finish_build_module_graph(&mut self) -> Result<()> {
self.in_finish_make.store(false, Ordering::Release);
// clean up the entry deps
let make_artifact = std::mem::take(&mut self.build_module_graph_artifact);
self.build_module_graph_artifact = finish_build_module_graph(self, make_artifact).await?;
let make_artifact = self.build_module_graph_artifact.take();
self.build_module_graph_artifact = finish_build_module_graph(self, make_artifact).await?.into();
// sync assets to module graph from module_executor
if let Some(module_executor) = &mut self.module_executor {
let mut module_executor = std::mem::take(module_executor);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ use rayon::prelude::*;
use rspack_collections::{IdentifierDashMap, IdentifierIndexSet, IdentifierMap, IdentifierSet};
use rspack_core::{
BoxDependency, Compilation, CompilationOptimizeChunkModules, DependencyId, DependencyType,
ExportProvided, ExportsInfoGetter, ExtendedReferencedExport, ImportedByDeferModulesArtifact,
LibIdentOptions, Logger, Module, ModuleExt, ModuleGraph, ModuleGraphCacheArtifact,
ModuleGraphConnection, ModuleGraphModule, ModuleIdentifier, Plugin, PrefetchExportsInfoMode,
ProvidedExports, RuntimeCondition, RuntimeSpec, SourceType,
DerefOption, ExportProvided, ExportsInfoGetter, ExtendedReferencedExport,
ImportedByDeferModulesArtifact, LibIdentOptions, Logger, Module, ModuleExt, ModuleGraph,
ModuleGraphCacheArtifact, ModuleGraphConnection, ModuleGraphModule, ModuleIdentifier, Plugin,
PrefetchExportsInfoMode, ProvidedExports, RuntimeCondition, RuntimeSpec, SourceType,
concatenated_module::{
ConcatenatedInnerModule, ConcatenatedModule, RootModuleContext, is_esm_dep_like,
},
Expand Down Expand Up @@ -840,7 +840,7 @@ impl ModuleConcatenationPlugin {
let logger = compilation.get_logger("rspack.ModuleConcatenationPlugin");

if compilation.options.experiments.defer_import {
let mut imported_by_defer_modules_artifact = ImportedByDeferModulesArtifact::default();
let mut artifact = ImportedByDeferModulesArtifact::default();
let module_graph = compilation.get_module_graph();
for dep in module_graph.dependencies().values() {
if dep.get_phase().is_defer()
Expand All @@ -850,10 +850,10 @@ impl ModuleConcatenationPlugin {
)
&& let Some(module) = module_graph.module_identifier_by_dependency_id(dep.id())
{
imported_by_defer_modules_artifact.insert(*module);
artifact.insert(*module);
}
}
compilation.imported_by_defer_modules_artifact = imported_by_defer_modules_artifact;
compilation.imported_by_defer_modules_artifact = DerefOption::new(artifact);
}

let mut relevant_modules = vec![];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@
ModuleGraph, ModuleGraphConnection, ModuleIdentifier, NormalModuleCreateData,
NormalModuleFactoryModule, Plugin, PrefetchExportsInfoMode, RayonConsumer,
ResolvedExportInfoTarget, SideEffectsDoOptimize, SideEffectsDoOptimizeMoveTarget,
SideEffectsOptimizeArtifact,

Check failure on line 11 in crates/rspack_plugin_javascript/src/plugin/side_effects_flag_plugin.rs

View workflow job for this annotation

GitHub Actions / Run Rust Tests / Rust check

unused import: `SideEffectsOptimizeArtifact`
incremental::{self, IncrementalPasses, Mutation},
};
use rspack_error::Result;
use rspack_error::{Diagnostic, Result};

Check failure on line 14 in crates/rspack_plugin_javascript/src/plugin/side_effects_flag_plugin.rs

View workflow job for this annotation

GitHub Actions / Run Rust Tests / Rust check

unused import: `Diagnostic`
use rspack_hook::{plugin, plugin_hook};
use rspack_paths::{AssertUtf8, Utf8Path};
use sugar_path::SugarPath;
Expand Down Expand Up @@ -155,7 +156,7 @@
.incremental
.passes_enabled(IncrementalPasses::SIDE_EFFECTS)
{
std::mem::take(&mut compilation.side_effects_optimize_artifact)
compilation.side_effects_optimize_artifact.take()
} else {
Default::default()
};
Expand Down Expand Up @@ -300,7 +301,7 @@
}
logger.time_end(inner_start);

compilation.side_effects_optimize_artifact = side_effects_optimize_artifact;
compilation.side_effects_optimize_artifact = side_effects_optimize_artifact.into();

logger.time_end(start);
logger.log(format!("optimized {do_optimized_count} connections"));
Expand Down
Loading