Skip to content

Commit 03bf15b

Browse files
committed
improve clean_interned
1 parent 6b733ea commit 03bf15b

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

crates/oxc_formatter/src/formatter/buffer.rs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ impl<'buf, 'ast> RemoveSoftLinesBuffer<'buf, 'ast> {
496496
}
497497

498498
/// Removes the soft line breaks from an interned element.
499-
fn clean_interned(&mut self, interned: &Interned<'ast>) -> Interned<'ast> {
499+
fn clean_interned(&mut self, interned: Interned<'ast>) -> Interned<'ast> {
500500
clean_interned(
501501
interned,
502502
&mut self.interned_cache,
@@ -517,12 +517,12 @@ impl<'buf, 'ast> RemoveSoftLinesBuffer<'buf, 'ast> {
517517

518518
// Extracted to function to avoid monomorphization
519519
fn clean_interned<'ast>(
520-
interned: &Interned<'ast>,
520+
interned: Interned<'ast>,
521521
interned_cache: &mut FxHashMap<Interned<'ast>, Interned<'ast>>,
522522
condition_content_stack: &mut Vec<Condition>,
523523
allocator: &'ast Allocator,
524524
) -> Interned<'ast> {
525-
if let Some(cleaned) = interned_cache.get(interned) {
525+
if let Some(cleaned) = interned_cache.get(&interned) {
526526
cleaned.clone()
527527
} else {
528528
// Find the first soft line break element, interned element, or conditional expanded
@@ -538,8 +538,12 @@ fn clean_interned<'ast>(
538538
Some((cleaned, &interned[index..]))
539539
}
540540
FormatElement::Interned(inner) => {
541-
let cleaned_inner =
542-
clean_interned(inner, interned_cache, condition_content_stack, allocator);
541+
let cleaned_inner = clean_interned(
542+
inner.clone(),
543+
interned_cache,
544+
condition_content_stack,
545+
allocator,
546+
);
543547

544548
if &cleaned_inner == inner {
545549
None
@@ -580,7 +584,7 @@ fn clean_interned<'ast>(
580584

581585
FormatElement::Interned(interned) => {
582586
cleaned.push(FormatElement::Interned(clean_interned(
583-
interned,
587+
interned.clone(),
584588
interned_cache,
585589
condition_content_stack,
586590
allocator,
@@ -596,21 +600,20 @@ fn clean_interned<'ast>(
596600
}
597601
}
598602

599-
Interned::new(ArenaVec::from_iter_in(cleaned, allocator))
603+
Interned::new(cleaned)
600604
}
601605
// No change necessary, return existing interned element
602606
None => interned.clone(),
603607
};
604608

605-
interned_cache.insert(interned.clone(), result.clone());
609+
interned_cache.insert(interned, result.clone());
606610
result
607611
}
608612
}
609613

610614
impl<'ast> Buffer<'ast> for RemoveSoftLinesBuffer<'_, 'ast> {
611615
fn write_element(&mut self, element: FormatElement<'ast>) -> FormatResult<()> {
612-
let mut element_stack = Vec::new();
613-
element_stack.push(element);
616+
let mut element_stack = Vec::from_iter([element]);
614617
while let Some(element) = element_stack.pop() {
615618
match element {
616619
FormatElement::Tag(Tag::StartConditionalContent(condition)) => {
@@ -628,14 +631,14 @@ impl<'ast> Buffer<'ast> for RemoveSoftLinesBuffer<'_, 'ast> {
628631
self.inner.write_element(FormatElement::Space)?;
629632
}
630633
FormatElement::Interned(interned) => {
631-
let cleaned = self.clean_interned(&interned);
634+
let cleaned = self.clean_interned(interned);
632635
self.inner.write_element(FormatElement::Interned(cleaned))?;
633636
}
634637
// Since this buffer aims to simulate infinite print width, we don't need to retain the best fitting.
635638
// Just extract the flattest variant and then handle elements within it.
636639
FormatElement::BestFitting(best_fitting) => {
637640
let most_flat = best_fitting.most_flat();
638-
most_flat.iter().rev().for_each(|element| element_stack.push(element.clone()));
641+
element_stack.extend(most_flat.iter().rev().cloned());
639642
}
640643
element => self.inner.write_element(element)?,
641644
}

0 commit comments

Comments
 (0)