diff options
author | Dan Davison <dandavison7@gmail.com> | 2019-07-17 22:09:53 -0400 |
---|---|---|
committer | Dan Davison <dandavison7@gmail.com> | 2019-07-17 22:09:53 -0400 |
commit | 6705228e661250cb3a229954c750a95ce1ffa982 (patch) | |
tree | 792091bfc9ec396b34d74509e9f53f1c33ff651a | |
parent | b6cef9a800e653b3ac079929b848f96b41203d3e (diff) |
Make edit inference less naive
-rw-r--r-- | src/edits.rs | 61 |
1 files changed, 45 insertions, 16 deletions
diff --git a/src/edits.rs b/src/edits.rs index 01b2f3ad..fc38a85c 100644 --- a/src/edits.rs +++ b/src/edits.rs @@ -70,26 +70,55 @@ pub fn get_diff_style_sections( min(minus_change_end, plus_change_end), ); - minus_line_sections.push(vec![ - (minus_style_modifier, minus[0..change_begin].to_string()), - ( - minus_emph_style_modifier, - minus[change_begin..minus_change_end].to_string(), - ), - (minus_style_modifier, minus[minus_change_end..].to_string()), - ]); - plus_line_sections.push(vec![ - (plus_style_modifier, plus[0..change_begin].to_string()), - ( - plus_emph_style_modifier, - plus[change_begin..plus_change_end].to_string(), - ), - (plus_style_modifier, plus[plus_change_end..].to_string()), - ]); + let minus_edit = Edit { + change_begin, + change_end: minus_change_end, + string_length: minus_length, + }; + let plus_edit = Edit { + change_begin, + change_end: plus_change_end, + string_length: plus_length, + }; + + if minus_edit.appears_genuine() && plus_edit.appears_genuine() { + minus_line_sections.push(vec![ + (minus_style_modifier, minus[0..change_begin].to_string()), + ( + minus_emph_style_modifier, + minus[change_begin..minus_change_end].to_string(), + ), + (minus_style_modifier, minus[minus_change_end..].to_string()), + ]); + plus_line_sections.push(vec![ + (plus_style_modifier, plus[0..change_begin].to_string()), + ( + plus_emph_style_modifier, + plus[change_begin..plus_change_end].to_string(), + ), + (plus_style_modifier, plus[plus_change_end..].to_string()), + ]); + } else { + minus_line_sections.push(vec![(minus_style_modifier, minus.to_string())]); + plus_line_sections.push(vec![(plus_style_modifier, plus.to_string())]); + } } (minus_line_sections, plus_line_sections) } +struct Edit { + change_begin: usize, + change_end: usize, + string_length: usize, +} + +impl Edit { + // TODO: exclude leading whitespace in this calculation + fn appears_genuine(&self) -> bool { + ((self.change_end - self.change_begin) as f64 / self.string_length as f64) < 0.66 + } +} + #[cfg(test)] mod tests { use super::*; |