diff --git a/crates/oxc_ast/src/ast/jsx.rs b/crates/oxc_ast/src/ast/jsx.rs index 3eaf497aa..9007fa32a 100644 --- a/crates/oxc_ast/src/ast/jsx.rs +++ b/crates/oxc_ast/src/ast/jsx.rs @@ -168,7 +168,7 @@ pub struct JSXClosingFragment { #[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 JSXElementName<'a> { /// `
` diff --git a/crates/oxc_ast/src/serialize.rs b/crates/oxc_ast/src/serialize.rs index 934deaa41..da9c99e67 100644 --- a/crates/oxc_ast/src/serialize.rs +++ b/crates/oxc_ast/src/serialize.rs @@ -8,9 +8,9 @@ use serde::{ use crate::ast::{ ArrayAssignmentTarget, ArrayPattern, AssignmentTargetMaybeDefault, AssignmentTargetProperty, AssignmentTargetRest, BindingPattern, BindingPatternKind, BindingProperty, BindingRestElement, - Directive, Elision, FormalParameter, FormalParameterKind, FormalParameters, - ObjectAssignmentTarget, ObjectPattern, Program, RegExpFlags, Statement, StringLiteral, - TSModuleBlock, TSTypeAnnotation, + Directive, Elision, FormalParameter, FormalParameterKind, FormalParameters, JSXElementName, + JSXIdentifier, ObjectAssignmentTarget, ObjectPattern, Program, RegExpFlags, Statement, + StringLiteral, TSModuleBlock, TSTypeAnnotation, }; pub struct EcmaFormatter; @@ -249,3 +249,19 @@ struct DirectiveAsStatement<'a, 'b> { span: Span, expression: &'b StringLiteral<'a>, } + +impl<'a> Serialize for JSXElementName<'a> { + fn serialize(&self, serializer: S) -> Result { + match self { + Self::Identifier(ident) => ident.serialize(serializer), + Self::IdentifierReference(ident) => { + JSXIdentifier { span: ident.span, name: ident.name.clone() }.serialize(serializer) + } + Self::NamespacedName(name) => name.serialize(serializer), + Self::MemberExpression(expr) => expr.serialize(serializer), + Self::ThisExpression(expr) => { + JSXIdentifier { span: expr.span, name: "this".into() }.serialize(serializer) + } + } + } +}