Skip to content

Commit acf69fa

Browse files
committed
refactor(ast): refactor custom Serialize impls (#3859)
Store `&[T]` instead of `&Vec<'a, T>` in temp structures in custom `Serialize` impls. Slightly cleaner and removes some lifetimes.
1 parent 063cfde commit acf69fa

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

crates/oxc_ast/src/serialize.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use oxc_allocator::{Box, Vec};
1+
use oxc_allocator::Box;
22
use oxc_span::Span;
33
use serde::{
44
ser::{SerializeSeq, Serializer},
@@ -80,7 +80,7 @@ struct SerArrayAssignmentTarget<'a, 'b> {
8080
#[serde(flatten)]
8181
span: Span,
8282
elements:
83-
ElementsAndRest<'a, 'b, Option<AssignmentTargetMaybeDefault<'a>>, AssignmentTargetRest<'a>>,
83+
ElementsAndRest<'b, Option<AssignmentTargetMaybeDefault<'a>>, AssignmentTargetRest<'a>>,
8484
}
8585

8686
impl<'a> Serialize for ObjectAssignmentTarget<'a> {
@@ -98,7 +98,7 @@ impl<'a> Serialize for ObjectAssignmentTarget<'a> {
9898
struct SerObjectAssignmentTarget<'a, 'b> {
9999
#[serde(flatten)]
100100
span: Span,
101-
properties: ElementsAndRest<'a, 'b, AssignmentTargetProperty<'a>, AssignmentTargetRest<'a>>,
101+
properties: ElementsAndRest<'b, AssignmentTargetProperty<'a>, AssignmentTargetRest<'a>>,
102102
}
103103

104104
impl<'a> Serialize for ObjectPattern<'a> {
@@ -116,7 +116,7 @@ impl<'a> Serialize for ObjectPattern<'a> {
116116
struct SerObjectPattern<'a, 'b> {
117117
#[serde(flatten)]
118118
span: Span,
119-
properties: ElementsAndRest<'a, 'b, BindingProperty<'a>, Box<'a, BindingRestElement<'a>>>,
119+
properties: ElementsAndRest<'b, BindingProperty<'a>, Box<'a, BindingRestElement<'a>>>,
120120
}
121121

122122
impl<'a> Serialize for ArrayPattern<'a> {
@@ -134,7 +134,7 @@ impl<'a> Serialize for ArrayPattern<'a> {
134134
struct SerArrayPattern<'a, 'b> {
135135
#[serde(flatten)]
136136
span: Span,
137-
elements: ElementsAndRest<'a, 'b, Option<BindingPattern<'a>>, Box<'a, BindingRestElement<'a>>>,
137+
elements: ElementsAndRest<'b, Option<BindingPattern<'a>>, Box<'a, BindingRestElement<'a>>>,
138138
}
139139

140140
/// Serialize `FormalParameters`, to be estree compatible, with `items` and `rest` fields combined
@@ -162,7 +162,7 @@ struct SerFormalParameters<'a, 'b> {
162162
#[serde(flatten)]
163163
span: Span,
164164
kind: FormalParameterKind,
165-
items: ElementsAndRest<'a, 'b, FormalParameter<'a>, SerFormalParameterRest<'a, 'b>>,
165+
items: ElementsAndRest<'b, FormalParameter<'a>, SerFormalParameterRest<'a, 'b>>,
166166
}
167167

168168
#[derive(Serialize)]
@@ -175,18 +175,18 @@ struct SerFormalParameterRest<'a, 'b> {
175175
optional: bool,
176176
}
177177

178-
pub struct ElementsAndRest<'a, 'b, E, R> {
179-
elements: &'b Vec<'a, E>,
178+
pub struct ElementsAndRest<'b, E, R> {
179+
elements: &'b [E],
180180
rest: &'b Option<R>,
181181
}
182182

183-
impl<'a, 'b, E, R> ElementsAndRest<'a, 'b, E, R> {
184-
pub fn new(elements: &'b Vec<'a, E>, rest: &'b Option<R>) -> Self {
183+
impl<'b, E, R> ElementsAndRest<'b, E, R> {
184+
pub fn new(elements: &'b [E], rest: &'b Option<R>) -> Self {
185185
Self { elements, rest }
186186
}
187187
}
188188

189-
impl<'a, 'b, E: Serialize, R: Serialize> Serialize for ElementsAndRest<'a, 'b, E, R> {
189+
impl<'b, E: Serialize, R: Serialize> Serialize for ElementsAndRest<'b, E, R> {
190190
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
191191
if let Some(rest) = self.rest {
192192
let mut seq = serializer.serialize_seq(Some(self.elements.len() + 1))?;

0 commit comments

Comments
 (0)