mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 20:32:10 +00:00
fix(ast): serialize empty array elements as null (#2707)
Serialize `ArrayExpressionElement::Elision` variant as `null` in JSON AST, to align with ESTree.
This commit is contained in:
parent
0d7bc8f255
commit
c820a5b661
2 changed files with 18 additions and 5 deletions
|
|
@ -414,6 +414,7 @@ pub struct ThisExpression {
|
||||||
pub struct ArrayExpression<'a> {
|
pub struct ArrayExpression<'a> {
|
||||||
#[serde(flatten)]
|
#[serde(flatten)]
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
|
#[tsify(type = "Array<SpreadElement | Expression | null>")]
|
||||||
pub elements: Vec<'a, ArrayExpressionElement<'a>>,
|
pub elements: Vec<'a, ArrayExpressionElement<'a>>,
|
||||||
/// Array trailing comma
|
/// Array trailing comma
|
||||||
/// <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas#arrays>
|
/// <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas#arrays>
|
||||||
|
|
@ -423,13 +424,14 @@ pub struct ArrayExpression<'a> {
|
||||||
/// Array Expression Element
|
/// Array Expression Element
|
||||||
#[derive(Debug, Hash, SerAttrs)]
|
#[derive(Debug, Hash, SerAttrs)]
|
||||||
#[cfg_attr(feature = "serde", derive(Serialize))]
|
#[cfg_attr(feature = "serde", derive(Serialize))]
|
||||||
#[cfg_attr(feature = "wasm", derive(Tsify))]
|
|
||||||
#[serde(untagged)]
|
#[serde(untagged)]
|
||||||
pub enum ArrayExpressionElement<'a> {
|
pub enum ArrayExpressionElement<'a> {
|
||||||
SpreadElement(Box<'a, SpreadElement<'a>>),
|
SpreadElement(Box<'a, SpreadElement<'a>>),
|
||||||
Expression(Expression<'a>),
|
Expression(Expression<'a>),
|
||||||
/// Array hole for sparse arrays
|
/// Array hole for sparse arrays
|
||||||
/// <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas#arrays>
|
/// <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas#arrays>
|
||||||
|
// Serialize as `null`. `serialize_elision` in serialize.rs.
|
||||||
|
#[serde(serialize_with = "ArrayExpressionElement::serialize_elision")]
|
||||||
Elision(Span),
|
Elision(Span),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,10 @@ use serde::{
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::ast::{
|
use crate::ast::{
|
||||||
ArrayAssignmentTarget, ArrayPattern, AssignmentTargetMaybeDefault, AssignmentTargetProperty,
|
ArrayAssignmentTarget, ArrayExpressionElement, ArrayPattern, AssignmentTargetMaybeDefault,
|
||||||
AssignmentTargetRest, BindingPattern, BindingPatternKind, BindingProperty, BindingRestElement,
|
AssignmentTargetProperty, AssignmentTargetRest, BindingPattern, BindingPatternKind,
|
||||||
FormalParameter, FormalParameterKind, FormalParameters, ObjectAssignmentTarget, ObjectPattern,
|
BindingProperty, BindingRestElement, FormalParameter, FormalParameterKind, FormalParameters,
|
||||||
Program, RegExpFlags, TSTypeAnnotation,
|
ObjectAssignmentTarget, ObjectPattern, Program, RegExpFlags, TSTypeAnnotation,
|
||||||
};
|
};
|
||||||
use oxc_allocator::{Box, Vec};
|
use oxc_allocator::{Box, Vec};
|
||||||
use oxc_span::Span;
|
use oxc_span::Span;
|
||||||
|
|
@ -45,6 +45,17 @@ impl Serialize for RegExpFlags {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Serialize `ArrayExpressionElement::Elision` variant as `null` in JSON
|
||||||
|
impl<'a> ArrayExpressionElement<'a> {
|
||||||
|
#[allow(clippy::trivially_copy_pass_by_ref)]
|
||||||
|
pub(crate) fn serialize_elision<S: Serializer>(
|
||||||
|
_span: &Span,
|
||||||
|
serializer: S,
|
||||||
|
) -> Result<S::Ok, S::Error> {
|
||||||
|
serializer.serialize_none()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Serialize `ArrayAssignmentTarget`, `ObjectAssignmentTarget`, `ObjectPattern`, `ArrayPattern`
|
/// Serialize `ArrayAssignmentTarget`, `ObjectAssignmentTarget`, `ObjectPattern`, `ArrayPattern`
|
||||||
/// to be estree compatible, with `elements`/`properties` and `rest` fields combined.
|
/// to be estree compatible, with `elements`/`properties` and `rest` fields combined.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue