Skip to content

Commit dc04dbc

Browse files
committed
refactor(ast/estree): simplify adding range field (#12005)
Follow-on after #11890. Simplify adding `range` field to ESTree AST. Most changes are to serialize `range` as `&[u32; 2]` instead of `&[&u32; 2]`.
1 parent b446a66 commit dc04dbc

File tree

4 files changed

+22
-24
lines changed

4 files changed

+22
-24
lines changed

crates/oxc_ast/src/serialize/js.rs

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -58,27 +58,30 @@ impl ESTree for BindingPatternKindAndTsFields<'_, '_> {
5858

5959
let mut state = serializer.serialize_struct();
6060

61-
match &self.kind {
61+
let span = match &self.kind {
6262
BindingPatternKind::BindingIdentifier(ident) => {
6363
state.serialize_field("type", &JsonSafeString("Identifier"));
6464
state.serialize_field("start", &ident.span.start);
6565
state.serialize_field("end", &ident.span.end);
6666
state.serialize_field("decorators", &self.decorators);
6767
state.serialize_field("name", &JsonSafeString(ident.name.as_str()));
68+
ident.span
6869
}
6970
BindingPatternKind::ObjectPattern(object) => {
7071
state.serialize_field("type", &JsonSafeString("ObjectPattern"));
7172
state.serialize_field("start", &object.span.start);
7273
state.serialize_field("end", &object.span.end);
7374
state.serialize_field("decorators", &self.decorators);
7475
state.serialize_field("properties", &Concat2(&object.properties, &object.rest));
76+
object.span
7577
}
7678
BindingPatternKind::ArrayPattern(array) => {
7779
state.serialize_field("type", &JsonSafeString("ArrayPattern"));
7880
state.serialize_field("start", &array.span.start);
7981
state.serialize_field("end", &array.span.end);
8082
state.serialize_field("decorators", &self.decorators);
8183
state.serialize_field("elements", &Concat2(&array.elements, &array.rest));
84+
array.span
8285
}
8386
BindingPatternKind::AssignmentPattern(assignment) => {
8487
state.serialize_field("type", &JsonSafeString("AssignmentPattern"));
@@ -87,22 +90,15 @@ impl ESTree for BindingPatternKindAndTsFields<'_, '_> {
8790
state.serialize_field("decorators", &self.decorators);
8891
state.serialize_field("left", &assignment.left);
8992
state.serialize_field("right", &assignment.right);
93+
assignment.span
9094
}
91-
}
95+
};
9296

9397
state.serialize_field("optional", &self.optional);
9498
state.serialize_field("typeAnnotation", &self.type_annotation);
9599

96100
if ranges {
97-
let (span_start, span_end) = match &self.kind {
98-
BindingPatternKind::BindingIdentifier(ident) => (ident.span.start, ident.span.end),
99-
BindingPatternKind::ObjectPattern(object) => (object.span.start, object.span.end),
100-
BindingPatternKind::ArrayPattern(array) => (array.span.start, array.span.end),
101-
BindingPatternKind::AssignmentPattern(assignment) => {
102-
(assignment.span.start, assignment.span.end)
103-
}
104-
};
105-
state.serialize_field("range", &[&span_start, &span_end]);
101+
state.serialize_field("range", &[span.start, span.end]);
106102
}
107103

108104
state.end();
@@ -190,7 +186,7 @@ impl ESTree for FormalParametersRest<'_, '_> {
190186
state.serialize_ts_field("typeAnnotation", &rest.argument.type_annotation);
191187
state.serialize_ts_field("value", &Null(()));
192188
if ranges {
193-
state.serialize_field("range", &[&rest.span.start, &rest.span.end]);
189+
state.serialize_field("range", &[rest.span.start, rest.span.end]);
194190
}
195191
state.end();
196192
}
@@ -256,7 +252,7 @@ impl ESTree for FormalParameterConverter<'_, '_> {
256252
state.serialize_field("readonly", &param.readonly);
257253
state.serialize_field("static", &false);
258254
if ranges {
259-
state.serialize_field("range", &[&param.span.start, &param.span.end]);
255+
state.serialize_field("range", &[param.span.start, param.span.end]);
260256
}
261257
state.end();
262258
} else {
@@ -459,9 +455,9 @@ pub struct AssignmentTargetPropertyIdentifierInit<'a>(
459455

460456
impl ESTree for AssignmentTargetPropertyIdentifierInit<'_> {
461457
fn serialize<S: Serializer>(&self, serializer: S) {
462-
let ranges = serializer.ranges();
463-
464458
if let Some(init) = &self.0.init {
459+
let ranges = serializer.ranges();
460+
465461
let mut state = serializer.serialize_struct();
466462
state.serialize_field("type", &JsonSafeString("AssignmentPattern"));
467463
state.serialize_field("start", &self.0.span.start);
@@ -472,7 +468,7 @@ impl ESTree for AssignmentTargetPropertyIdentifierInit<'_> {
472468
state.serialize_ts_field("optional", &false);
473469
state.serialize_ts_field("typeAnnotation", &Null(()));
474470
if ranges {
475-
state.serialize_field("range", &[&self.0.span.start, &self.0.span.end]);
471+
state.serialize_field("range", &[self.0.span.start, self.0.span.end]);
476472
}
477473
state.end();
478474
} else {

crates/oxc_ast/src/serialize/jsx.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,7 @@ impl ESTree for JSXElementOpeningElement<'_, '_> {
3333
state.serialize_field("attributes", &opening_element.attributes);
3434
state.serialize_field("selfClosing", &element.closing_element.is_none());
3535
if ranges {
36-
state.serialize_field(
37-
"range",
38-
&[&opening_element.span.start, &opening_element.span.end],
39-
);
36+
state.serialize_field("range", &[opening_element.span.start, opening_element.span.end]);
4037
}
4138
state.end();
4239
}

crates/oxc_ast/src/serialize/literal.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,11 @@ impl ESTree for TemplateElementConverter<'_, '_> {
223223

224224
state.serialize_field("value", &TemplateElementValue(element));
225225
state.serialize_field("tail", &element.tail);
226+
226227
if ranges {
227-
state.serialize_field("range", &[&span.start, &span.end]);
228+
state.serialize_field("range", &[span.start, span.end]);
228229
}
230+
229231
state.end();
230232
}
231233
}

crates/oxc_ast/src/serialize/ts.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,11 @@ impl ESTree for TSModuleDeclarationIdParts<'_, '_> {
187187
}
188188

189189
state.serialize_field("right", last);
190+
190191
if ranges {
191-
state.serialize_field("range", &[&span_start, &last.span.end]);
192+
state.serialize_field("range", &[span_start, last.span.end]);
192193
}
194+
193195
state.end();
194196
}
195197
}
@@ -339,12 +341,13 @@ struct TSTypeNameAsMemberExpression<'a, 'b>(&'b TSTypeName<'a>);
339341

340342
impl ESTree for TSTypeNameAsMemberExpression<'_, '_> {
341343
fn serialize<S: Serializer>(&self, serializer: S) {
342-
let ranges = serializer.ranges();
343344
match self.0 {
344345
TSTypeName::IdentifierReference(ident) => {
345346
TSTypeNameIdentifierReference(ident).serialize(serializer);
346347
}
347348
TSTypeName::QualifiedName(name) => {
349+
let ranges = serializer.ranges();
350+
348351
// Convert to `TSQualifiedName` to `MemberExpression`.
349352
// Recursively convert `left` to `MemberExpression` too if it's a `TSQualifiedName`.
350353
let mut state = serializer.serialize_struct();
@@ -356,7 +359,7 @@ impl ESTree for TSTypeNameAsMemberExpression<'_, '_> {
356359
state.serialize_field("optional", &false);
357360
state.serialize_field("computed", &false);
358361
if ranges {
359-
state.serialize_field("range", &[&name.span.start, &name.span.end]);
362+
state.serialize_field("range", &[name.span.start, name.span.end]);
360363
}
361364
state.end();
362365
}

0 commit comments

Comments
 (0)