Skip to content

Commit a64c3e4

Browse files
authored
perf: make get_generated_source_info count by lines (#100)
* perf * remove no inline * split fast path and slow path
1 parent 760df79 commit a64c3e4

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed

src/helpers.rs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -498,22 +498,20 @@ pub fn split_into_lines(source: &str) -> Vec<&str> {
498498
}
499499

500500
pub fn get_generated_source_info(source: &str) -> GeneratedInfo {
501-
let last_line_start = source.rfind('\n');
502-
if let Some(last_line_start) = last_line_start {
503-
let mut generated_line = 2;
504-
source[0..last_line_start].chars().for_each(|c| {
505-
if c == '\n' {
506-
generated_line += 1;
507-
}
508-
});
509-
return GeneratedInfo {
510-
generated_line,
511-
generated_column: (source.len() - last_line_start - 1) as u32,
512-
};
513-
}
501+
let (generated_line, generated_column) = if source.ends_with('\n') {
502+
(split(source, b'\n').count() + 1, 0)
503+
} else {
504+
let mut line_count = 0;
505+
let mut last_line = "";
506+
for line in split(source, b'\n') {
507+
line_count += 1;
508+
last_line = line;
509+
}
510+
(line_count.max(1), last_line.len())
511+
};
514512
GeneratedInfo {
515-
generated_line: 1,
516-
generated_column: source.len() as u32,
513+
generated_line: generated_line as u32,
514+
generated_column: generated_column as u32,
517515
}
518516
}
519517

0 commit comments

Comments
 (0)