Skip to content

Commit 29f35b2

Browse files
committed
perf(formatter): reuse previous indent stack in FitsMeasurer (#15416)
As said in https://github.com/oxc-project/oxc/blob/60848996f81a4d9808a0b5788cc225f10e524971/crates/oxc_formatter/src/formatter/printer/mod.rs#L703-L708 These four stacks should be reused in each FitsMeasurer run to avoid reallocation, but `fits_indent_stack` and `fits_stack_tem_indent are lacking. <img width="1268" height="434" alt="image" src="https://github.com/user-attachments/assets/43aeb36e-4c34-4fc9-8786-c45e353386aa" />
1 parent 2c6bd9e commit 29f35b2

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

crates/oxc_formatter/src/formatter/printer/call_stack.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,10 @@ impl<'print> FitsIndentStack<'print> {
299299

300300
Self { indentions, history_indentions }
301301
}
302+
303+
pub(super) fn finish(self) -> (Vec<Indention>, Vec<Indention>) {
304+
(self.indentions.into_vec(), self.history_indentions.into_vec())
305+
}
302306
}
303307

304308
impl<'a> IndentStack for FitsIndentStack<'a> {

crates/oxc_formatter/src/formatter/printer/mod.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,6 +1203,12 @@ impl<'a, 'print> FitsMeasurer<'a, 'print> {
12031203
let mut stack = self.stack.finish();
12041204
stack.clear();
12051205
self.printer.state.fits_stack = stack;
1206+
1207+
let (mut indent_stack, mut history_stack) = self.indent_stack.finish();
1208+
indent_stack.clear();
1209+
self.printer.state.fits_indent_stack = indent_stack;
1210+
history_stack.clear();
1211+
self.printer.state.fits_stack_tem_indent = history_stack;
12061212
}
12071213

12081214
fn options(&self) -> &PrinterOptions {

0 commit comments

Comments
 (0)