Skip to content

Commit 1347d1b

Browse files
committed
refactor(fmt): Cleanup and add timing
1 parent 0e9a503 commit 1347d1b

File tree

1 file changed

+32
-17
lines changed

1 file changed

+32
-17
lines changed

src/format.rs

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use {
77
ignore::Walk,
88
itertools::Itertools,
99
ropey::Rope,
10-
std::path::PathBuf,
10+
std::{path::PathBuf, time::Instant},
1111
thiserror::Error,
1212
tree_sitter::Node,
1313
};
@@ -232,6 +232,7 @@ enum LineEnding {
232232
}
233233

234234
pub fn format(node: Node, rope: &Rope, config: Config) -> Result<String, FormatError> {
235+
let start = Instant::now();
235236
let line_ending = rope
236237
.chars()
237238
.tuple_windows()
@@ -244,13 +245,20 @@ pub fn format(node: Node, rope: &Rope, config: Config) -> Result<String, FormatE
244245
})
245246
.unwrap_or(LineEnding::Lf);
246247

247-
Ok(utils::remove_indent_prefix(&traverse(
248+
let formatted = utils::remove_indent_prefix(&traverse(
248249
node,
249250
rope,
250251
line_ending,
251252
config,
252253
State::default(),
253-
)?))
254+
)?);
255+
256+
log::debug!(
257+
"formatted {} lines in {} ms",
258+
rope.len_lines(),
259+
start.elapsed().as_millis()
260+
);
261+
Ok(formatted)
254262
}
255263

256264
#[derive(Debug, Clone, Copy, Default)]
@@ -417,9 +425,10 @@ fn traverse(
417425
}
418426
}
419427
"arguments" => {
428+
handles_comments = true;
429+
420430
check(field(node, "open")?)?;
421431
check(field(node, "close")?)?;
422-
handles_comments = true;
423432
let is_multiline = !same_line(node, node);
424433

425434
let mut prev_sibling = None;
@@ -514,6 +523,7 @@ fn traverse(
514523
}
515524
"binary_operator" => {
516525
handles_comments = true;
526+
517527
let lhs = field(node, "lhs")?;
518528
let operator = field(node, "operator")?;
519529
let rhs = field(node, "rhs")?;
@@ -563,13 +573,14 @@ fn traverse(
563573
)
564574
}
565575
"braced_expression" => {
576+
handles_comments = true;
577+
566578
check(field(node, "open")?)?;
567579
check(field(node, "close")?)?;
568-
handles_comments = true;
569580
let mut cursor = node.walk();
570581
let is_multiline = !same_line(node, node);
571582

572-
let mut prev_end = None;
583+
let mut maybe_prev_end = None;
573584
let mut fmt_skip = false;
574585
let lines = node
575586
.children(&mut cursor)
@@ -590,13 +601,13 @@ fn traverse(
590601
fmt(child)?
591602
};
592603
if is_fmt_skip_comment(&child)
593-
&& prev_end
604+
&& maybe_prev_end
594605
.map(|prev_end| child.start_position().row > prev_end)
595606
.unwrap_or(true)
596607
{
597608
fmt_skip = true;
598609
}
599-
let result = match prev_end {
610+
let result = match maybe_prev_end {
600611
Some(prev_end)
601612
if child.kind() == "comment"
602613
&& prev_end == child.start_position().row =>
@@ -620,7 +631,7 @@ fn traverse(
620631
}
621632
None => line,
622633
};
623-
prev_end = Some(end_position(child).row);
634+
maybe_prev_end = Some(end_position(child).row);
624635
Ok(result)
625636
})
626637
.collect::<Result<String, FormatError>>()?;
@@ -683,6 +694,7 @@ fn traverse(
683694
"complex" => fmt_raw(node),
684695
"extract_operator" => {
685696
handles_comments = true;
697+
686698
let lhs = field(node, "lhs")?;
687699
let operator = field(node, "operator")?;
688700
let maybe_rhs = field_optional(node, "rhs");
@@ -728,6 +740,7 @@ fn traverse(
728740
"float" => fmt_raw(node),
729741
"for_statement" => {
730742
handles_comments = true;
743+
731744
let condition_is_multiline = !same_line(field(node, "open")?, field(node, "close")?);
732745
let loop_header_is_multiline =
733746
!same_line(field(node, "variable")?, field(node, "sequence")?);
@@ -863,6 +876,7 @@ fn traverse(
863876
}
864877
"if_statement" => {
865878
handles_comments = true;
879+
866880
let is_multiline = state.make_multiline || !same_line(node, node);
867881
let condition_is_multiline = !same_line(field(node, "open")?, field(node, "close")?);
868882

@@ -981,6 +995,7 @@ fn traverse(
981995
}
982996
"parameters" => {
983997
handles_comments = true;
998+
984999
let is_multiline = !same_line(node, node);
9851000

9861001
let mut prev_sibling = None;
@@ -1063,11 +1078,10 @@ fn traverse(
10631078
}
10641079
"parenthesized_expression" => {
10651080
handles_comments = true;
1066-
let mut cursor = node.walk();
10671081

10681082
let mut prev_end = None;
10691083
let lines = node
1070-
.children(&mut cursor)
1084+
.children(&mut node.walk())
10711085
.skip(1)
10721086
.take(node.child_count() - 2)
10731087
.map(|child| {
@@ -1109,10 +1123,10 @@ fn traverse(
11091123
}
11101124
"program" => {
11111125
handles_comments = true;
1112-
let mut cursor = node.walk();
1113-
let mut prev_end = None;
1126+
1127+
let mut maybe_prev_end = None;
11141128
let mut fmt_skip = false;
1115-
node.children(&mut cursor)
1129+
node.children(&mut node.walk())
11161130
.map(|child| {
11171131
if child
11181132
.next_sibling()
@@ -1128,13 +1142,13 @@ fn traverse(
11281142
fmt(child)?
11291143
};
11301144
if is_fmt_skip_comment(&child)
1131-
&& prev_end
1145+
&& maybe_prev_end
11321146
.map(|prev_end| child.start_position().row > prev_end)
11331147
.unwrap_or(true)
11341148
{
11351149
fmt_skip = true;
11361150
}
1137-
let result = match prev_end {
1151+
let result = match maybe_prev_end {
11381152
Some(prev_end)
11391153
if child.kind() == "comment" && prev_end == end_position(child).row =>
11401154
{
@@ -1153,7 +1167,7 @@ fn traverse(
11531167
}
11541168
None => line,
11551169
};
1156-
prev_end = Some(end_position(child).row);
1170+
maybe_prev_end = Some(end_position(child).row);
11571171
Ok(result)
11581172
})
11591173
.chain(std::iter::once(Ok(line_ending.into())))
@@ -1265,6 +1279,7 @@ fn traverse(
12651279
}
12661280
"while_statement" => {
12671281
handles_comments = true;
1282+
12681283
let condition_is_multiline = !same_line(field(node, "open")?, field(node, "close")?);
12691284

12701285
let mut out = String::with_capacity(node.end_byte() - node.start_byte());

0 commit comments

Comments
 (0)