summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Davison <dandavison7@gmail.com>2023-05-24 20:07:34 -0400
committerDan Davison <dandavison7@gmail.com>2023-05-24 22:31:21 -0400
commit17124c74271232448ed38b066d5b00c6471fb047 (patch)
treecbfc9649c9774ec0f0e5e543de0a76a9d2dd686b
parent17686fe632aef409f5b3cf4235885729aa8f745e (diff)
Performance tweaksarchitecture-doc
-rw-r--r--src/edits.rs21
-rw-r--r--src/handlers/hunk.rs8
2 files changed, 23 insertions, 6 deletions
diff --git a/src/edits.rs b/src/edits.rs
index b6e1ad9f..d571f2d2 100644
--- a/src/edits.rs
+++ b/src/edits.rs
@@ -43,15 +43,28 @@ where
let mut annotated_plus_lines = Vec::<Vec<(EditOperation, &str)>>::new();
let mut line_alignment = Vec::<(Option<usize>, Option<usize>)>::new();
+ let tokenized_minus_lines = minus_lines
+ .iter()
+ .map(|line| tokenize(line, tokenization_regex));
+
+ let tokenized_plus_lines: Vec<Vec<&str>> = plus_lines
+ .iter()
+ .map(|line| tokenize(line, tokenization_regex))
+ .collect();
+
let mut plus_index = 0; // plus lines emitted so far
- 'minus_lines_loop: for (minus_index, minus_line) in minus_lines.iter().enumerate() {
+ 'minus_lines_loop: for ((minus_index, minus_line), tokenized_minus_line) in
+ minus_lines.iter().enumerate().zip(tokenized_minus_lines)
+ {
let mut considered = 0; // plus lines considered so far as match for minus_line
- for plus_line in &plus_lines[plus_index..] {
+ for (plus_offset, plus_line) in plus_lines[plus_index..].iter().enumerate() {
+ // Compute edit operations transforming minus line into plus line
let alignment = align::Alignment::new(
- tokenize(minus_line, tokenization_regex),
- tokenize(plus_line, tokenization_regex),
+ tokenized_minus_line.clone(),
+ tokenized_plus_lines[plus_index + plus_offset].clone(),
);
+ // Use edit operations to annotate minus and plus line
let (annotated_minus_line, annotated_plus_line, distance) = annotate(
alignment,
noop_deletions[minus_index],
diff --git a/src/handlers/hunk.rs b/src/handlers/hunk.rs
index b5c777c2..2b1d075a 100644
--- a/src/handlers/hunk.rs
+++ b/src/handlers/hunk.rs
@@ -75,8 +75,12 @@ impl<'a> StateMachine<'a> {
{
self.painter.paint_buffered_minus_and_plus_lines();
}
- if let State::HunkHeader(_, parsed_hunk_header, line, raw_line) = &self.state.clone() {
- self.emit_hunk_header_line(parsed_hunk_header, line, raw_line)?;
+ if let State::HunkHeader(_, parsed_hunk_header, line, raw_line) = &self.state {
+ self.emit_hunk_header_line(
+ &parsed_hunk_header.clone(),
+ &line.clone(),
+ &raw_line.clone(),
+ )?;
}
self.state = match new_line_state(&self.line, &self.raw_line, &self.state, self.config) {
Some(HunkMinus(diff_type, raw_line)) => {