Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions crates/oxc_ast/src/serialize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ use cow_utils::CowUtils;

use oxc_ast_macros::ast_meta;
use oxc_estree::{
CompactJSSerializer, CompactTSSerializer, ESTree, JsonSafeString, PrettyJSSerializer,
PrettyTSSerializer, SequenceSerializer, Serializer, StructSerializer,
CompactJSSerializer, CompactTSSerializer, ESTree, EmptyArray, JsonSafeString,
PrettyJSSerializer, PrettyTSSerializer, SequenceSerializer, Serializer, StructSerializer,
};

use crate::ast::*;
Expand Down Expand Up @@ -157,7 +157,7 @@ pub struct TsEmptyArray<'b, T>(#[expect(dead_code)] pub &'b T);

impl<T> ESTree for TsEmptyArray<'_, T> {
fn serialize<S: Serializer>(&self, serializer: S) {
[(); 0].serialize(serializer);
EmptyArray.serialize(serializer);
}
}

Expand Down Expand Up @@ -378,7 +378,7 @@ impl ESTree for ImportDeclarationSpecifiers<'_, '_> {
if let Some(specifiers) = &self.0.specifiers {
specifiers.serialize(serializer);
} else {
[(); 0].serialize(serializer);
EmptyArray.serialize(serializer);
}
}
}
Expand Down Expand Up @@ -493,7 +493,7 @@ impl ESTree for ImportDeclarationWithClause<'_, '_> {
if let Some(with_clause) = &self.0.with_clause {
with_clause.with_entries.serialize(serializer);
} else {
[(); 0].serialize(serializer);
EmptyArray.serialize(serializer);
}
}
}
Expand All @@ -513,7 +513,7 @@ impl ESTree for ExportNamedDeclarationWithClause<'_, '_> {
if let Some(with_clause) = &self.0.with_clause {
with_clause.with_entries.serialize(serializer);
} else {
[(); 0].serialize(serializer);
EmptyArray.serialize(serializer);
}
}
}
Expand All @@ -533,7 +533,7 @@ impl ESTree for ExportAllDeclarationWithClause<'_, '_> {
if let Some(with_clause) = &self.0.with_clause {
with_clause.with_entries.serialize(serializer);
} else {
[(); 0].serialize(serializer);
EmptyArray.serialize(serializer);
}
}
}
Expand All @@ -553,7 +553,7 @@ impl ESTree for ClassImplements<'_, '_> {
if let Some(implements) = &self.0.implements {
implements.serialize(serializer);
} else {
[(); 0].serialize(serializer);
EmptyArray.serialize(serializer);
}
}
}
Expand Down Expand Up @@ -606,7 +606,7 @@ pub struct JSXOpeningFragmentAttributes<'b>(#[expect(dead_code)] pub &'b JSXOpen

impl ESTree for JSXOpeningFragmentAttributes<'_> {
fn serialize<S: Serializer>(&self, serializer: S) {
[(); 0].serialize(serializer);
EmptyArray.serialize(serializer);
}
}

Expand Down
2 changes: 2 additions & 0 deletions crates/oxc_estree/src/serialize/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ mod config;
mod formatter;
mod primitives;
mod sequences;
mod special;
mod strings;
mod structs;
use config::{Config, ConfigJS, ConfigTS};
Expand All @@ -16,6 +17,7 @@ use sequences::ESTreeSequenceSerializer;
use structs::ESTreeStructSerializer;

pub use sequences::SequenceSerializer;
pub use special::EmptyArray;
pub use strings::JsonSafeString;
pub use structs::{FlatStructSerializer, StructSerializer};

Expand Down
12 changes: 12 additions & 0 deletions crates/oxc_estree/src/serialize/special.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
use super::{ESTree, Serializer};

/// Type that is output as `[]`.
///
/// Could alternatively serialize e.g. `[(); 0]`, but this is faster.
pub struct EmptyArray;

impl ESTree for EmptyArray {
fn serialize<S: Serializer>(&self, mut serializer: S) {
serializer.buffer_mut().print_str("[]");
}
}
Loading