Skip to content

Commit 6d0ca3a

Browse files
committed
Turbopack: FreeVarReference::Warning
1 parent 479877d commit 6d0ca3a

File tree

9 files changed

+72
-3
lines changed

9 files changed

+72
-3
lines changed

turbopack/crates/turbopack-core/src/compile_time_info.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,12 @@ pub enum FreeVarReference {
314314
Value(CompileTimeDefineValue),
315315
InputRelative(InputRelativeConstant),
316316
Error(RcStr),
317+
/// Emits a warning when the free variable is inlined, then processes the inner reference.
318+
/// Unlike `Error`, this will still perform the replacement after emitting the warning.
319+
Warning {
320+
message: RcStr,
321+
inner: Box<FreeVarReference>,
322+
},
317323
}
318324

319325
impl From<bool> for FreeVarReference {

turbopack/crates/turbopack-ecmascript/src/analyzer/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,7 @@ impl TryFrom<&FreeVarReference> for JsValue {
659659
},
660660
))
661661
}
662+
FreeVarReference::Warning { inner, .. } => inner.as_ref().try_into(),
662663
}
663664
}
664665
}

turbopack/crates/turbopack-ecmascript/src/references/mod.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2998,6 +2998,19 @@ async fn handle_free_var_reference(
29982998
ast_path.to_vec().into(),
29992999
));
30003000
}
3001+
FreeVarReference::Warning { message, inner } => {
3002+
state.handler.span_warn_with_code(
3003+
span,
3004+
message,
3005+
DiagnosticId::Error(
3006+
errors::failed_to_analyze::ecmascript::FREE_VAR_REFERENCE.to_string(),
3007+
),
3008+
);
3009+
return Box::pin(handle_free_var_reference(
3010+
ast_path, inner, span, state, analysis,
3011+
))
3012+
.await;
3013+
}
30013014
}
30023015
Ok(true)
30033016
}

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ use turbopack_core::{
3333
EvaluatableAssets, MinifyType, SourceMapSourceType, availability_info::AvailabilityInfo,
3434
},
3535
compile_time_defines,
36-
compile_time_info::{CompileTimeDefineValue, CompileTimeInfo, DefinableNameSegment},
36+
compile_time_info::{
37+
CompileTimeDefineValue, CompileTimeInfo, DefinableNameSegment, FreeVarReference,
38+
},
3739
condition::ContextCondition,
3840
context::AssetContext,
3941
environment::{BrowserEnvironment, Environment, ExecutionEnvironment, NodeJsEnvironment},
@@ -321,7 +323,18 @@ async fn run_test_operation(resource: RcStr) -> Result<Vc<FileSystemPath>> {
321323

322324
let compile_time_info = CompileTimeInfo::builder(env)
323325
.defines(defines.clone().resolved_cell())
324-
.free_var_references(free_var_references!(..defines.into_iter()).resolved_cell())
326+
.free_var_references(
327+
free_var_references!(
328+
..defines.into_iter(),
329+
WARNED_VALUE = FreeVarReference::Warning {
330+
message: rcstr!("WARNED_VALUE is deprecated, use REPLACEMENT_VALUE instead"),
331+
inner: Box::new(FreeVarReference::Value(CompileTimeDefineValue::String(
332+
rcstr!("replacement")
333+
),)),
334+
},
335+
)
336+
.resolved_cell(),
337+
)
325338
.cell()
326339
.await?;
327340

turbopack/crates/turbopack-tests/tests/snapshot/comptime/define/input/index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,9 @@ p.env.NODE_ENV != 'production' && console.log('development')
6161
p.env.NODE_ENV == 'production' && console.log('production')
6262

6363
console.log(__dirname)
64+
65+
// Test that WARNED_VALUE triggers a warning but still gets replaced
66+
console.log(WARNED_VALUE)
67+
if (WARNED_VALUE === 'replacement') {
68+
console.log('warning replacement works')
69+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
warning - [analysis] /turbopack/crates/turbopack-tests/tests/snapshot/comptime/define/input/index.js:66:12 error TP1202 WARNED_VALUE is deprecated, use REPLACEMENT_VALUE instead
2+
3+
62 |
4+
63 | console.log(__dirname)
5+
64 |
6+
65 | // Test that WARNED_VALUE triggers a warning but still gets replaced
7+
+ v----------v
8+
66 + console.log(WARNED_VALUE)
9+
+ ^----------^
10+
67 | if (WARNED_VALUE === 'replacement') {
11+
68 | console.log('warning replacement works')
12+
69 | }
13+
70 |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
warning - [analysis] /turbopack/crates/turbopack-tests/tests/snapshot/comptime/define/input/index.js:67:4 error TP1202 WARNED_VALUE is deprecated, use REPLACEMENT_VALUE instead
2+
3+
63 | console.log(__dirname)
4+
64 |
5+
65 | // Test that WARNED_VALUE triggers a warning but still gets replaced
6+
66 | console.log(WARNED_VALUE)
7+
+ v----------v
8+
67 + if (WARNED_VALUE === 'replacement') {
9+
+ ^----------^
10+
68 | console.log('warning replacement works')
11+
69 | }
12+
70 |

turbopack/crates/turbopack-tests/tests/snapshot/comptime/define/output/aaf3a_crates_turbopack-tests_tests_snapshot_comptime_define_input_index_aec19b5a.js

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

turbopack/crates/turbopack-tests/tests/snapshot/comptime/define/output/aaf3a_crates_turbopack-tests_tests_snapshot_comptime_define_input_index_aec19b5a.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)