From 0d105212bc665be6411a6ce9d3a16bea57e2602c Mon Sep 17 00:00:00 2001 From: overlookmotel <557937+overlookmotel@users.noreply.github.com> Date: Thu, 19 Sep 2024 11:31:47 +0000 Subject: [PATCH] fix(ast): serialize `JSXMemberExpressionObject` to estree (#5883) Follow-on after #5882, part of #5354. Make JSON AST ESTree-compatible for: * `` * `` --- crates/oxc_ast/src/ast/jsx.rs | 2 +- crates/oxc_ast/src/serialize.rs | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/crates/oxc_ast/src/ast/jsx.rs b/crates/oxc_ast/src/ast/jsx.rs index 9007fa32a157d..d5dfee88beb0a 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 da9c99e67e07e..12b3b4fcfa8f3 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) + } + } + } +}