Skip to content

Commit c3589f5

Browse files
committed
Disable properly
1 parent 688b8af commit c3589f5

File tree

5 files changed

+67
-41
lines changed

5 files changed

+67
-41
lines changed

crates/next-api/src/project.rs

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,9 @@ use turbopack_core::{
6464
module::Module,
6565
module_graph::{
6666
GraphEntries, ModuleGraph, SingleModuleGraph, VisitedModules,
67-
binding_usage_info::{OptionBindingUsageInfo, compute_binding_usage_info},
67+
binding_usage_info::{
68+
BindingUsageInfo, OptionBindingUsageInfo, compute_binding_usage_info,
69+
},
6870
chunk_group_info::ChunkGroupEntry,
6971
},
7072
output::{OutputAsset, OutputAssets},
@@ -1867,6 +1869,23 @@ impl Project {
18671869
}
18681870
}
18691871

1872+
/// Compute the used exports for each module.
1873+
#[turbo_tasks::function]
1874+
async fn binding_usage_info(self: Vc<Self>) -> Result<Vc<BindingUsageInfo>> {
1875+
let remove_unused_imports = *self
1876+
.next_config()
1877+
.turbopack_remove_unused_imports(self.next_mode())
1878+
.await?;
1879+
1880+
let module_graphs = self.whole_app_module_graphs().await?;
1881+
Ok(
1882+
*compute_binding_usage_info(module_graphs.full, remove_unused_imports)
1883+
// As a performance optimization, we resolve strongly consistently
1884+
.resolve_strongly_consistent()
1885+
.await?,
1886+
)
1887+
}
1888+
18701889
/// Compute the used exports for each module.
18711890
#[turbo_tasks::function]
18721891
pub async fn export_usage(self: Vc<Self>) -> Result<Vc<OptionBindingUsageInfo>> {
@@ -1875,12 +1894,8 @@ impl Project {
18751894
.turbopack_remove_unused_exports(self.next_mode())
18761895
.await?
18771896
{
1878-
let module_graphs = self.whole_app_module_graphs().await?;
18791897
Ok(Vc::cell(Some(
1880-
compute_binding_usage_info(module_graphs.full)
1881-
// As a performance optimization, we resolve strongly consistently
1882-
.resolve_strongly_consistent()
1883-
.await?,
1898+
self.binding_usage_info().to_resolved().await?,
18841899
)))
18851900
} else {
18861901
Ok(Vc::cell(None))
@@ -1895,12 +1910,8 @@ impl Project {
18951910
.turbopack_remove_unused_imports(self.next_mode())
18961911
.await?
18971912
{
1898-
let module_graphs = self.whole_app_module_graphs().await?;
18991913
Ok(Vc::cell(Some(
1900-
compute_binding_usage_info(module_graphs.full)
1901-
// As a performance optimization, we resolve strongly consistently
1902-
.resolve_strongly_consistent()
1903-
.await?,
1914+
self.binding_usage_info().to_resolved().await?,
19041915
)))
19051916
} else {
19061917
Ok(Vc::cell(None))

turbopack/crates/turbopack-cli/src/build/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ async fn build_internal(
315315
.to_resolved()
316316
.await?,
317317
);
318-
let binding_usage = compute_binding_usage_info(module_graph.to_resolved().await?)
318+
let binding_usage = compute_binding_usage_info(module_graph.to_resolved().await?, true)
319319
.resolve_strongly_consistent()
320320
.await?;
321321
module_graph = module_graph.without_unused_references(*binding_usage);

turbopack/crates/turbopack-core/src/module_graph/binding_usage_info.rs

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ impl BindingUsageInfo {
7070
return Ok(ModuleExportUsage::all());
7171
}
7272

73-
bail!("export usage not found for module: {ident:?}",);
73+
bail!("export usage not found for module: {ident:?}");
7474
};
7575
Ok(ModuleExportUsage {
7676
export_usage: exports.clone().resolved_cell(),
@@ -83,6 +83,7 @@ impl BindingUsageInfo {
8383
#[turbo_tasks::function(operation)]
8484
pub async fn compute_binding_usage_info(
8585
graph: ResolvedVc<ModuleGraph>,
86+
remove_unused_imports: bool,
8687
) -> Result<Vc<BindingUsageInfo>> {
8788
let mut used_exports = FxHashMap::<_, ModuleExportUsageInfo>::default();
8889
let mut debug_unused_references_name = FxHashSet::<(
@@ -106,38 +107,46 @@ pub async fn compute_binding_usage_info(
106107
return Ok(GraphTraversalAction::Continue);
107108
};
108109

109-
// If the current edge is an unused import, skip it
110-
match &ref_data.import {
111-
ImportUsage::Exports(exports) => {
112-
debug_assert!(!exports.is_empty());
113-
let source_used_exports = used_exports.get(&parent).unwrap();
114-
if exports
115-
.iter()
116-
.all(|e| !source_used_exports.is_export_used(e))
117-
{
118-
debug_unused_references_name.insert((
119-
parent,
120-
ref_data.export.clone(),
121-
target,
122-
));
123-
unused_references_edges.insert(edge);
124-
unused_references.insert(ref_data.reference);
110+
if remove_unused_imports {
111+
// If the current edge is an unused import, skip it
112+
match &ref_data.import {
113+
ImportUsage::Exports(exports) => {
114+
let source_used_exports = used_exports.get(&parent).unwrap();
115+
if exports
116+
.iter()
117+
.all(|e| !source_used_exports.is_export_used(e))
118+
{
119+
debug_unused_references_name.insert((
120+
parent,
121+
ref_data.export.clone(),
122+
target,
123+
));
124+
unused_references_edges.insert(edge);
125+
unused_references.insert(ref_data.reference);
125126

126-
return Ok(GraphTraversalAction::Skip);
127-
} else {
127+
return Ok(GraphTraversalAction::Skip);
128+
} else {
129+
debug_unused_references_name.remove(&(
130+
parent,
131+
ref_data.export.clone(),
132+
target,
133+
));
134+
unused_references_edges.remove(&edge);
135+
unused_references.remove(&ref_data.reference);
136+
// Continue, add eport
137+
}
138+
}
139+
ImportUsage::Global => {
128140
debug_unused_references_name.remove(&(
129141
parent,
130142
ref_data.export.clone(),
131143
target,
132144
));
133145
unused_references_edges.remove(&edge);
134146
unused_references.remove(&ref_data.reference);
135-
// Continue, add eport
147+
// Continue, has to always be included
136148
}
137149
}
138-
ImportUsage::Global => {
139-
// Continue, has to always be included
140-
}
141150
}
142151

143152
let entry = used_exports.entry(target);

turbopack/crates/turbopack-tests/tests/execution.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -476,9 +476,12 @@ async fn run_test_operation(prepared_test: ResolvedVc<PreparedTest>) -> Result<V
476476

477477
let binding_usage = if options.remove_unused_imports || options.remove_unused_exports {
478478
Some(
479-
compute_binding_usage_info(module_graph.to_resolved().await?)
480-
.resolve_strongly_consistent()
481-
.await?,
479+
compute_binding_usage_info(
480+
module_graph.to_resolved().await?,
481+
options.remove_unused_imports,
482+
)
483+
.resolve_strongly_consistent()
484+
.await?,
482485
)
483486
} else {
484487
None

turbopack/crates/turbopack-tests/tests/snapshot.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -435,9 +435,12 @@ async fn run_test_operation(resource: RcStr) -> Result<Vc<FileSystemPath>> {
435435

436436
let binding_usage = if options.remove_unused_imports || options.remove_unused_exports {
437437
Some(
438-
compute_binding_usage_info(module_graph.to_resolved().await?)
439-
.resolve_strongly_consistent()
440-
.await?,
438+
compute_binding_usage_info(
439+
module_graph.to_resolved().await?,
440+
options.remove_unused_imports,
441+
)
442+
.resolve_strongly_consistent()
443+
.await?,
441444
)
442445
} else {
443446
None

0 commit comments

Comments
 (0)