Skip to content

Commit 62a079a

Browse files
committed
Disable properly
1 parent b1034a0 commit 62a079a

File tree

5 files changed

+68
-41
lines changed

5 files changed

+68
-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: 33 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,47 @@ 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+
debug_assert!(!exports.is_empty());
115+
let source_used_exports = used_exports.get(&parent).unwrap();
116+
if exports
117+
.iter()
118+
.all(|e| !source_used_exports.is_export_used(e))
119+
{
120+
debug_unused_references_name.insert((
121+
parent,
122+
ref_data.export.clone(),
123+
target,
124+
));
125+
unused_references_edges.insert(edge);
126+
unused_references.insert(ref_data.reference);
125127

126-
return Ok(GraphTraversalAction::Skip);
127-
} else {
128+
return Ok(GraphTraversalAction::Skip);
129+
} else {
130+
debug_unused_references_name.remove(&(
131+
parent,
132+
ref_data.export.clone(),
133+
target,
134+
));
135+
unused_references_edges.remove(&edge);
136+
unused_references.remove(&ref_data.reference);
137+
// Continue, add eport
138+
}
139+
}
140+
ImportUsage::Global => {
128141
debug_unused_references_name.remove(&(
129142
parent,
130143
ref_data.export.clone(),
131144
target,
132145
));
133146
unused_references_edges.remove(&edge);
134147
unused_references.remove(&ref_data.reference);
135-
// Continue, add eport
148+
// Continue, has to always be included
136149
}
137150
}
138-
ImportUsage::Global => {
139-
// Continue, has to always be included
140-
}
141151
}
142152

143153
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)