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)
+ }
+ }
+ }
+}