Skip to content

Commit 29642b2

Browse files
authored
refactor: use DerfOpt's take/replace assist artifact mutation (#12659)
* refactor: remove Default trait of DerefOption * refactor: `replace` is better than `insert`
1 parent 70ffab9 commit 29642b2

File tree

3 files changed

+32
-26
lines changed

3 files changed

+32
-26
lines changed

crates/rspack_core/src/compilation/mod.rs

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,7 @@ impl Compilation {
662662
}
663663

664664
let make_artifact = self.build_module_graph_artifact.take();
665-
self.build_module_graph_artifact = DerefOption::new(
665+
self.build_module_graph_artifact.replace(
666666
update_module_graph(
667667
self,
668668
make_artifact,
@@ -713,7 +713,7 @@ impl Compilation {
713713
// Recheck entry and clean useless entry
714714
// This should before finish_modules hook is called, ensure providedExports effects on new added modules
715715
let make_artifact = self.build_module_graph_artifact.take();
716-
self.build_module_graph_artifact = DerefOption::new(
716+
self.build_module_graph_artifact.replace(
717717
update_module_graph(
718718
self,
719719
make_artifact,
@@ -1025,7 +1025,9 @@ impl Compilation {
10251025
}
10261026

10271027
let artifact = self.build_module_graph_artifact.take();
1028-
self.build_module_graph_artifact = DerefOption::new(build_module_graph(self, artifact).await?);
1028+
self
1029+
.build_module_graph_artifact
1030+
.replace(build_module_graph(self, artifact).await?);
10291031

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

@@ -1042,7 +1044,7 @@ impl Compilation {
10421044
// https://github.com/webpack/webpack/blob/19ca74127f7668aaf60d59f4af8fcaee7924541a/lib/Compilation.js#L2462C21-L2462C25
10431045
self.module_graph_cache_artifact.unfreeze();
10441046

1045-
self.build_module_graph_artifact = DerefOption::new(
1047+
self.build_module_graph_artifact.replace(
10461048
update_module_graph(
10471049
self,
10481050
artifact,
@@ -1456,8 +1458,9 @@ impl Compilation {
14561458
self.in_finish_make.store(false, Ordering::Release);
14571459
// clean up the entry deps
14581460
let make_artifact = self.build_module_graph_artifact.take();
1459-
self.build_module_graph_artifact =
1460-
DerefOption::new(finish_build_module_graph(self, make_artifact).await?);
1461+
self
1462+
.build_module_graph_artifact
1463+
.replace(finish_build_module_graph(self, make_artifact).await?);
14611464
// sync assets to module graph from module_executor
14621465
if let Some(module_executor) = &mut self.module_executor {
14631466
let mut module_executor = std::mem::take(module_executor);
@@ -1645,9 +1648,9 @@ impl Compilation {
16451648
let start = logger.time("optimize dependencies");
16461649
// https://github.com/webpack/webpack/blob/d15c73469fd71cf98734685225250148b68ddc79/lib/Compilation.js#L2812-L2814
16471650

1648-
let mut side_effects_optimize_artifact = self.side_effects_optimize_artifact.take();
16491651
let mut diagnostics: Vec<Diagnostic> = vec![];
1650-
let mut build_module_graph_artifact = mem::take(&mut self.build_module_graph_artifact);
1652+
let mut side_effects_optimize_artifact = self.side_effects_optimize_artifact.take();
1653+
let mut build_module_graph_artifact = self.build_module_graph_artifact.take();
16511654
while matches!(
16521655
plugin_driver
16531656
.compilation_hooks
@@ -1662,8 +1665,12 @@ impl Compilation {
16621665
.map_err(|e| e.wrap_err("caused by plugins in Compilation.hooks.optimizeDependencies"))?,
16631666
Some(true)
16641667
) {}
1665-
self.side_effects_optimize_artifact = DerefOption::new(side_effects_optimize_artifact);
1666-
self.build_module_graph_artifact = build_module_graph_artifact;
1668+
self
1669+
.side_effects_optimize_artifact
1670+
.replace(side_effects_optimize_artifact);
1671+
self
1672+
.build_module_graph_artifact
1673+
.replace(build_module_graph_artifact);
16671674
self.extend_diagnostics(diagnostics);
16681675

16691676
logger.time_end(start);

crates/rspack_core/src/utils/deref_option.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,6 @@ use std::{
66
#[derive(Debug)]
77
pub struct DerefOption<T>(Option<T>);
88

9-
impl<T> Default for DerefOption<T>
10-
where
11-
T: Default,
12-
{
13-
fn default() -> Self {
14-
Self(Some(T::default()))
15-
}
16-
}
17-
189
impl<T> From<T> for DerefOption<T> {
1910
fn from(value: T) -> Self {
2011
Self::new(value)
@@ -42,6 +33,10 @@ impl<T> DerefOption<T> {
4233
other,
4334
);
4435
}
36+
37+
pub fn replace(&mut self, value: T) -> Option<T> {
38+
self.0.replace(value)
39+
}
4540
}
4641
impl<T> Deref for DerefOption<T> {
4742
type Target = T;

xtask/benchmark/benches/groups/build_chunk_graph.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
#![allow(clippy::unwrap_used)]
2-
use std::{mem, sync::Arc};
2+
use std::sync::Arc;
33

44
use criterion::criterion_group;
55
use rspack::builder::Builder as _;
66
use rspack_benchmark::Criterion;
77
use rspack_core::{
8-
Compilation, Compiler, DerefOption, Experiments, Optimization, build_chunk_graph, fast_set,
8+
Compilation, Compiler, Experiments, Optimization, build_chunk_graph, fast_set,
99
incremental::{Incremental, IncrementalOptions},
1010
};
1111
use rspack_error::Diagnostic;
@@ -180,8 +180,7 @@ pub fn build_chunk_graph_benchmark_inner(c: &mut Criterion) {
180180
let mut side_effects_optimize_artifact =
181181
compiler.compilation.side_effects_optimize_artifact.take();
182182
let mut diagnostics: Vec<Diagnostic> = vec![];
183-
let mut build_module_graph_artifact =
184-
mem::take(&mut compiler.compilation.build_module_graph_artifact);
183+
let mut build_module_graph_artifact = compiler.compilation.build_module_graph_artifact.take();
185184
while matches!(
186185
compiler
187186
.plugin_driver
@@ -197,10 +196,15 @@ pub fn build_chunk_graph_benchmark_inner(c: &mut Criterion) {
197196
.unwrap(),
198197
Some(true)
199198
) {}
200-
compiler.compilation.build_module_graph_artifact = build_module_graph_artifact;
199+
compiler
200+
.compilation
201+
.build_module_graph_artifact
202+
.replace(build_module_graph_artifact);
201203

202-
compiler.compilation.side_effects_optimize_artifact =
203-
DerefOption::new(side_effects_optimize_artifact);
204+
compiler
205+
.compilation
206+
.side_effects_optimize_artifact
207+
.replace(side_effects_optimize_artifact);
204208
compiler.compilation.extend_diagnostics(diagnostics);
205209

206210
compiler

0 commit comments

Comments
 (0)