Skip to content

Commit 19b2442

Browse files
authored
refactor: inline const parser plugin (#11359)
1 parent cb00e50 commit 19b2442

File tree

14 files changed

+66
-70
lines changed

14 files changed

+66
-70
lines changed

crates/rspack_plugin_javascript/src/parser_plugin/amd/amd_plugin.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,23 +161,23 @@ impl JavascriptParserPlugin for AMDParserPlugin {
161161
fn evaluate_identifier(
162162
&self,
163163
_parser: &mut JavascriptParser,
164-
ident: &str,
164+
for_name: &str,
165165
start: u32,
166166
end: u32,
167167
) -> Option<BasicEvaluatedExpression<'static>> {
168-
if ident == DEFINE_AMD {
168+
if for_name == DEFINE_AMD {
169169
return Some(evaluate_to_identifier(
170-
ident.to_string(),
170+
for_name.to_string(),
171171
"define".to_string(),
172172
Some(true),
173173
start,
174174
end,
175175
));
176176
}
177177

178-
if ident == REQUIRE_AMD {
178+
if for_name == REQUIRE_AMD {
179179
return Some(evaluate_to_identifier(
180-
ident.to_string(),
180+
for_name.to_string(),
181181
"require".to_string(),
182182
Some(true),
183183
start,

crates/rspack_plugin_javascript/src/parser_plugin/api_plugin.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,11 +299,11 @@ impl JavascriptParserPlugin for APIPlugin {
299299
fn evaluate_identifier(
300300
&self,
301301
parser: &mut JavascriptParser,
302-
ident: &str,
302+
for_name: &str,
303303
start: u32,
304304
end: u32,
305305
) -> Option<eval::BasicEvaluatedExpression<'static>> {
306-
if ident == WEBPACK_LAYER {
306+
if for_name == WEBPACK_LAYER {
307307
if let Some(layer) = parser.module_layer {
308308
Some(eval::evaluate_to_string(layer.into(), start, end))
309309
} else {

crates/rspack_plugin_javascript/src/parser_plugin/common_js_imports_parse_plugin.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -427,11 +427,11 @@ impl JavascriptParserPlugin for CommonJsImportsParserPlugin {
427427
fn evaluate_identifier(
428428
&self,
429429
_parser: &mut JavascriptParser,
430-
ident: &str,
430+
for_name: &str,
431431
start: u32,
432432
end: u32,
433433
) -> Option<BasicEvaluatedExpression<'static>> {
434-
match ident {
434+
match for_name {
435435
expr_name::REQUIRE => Some(eval::evaluate_to_identifier(
436436
expr_name::REQUIRE.to_string(),
437437
expr_name::REQUIRE.to_string(),

crates/rspack_plugin_javascript/src/parser_plugin/const/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,11 @@ impl JavascriptParserPlugin for ConstPlugin {
115115
fn evaluate_identifier(
116116
&self,
117117
parser: &mut JavascriptParser,
118-
ident: &str,
118+
for_name: &str,
119119
start: u32,
120120
end: u32,
121121
) -> Option<crate::utils::eval::BasicEvaluatedExpression<'static>> {
122-
match ident {
122+
match for_name {
123123
WEBPACK_RESOURCE_QUERY => Some(evaluate_to_string(
124124
parser
125125
.resource_data

crates/rspack_plugin_javascript/src/parser_plugin/define_plugin/parser.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -82,26 +82,26 @@ impl JavascriptParserPlugin for DefineParserPlugin {
8282
fn evaluate_identifier(
8383
&self,
8484
parser: &mut JavascriptParser,
85-
ident: &str,
85+
for_name: &str,
8686
start: u32,
8787
end: u32,
8888
) -> Option<crate::utils::eval::BasicEvaluatedExpression<'static>> {
89-
if let Some(record) = self.walk_data.define_record.get(ident)
89+
if let Some(record) = self.walk_data.define_record.get(for_name)
9090
&& let Some(on_evaluate_identifier) = &record.on_evaluate_identifier
9191
{
9292
// Avoid endless recursion, for example: new DefinePlugin({ "a": "a" })
9393
if self.recurse.swap(true, Ordering::Acquire) {
9494
return None;
9595
}
96-
self.add_value_dependency(parser, ident);
97-
let evaluated = on_evaluate_identifier(record, parser, ident, start, end);
96+
self.add_value_dependency(parser, for_name);
97+
let evaluated = on_evaluate_identifier(record, parser, for_name, start, end);
9898
self.recurse.store(false, Ordering::Release);
9999
return evaluated;
100-
} else if let Some(record) = self.walk_data.object_define_record.get(ident)
100+
} else if let Some(record) = self.walk_data.object_define_record.get(for_name)
101101
&& let Some(on_evaluate_identifier) = &record.on_evaluate_identifier
102102
{
103-
self.add_value_dependency(parser, ident);
104-
return on_evaluate_identifier(record, parser, ident, start, end);
103+
self.add_value_dependency(parser, for_name);
104+
return on_evaluate_identifier(record, parser, for_name, start, end);
105105
}
106106
None
107107
}

crates/rspack_plugin_javascript/src/parser_plugin/drive.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -449,12 +449,12 @@ impl JavascriptParserPlugin for JavaScriptParserPluginDrive {
449449
fn evaluate_identifier(
450450
&self,
451451
parser: &mut JavascriptParser,
452-
ident: &str,
452+
for_name: &str,
453453
start: u32,
454454
end: u32,
455455
) -> Option<BasicEvaluatedExpression<'static>> {
456456
for plugin in &self.plugins {
457-
let res = plugin.evaluate_identifier(parser, ident, start, end);
457+
let res = plugin.evaluate_identifier(parser, for_name, start, end);
458458
// `SyncBailHook`
459459
if res.is_some() {
460460
return res;

crates/rspack_plugin_javascript/src/parser_plugin/hot_module_replacement_plugin.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,11 @@ impl JavascriptParserPlugin for ModuleHotReplacementParserPlugin {
135135
fn evaluate_identifier(
136136
&self,
137137
_parser: &mut JavascriptParser,
138-
ident: &str,
138+
for_name: &str,
139139
start: u32,
140140
end: u32,
141141
) -> Option<crate::utils::eval::BasicEvaluatedExpression<'static>> {
142-
if ident == expr_name::MODULE_HOT {
142+
if for_name == expr_name::MODULE_HOT {
143143
Some(eval::evaluate_to_identifier(
144144
expr_name::MODULE_HOT.to_string(),
145145
expr_name::MODULE.to_string(),
@@ -202,11 +202,11 @@ impl JavascriptParserPlugin for ImportMetaHotReplacementParserPlugin {
202202
fn evaluate_identifier(
203203
&self,
204204
_parser: &mut JavascriptParser,
205-
ident: &str,
205+
for_name: &str,
206206
start: u32,
207207
end: u32,
208208
) -> Option<crate::utils::eval::BasicEvaluatedExpression<'static>> {
209-
if ident == expr_name::IMPORT_META_WEBPACK_HOT {
209+
if for_name == expr_name::IMPORT_META_WEBPACK_HOT {
210210
Some(eval::evaluate_to_identifier(
211211
expr_name::IMPORT_META_WEBPACK_HOT.to_string(),
212212
expr_name::IMPORT_META.to_string(),

crates/rspack_plugin_javascript/src/parser_plugin/import_meta_context_dependency_parser_plugin.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,11 @@ impl JavascriptParserPlugin for ImportMetaContextDependencyParserPlugin {
112112
fn evaluate_identifier(
113113
&self,
114114
_parser: &mut JavascriptParser,
115-
ident: &str,
115+
for_name: &str,
116116
start: u32,
117117
end: u32,
118118
) -> Option<BasicEvaluatedExpression<'static>> {
119-
if ident == expr_name::IMPORT_META_WEBPACK_CONTEXT {
119+
if for_name == expr_name::IMPORT_META_WEBPACK_CONTEXT {
120120
Some(eval::evaluate_to_identifier(
121121
expr_name::IMPORT_META_WEBPACK_CONTEXT.to_string(),
122122
expr_name::IMPORT_META.to_string(),

crates/rspack_plugin_javascript/src/parser_plugin/import_meta_plugin.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,13 @@ impl JavascriptParserPlugin for ImportMetaPlugin {
7171
fn evaluate_identifier(
7272
&self,
7373
parser: &mut JavascriptParser,
74-
ident: &str,
74+
for_name: &str,
7575
start: u32,
7676
end: u32,
7777
) -> Option<eval::BasicEvaluatedExpression<'static>> {
78-
if ident == expr_name::IMPORT_META_WEBPACK {
78+
if for_name == expr_name::IMPORT_META_WEBPACK {
7979
Some(eval::evaluate_to_number(5_f64, start, end))
80-
} else if ident == expr_name::IMPORT_META_URL {
80+
} else if for_name == expr_name::IMPORT_META_URL {
8181
Some(eval::evaluate_to_string(
8282
self.import_meta_url(parser),
8383
start,

crates/rspack_plugin_javascript/src/parser_plugin/inline_const.rs

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use rspack_core::{
44
PrefetchExportsInfoMode, RuntimeSpec, UsedName,
55
};
66
use rspack_util::ryu_js;
7-
use swc_core::ecma::ast::{ModuleDecl, ModuleItem, Program, VarDeclKind};
7+
use swc_core::ecma::ast::{ModuleDecl, ModuleItem, Program, VarDecl, VarDeclKind, VarDeclarator};
88

99
use super::JavascriptParserPlugin;
1010
use crate::{
@@ -13,7 +13,7 @@ use crate::{
1313
BasicEvaluatedExpression, evaluate_to_boolean, evaluate_to_null, evaluate_to_number,
1414
evaluate_to_string, evaluate_to_undefined,
1515
},
16-
visitors::{JavascriptParser, Statement, TagInfoData, TopLevelScope},
16+
visitors::{JavascriptParser, TagInfoData, TopLevelScope},
1717
};
1818

1919
pub const INLINABLE_CONST_TAG: &str = "inlinable const";
@@ -53,20 +53,20 @@ impl JavascriptParserPlugin for InlineConstPlugin {
5353
fn evaluate_identifier(
5454
&self,
5555
parser: &mut JavascriptParser,
56-
ident: &str,
56+
for_name: &str,
5757
start: u32,
5858
end: u32,
5959
) -> Option<BasicEvaluatedExpression<'static>> {
60-
if !parser.has_inlinable_const_decls || !matches!(parser.top_level_scope, TopLevelScope::Top) {
60+
if !parser.has_inlinable_const_decls || for_name != INLINABLE_CONST_TAG {
6161
return None;
6262
}
6363
// Propagate inlinable constants. Help the rest const variable declarations that referencing the
6464
// inlinable constants to evaluate to an inlinable constants.
65-
let inlinable = parser
66-
.get_tag_data(ident, INLINABLE_CONST_TAG)
67-
.map(InlinableConstData::downcast)
68-
.map(|data| data.value)?;
69-
Some(match inlinable {
65+
let tag_info = parser
66+
.definitions_db
67+
.expect_get_tag_info(parser.current_tag_info?);
68+
let data = InlinableConstData::downcast(tag_info.data.clone()?);
69+
Some(match data.value {
7070
EvaluatedInlinableValue::Null => evaluate_to_null(start, end),
7171
EvaluatedInlinableValue::Undefined => evaluate_to_undefined(start, end),
7272
EvaluatedInlinableValue::Boolean(v) => evaluate_to_boolean(v, start, end),
@@ -75,32 +75,28 @@ impl JavascriptParserPlugin for InlineConstPlugin {
7575
})
7676
}
7777

78-
fn block_pre_statement(&self, parser: &mut JavascriptParser, stmt: Statement) -> Option<bool> {
78+
fn pre_declarator(
79+
&self,
80+
parser: &mut JavascriptParser,
81+
declarator: &VarDeclarator,
82+
declaration: &VarDecl,
83+
) -> Option<bool> {
7984
if !parser.has_inlinable_const_decls || !matches!(parser.top_level_scope, TopLevelScope::Top) {
8085
return None;
8186
}
82-
83-
if let Statement::Var(declaration) = stmt
84-
&& matches!(declaration.kind, VarDeclKind::Const)
87+
if matches!(declaration.kind, VarDeclKind::Const)
88+
&& let Some(name) = declarator.name.as_ident()
89+
&& let Some(init) = &declarator.init
8590
{
86-
for declarator in &declaration.decls {
87-
if let Some(name) = declarator.name.as_ident()
88-
&& let Some(init) = &declarator.init
89-
{
90-
let evaluated = parser.evaluate_expression(init);
91-
if let Some(inlinable) = to_evaluated_inlinable_value(&evaluated) {
92-
parser.tag_variable(
93-
name.id.sym.to_string(),
94-
INLINABLE_CONST_TAG,
95-
Some(InlinableConstData { value: inlinable }),
96-
);
97-
continue;
98-
}
99-
}
91+
let evaluated = parser.evaluate_expression(init);
92+
if let Some(inlinable) = to_evaluated_inlinable_value(&evaluated) {
93+
parser.tag_variable(
94+
name.id.sym.to_string(),
95+
INLINABLE_CONST_TAG,
96+
Some(InlinableConstData { value: inlinable }),
97+
);
10098
}
101-
return None;
10299
}
103-
104100
None
105101
}
106102
}

0 commit comments

Comments
 (0)