Skip to content

Commit 0c4ccb4

Browse files
committed
fix(transformer): arrow function transform alter </this> (#3627)
Arrow function transform transforms `this` in `<this>` (JSX opening element), but was missing out transforming `</this>` (JSX closing element).
1 parent e32ce00 commit 0c4ccb4

File tree

3 files changed

+19
-25
lines changed

3 files changed

+19
-25
lines changed

crates/oxc_transformer/src/es2015/arrow_functions.rs

+9-22
Original file line numberDiff line numberDiff line change
@@ -119,34 +119,21 @@ impl<'a> ArrowFunctions<'a> {
119119
}
120120

121121
/// Change <this></this> to <_this></_this>, and mark it as found
122-
pub fn transform_jsx_opening_element(&mut self, elem: &mut JSXOpeningElement<'a>) {
122+
pub fn transform_jsx_element_name(&mut self, name: &mut JSXElementName<'a>) {
123123
if !self.is_inside_arrow_function() {
124124
return;
125125
}
126126

127-
let mut change_ident = |ident: &mut JSXIdentifier<'a>| {
128-
if ident.name == "this" {
129-
self.mark_this_as_found();
130-
ident.name = self.get_this_name();
127+
let ident = match name {
128+
JSXElementName::Identifier(ident) => ident,
129+
JSXElementName::MemberExpression(member_expr) => {
130+
member_expr.get_object_identifier_mut()
131131
}
132+
JSXElementName::NamespacedName(_) => return,
132133
};
133-
match &mut elem.name {
134-
JSXElementName::Identifier(ref mut ident) => change_ident(ident),
135-
JSXElementName::MemberExpression(ref mut member) => {
136-
let mut member_expr = member;
137-
loop {
138-
match &mut member_expr.object {
139-
JSXMemberExpressionObject::Identifier(ident) => {
140-
change_ident(ident);
141-
break;
142-
}
143-
JSXMemberExpressionObject::MemberExpression(expr) => {
144-
member_expr = expr;
145-
}
146-
}
147-
}
148-
}
149-
JSXElementName::NamespacedName(_) => {}
134+
if ident.name == "this" {
135+
self.mark_this_as_found();
136+
ident.name = self.get_this_name();
150137
}
151138
}
152139

crates/oxc_transformer/src/es2015/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ impl<'a> ES2015<'a> {
4343
}
4444
}
4545

46-
pub fn transform_jsx_opening_element(&mut self, elem: &mut JSXOpeningElement<'a>) {
46+
pub fn transform_jsx_element_name(&mut self, elem: &mut JSXElementName<'a>) {
4747
if self.options.arrow_function.is_some() {
48-
self.arrow_functions.transform_jsx_opening_element(elem);
48+
self.arrow_functions.transform_jsx_element_name(elem);
4949
}
5050
}
5151

crates/oxc_transformer/src/lib.rs

+8-1
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,14 @@ impl<'a> Traverse<'a> for Transformer<'a> {
201201
) {
202202
self.x0_typescript.transform_jsx_opening_element(elem);
203203
self.x1_react.transform_jsx_opening_element(elem, ctx);
204-
self.x3_es2015.transform_jsx_opening_element(elem);
204+
}
205+
206+
fn enter_jsx_element_name(
207+
&mut self,
208+
elem: &mut JSXElementName<'a>,
209+
_ctx: &mut TraverseCtx<'a>,
210+
) {
211+
self.x3_es2015.transform_jsx_element_name(elem);
205212
}
206213

207214
fn enter_method_definition(

0 commit comments

Comments
 (0)