Skip to content

Commit d5d643d

Browse files
committed
refactor(formatter): simplify the use of FormatSeparatedIter
1 parent 8135bb2 commit d5d643d

File tree

8 files changed

+56
-50
lines changed

8 files changed

+56
-50
lines changed

crates/oxc_formatter/src/formatter/formatter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ impl<'buf, 'ast> Formatter<'buf, 'ast> {
131131
joiner: Joiner,
132132
) -> JoinBuilder<'fmt, 'buf, 'ast, Joiner>
133133
where
134-
Joiner: Format<'ast> + Copy,
134+
Joiner: Format<'ast>,
135135
{
136136
JoinBuilder::with_separator(self, joiner)
137137
}

crates/oxc_formatter/src/write/array_element_list.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,17 @@ impl<'a> Format<'a> for ArrayElementList<'a, '_> {
4646
let mut filler = f.fill();
4747

4848
// Using format_separated is valid in this case as can_print_fill does not allow holes
49-
for (element, formatted) in self.elements.iter().zip(
50-
FormatSeparatedIter::new(self.elements.iter(), ",")
51-
.with_trailing_separator(trailing_separator)
52-
.with_group_id(self.group_id),
53-
) {
49+
for (formatted) in FormatSeparatedIter::new(self.elements.iter(), ",")
50+
.with_trailing_separator(trailing_separator)
51+
.with_group_id(self.group_id)
52+
{
5453
filler.entry(
5554
&format_once(|f| {
56-
if get_lines_before(element.span(), f) > 1 {
55+
if get_lines_before(formatted.element.span(), f) > 1 {
5756
write!(f, empty_line())
5857
} else if f
5958
.comments()
60-
.has_leading_own_line_comments(element.span().start)
59+
.has_leading_own_line_comments(formatted.element.span().start)
6160
{
6261
write!(f, hard_line_break())
6362
} else {

crates/oxc_formatter/src/write/assignment_pattern_property_list.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@ enum AssignmentTargetPropertyListNode<'a, 'b> {
1414
Rest(&'b AstNode<'a, AssignmentTargetRest<'a>>),
1515
}
1616

17+
impl AssignmentTargetPropertyListNode<'_, '_> {
18+
pub fn span(&self) -> Span {
19+
match self {
20+
AssignmentTargetPropertyListNode::Property(property) => property.span(),
21+
AssignmentTargetPropertyListNode::Rest(rest) => rest.span(),
22+
}
23+
}
24+
}
25+
1726
impl<'a> Format<'a> for AssignmentTargetPropertyListNode<'a, '_> {
1827
fn fmt(&self, f: &mut Formatter<'_, 'a>) -> FormatResult<()> {
1928
match self {
@@ -70,13 +79,11 @@ impl<'a> Format<'a> for AssignmentTargetPropertyList<'a, '_> {
7079
},
7180
",",
7281
)
73-
.with_trailing_separator(trailing_separator)
74-
.zip(
75-
self.properties.as_ref().iter().map(GetSpan::span).chain(self.rest.map(GetSpan::span)),
76-
);
82+
.with_trailing_separator(trailing_separator);
83+
7784
let mut join = f.join_nodes_with_soft_line();
78-
for (entry, span) in entries {
79-
join.entry(span, &entry);
85+
for entry in entries {
86+
join.entry(entry.element.span(), &entry);
8087
}
8188

8289
join.finish()

crates/oxc_formatter/src/write/binding_property_list.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@ enum BindingPropertyListNode<'a, 'b> {
2222
Rest(&'b AstNode<'a, BindingRestElement<'a>>),
2323
}
2424

25+
impl BindingPropertyListNode<'_, '_> {
26+
pub fn span(&self) -> Span {
27+
match self {
28+
BindingPropertyListNode::Property(property) => property.span,
29+
BindingPropertyListNode::Rest(rest) => rest.span,
30+
}
31+
}
32+
}
33+
2534
impl<'a> Format<'a> for BindingPropertyListNode<'a, '_> {
2635
fn fmt(&self, f: &mut Formatter<'_, 'a>) -> FormatResult<()> {
2736
match self {
@@ -70,12 +79,11 @@ impl<'a> Format<'a> for BindingPropertyList<'a, '_> {
7079
BindingPropertyListIter { properties: self.properties.iter(), rest: self.rest },
7180
",",
7281
)
73-
.with_trailing_separator(trailing_separator)
74-
.zip(self.properties.iter().map(|p| p.span).chain(self.rest.map(|r| r.span)));
82+
.with_trailing_separator(trailing_separator);
7583

7684
let mut join = f.join_nodes_with_soft_line();
77-
for (entry, span) in entries {
78-
join.entry(span, &entry);
85+
for entry in entries {
86+
join.entry(entry.element.span(), &entry);
7987
}
8088

8189
join.finish()

crates/oxc_formatter/src/write/mod.rs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,10 @@ impl<'a> Format<'a> for AstNode<'a, Vec<'a, ObjectPropertyKind<'a>>> {
197197
let trailing_separator = FormatTrailingCommas::ES5.trailing_separator(f.options());
198198
let source_text = f.context().source_text();
199199
let mut join = f.join_nodes_with_soft_line();
200-
for (element, formatted) in self.iter().zip(
201-
FormatSeparatedIter::new(self.iter(), ",").with_trailing_separator(trailing_separator),
202-
) {
203-
join.entry(element.span(), &formatted);
200+
for formatted in
201+
FormatSeparatedIter::new(self.iter(), ",").with_trailing_separator(trailing_separator)
202+
{
203+
join.entry(formatted.element.span(), &formatted);
204204
}
205205
join.finish()
206206
}
@@ -1649,14 +1649,12 @@ impl<'a> FormatWrite<'a> for AstNode<'a, TSEnumBody<'a>> {
16491649
impl<'a> Format<'a> for AstNode<'a, Vec<'a, TSEnumMember<'a>>> {
16501650
fn fmt(&self, f: &mut Formatter<'_, 'a>) -> FormatResult<()> {
16511651
let trailing_separator = FormatTrailingCommas::ES5.trailing_separator(f.options());
1652-
let source_text = f.source_text();
16531652
let mut join = f.join_nodes_with_soft_line();
1654-
for (element, formatted) in self.iter().zip(
1655-
FormatSeparatedIter::new(self.iter(), ",")
1656-
.with_trailing_separator(trailing_separator)
1657-
.nodes_grouped(),
1658-
) {
1659-
join.entry(element.span(), &formatted);
1653+
for formatted in FormatSeparatedIter::new(self.iter(), ",")
1654+
.with_trailing_separator(trailing_separator)
1655+
.nodes_grouped()
1656+
{
1657+
join.entry(formatted.element.span(), &formatted);
16601658
}
16611659
join.finish()
16621660
}
@@ -2190,7 +2188,7 @@ impl<'a> FormatWrite<'a> for AstNode<'a, TSIndexSignatureName<'a>> {
21902188

21912189
impl<'a> Format<'a> for AstNode<'a, Vec<'a, TSInterfaceHeritage<'a>>> {
21922190
fn fmt(&self, f: &mut Formatter<'_, 'a>) -> FormatResult<()> {
2193-
f.join_with(&soft_line_break_or_space())
2191+
f.join_with(soft_line_break_or_space())
21942192
.entries(
21952193
FormatSeparatedIter::new(self.iter(), ",")
21962194
.with_trailing_separator(TrailingSeparator::Disallowed),

crates/oxc_formatter/src/write/parameter_list.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,11 @@ impl<'a> Format<'a> for ParameterList<'a, '_> {
121121
} else {
122122
f.join_nodes_with_soft_line()
123123
};
124-
let entries = FormatSeparatedIter::new(FormalParametersIter::from(self.list), ",")
125-
.with_trailing_separator(trailing_separator)
126-
.zip(FormalParametersIter::from(self.list));
127-
for (formatted, param) in entries {
128-
joiner.entry(param.span(), &formatted);
124+
for formatted in
125+
FormatSeparatedIter::new(FormalParametersIter::from(self.list), ",")
126+
.with_trailing_separator(trailing_separator)
127+
{
128+
joiner.entry(formatted.element.span(), &formatted);
129129
}
130130
joiner.finish()
131131
}

crates/oxc_formatter/src/write/type_parameters.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ impl<'a> Format<'a> for AstNode<'a, Vec<'a, TSTypeParameter<'a>>> {
3131
FormatTrailingCommas::ES5.trailing_separator(f.options())
3232
};
3333

34-
f.join_with(&soft_line_break_or_space())
34+
f.join_with(soft_line_break_or_space())
3535
.entries(
3636
FormatSeparatedIter::new(self.iter(), ",")
3737
.with_trailing_separator(trailing_separator),

crates/oxc_formatter/src/write/variable_declaration.rs

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,32 +62,26 @@ impl<'a> Format<'a> for AstNode<'a, Vec<'a, VariableDeclarator<'a>>> {
6262
}
6363
});
6464

65-
let mut declarators = self.iter().zip(
66-
FormatSeparatedIter::new(self.iter(), ",")
67-
.with_trailing_separator(TrailingSeparator::Disallowed),
68-
);
65+
let mut declarators = FormatSeparatedIter::new(self.iter(), ",")
66+
.with_trailing_separator(TrailingSeparator::Disallowed);
6967

70-
let (first_declarator_span, format_first_declarator) = match declarators.next() {
71-
Some((decl, format_first_declarator)) => (decl.span(), format_first_declarator),
72-
None => return Err(FormatError::SyntaxError),
73-
};
68+
// `VariableDeclaration` always has at least one declarator.
69+
let first_declarator = declarators.next().unwrap();
7470

75-
if length == 1 && !f.comments().has_comments_before(first_declarator_span.start) {
76-
return write!(f, format_first_declarator);
71+
if length == 1 && !f.comments().has_comments_before(first_declarator.element.span().start) {
72+
return write!(f, first_declarator);
7773
}
7874

7975
write!(
8076
f,
8177
indent(&format_once(|f| {
82-
write!(f, format_first_declarator)?;
78+
write!(f, first_declarator)?;
8379

8480
if length > 1 {
8581
write!(f, format_separator)?;
8682
}
8783

88-
f.join_with(&format_separator)
89-
.entries(declarators.map(|(_, format)| format))
90-
.finish()
84+
f.join_with(format_separator).entries(declarators).finish()
9185
}))
9286
)
9387
}

0 commit comments

Comments
 (0)