diff --git a/crates/oxc_ast/src/ast/jsx.rs b/crates/oxc_ast/src/ast/jsx.rs index 9007fa32a..d5dfee88b 100644 --- a/crates/oxc_ast/src/ast/jsx.rs +++ b/crates/oxc_ast/src/ast/jsx.rs @@ -238,7 +238,7 @@ pub struct JSXMemberExpression<'a> { #[ast(visit)] #[derive(Debug)] #[generate_derive(CloneIn, GetSpan, GetSpanMut, ContentEq, ContentHash)] -#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))] +#[cfg_attr(feature = "serialize", derive(Tsify))] #[serde(untagged)] pub enum JSXMemberExpressionObject<'a> { IdentifierReference(Box<'a, IdentifierReference<'a>>) = 0, diff --git a/crates/oxc_ast/src/serialize.rs b/crates/oxc_ast/src/serialize.rs index da9c99e67..12b3b4fcf 100644 --- a/crates/oxc_ast/src/serialize.rs +++ b/crates/oxc_ast/src/serialize.rs @@ -9,8 +9,8 @@ use crate::ast::{ ArrayAssignmentTarget, ArrayPattern, AssignmentTargetMaybeDefault, AssignmentTargetProperty, AssignmentTargetRest, BindingPattern, BindingPatternKind, BindingProperty, BindingRestElement, Directive, Elision, FormalParameter, FormalParameterKind, FormalParameters, JSXElementName, - JSXIdentifier, ObjectAssignmentTarget, ObjectPattern, Program, RegExpFlags, Statement, - StringLiteral, TSModuleBlock, TSTypeAnnotation, + JSXIdentifier, JSXMemberExpressionObject, ObjectAssignmentTarget, ObjectPattern, Program, + RegExpFlags, Statement, StringLiteral, TSModuleBlock, TSTypeAnnotation, }; pub struct EcmaFormatter; @@ -265,3 +265,17 @@ impl<'a> Serialize for JSXElementName<'a> { } } } + +impl<'a> Serialize for JSXMemberExpressionObject<'a> { + fn serialize(&self, serializer: S) -> Result { + match self { + Self::IdentifierReference(ident) => { + JSXIdentifier { span: ident.span, name: ident.name.clone() }.serialize(serializer) + } + Self::MemberExpression(expr) => expr.serialize(serializer), + Self::ThisExpression(expr) => { + JSXIdentifier { span: expr.span, name: "this".into() }.serialize(serializer) + } + } + } +}