summaryrefslogtreecommitdiffstats
path: root/src/edits.rs
diff options
context:
space:
mode:
authorDan Davison <dandavison7@gmail.com>2019-07-17 22:09:53 -0400
committerDan Davison <dandavison7@gmail.com>2019-07-17 22:09:53 -0400
commit6705228e661250cb3a229954c750a95ce1ffa982 (patch)
tree792091bfc9ec396b34d74509e9f53f1c33ff651a /src/edits.rs
parentb6cef9a800e653b3ac079929b848f96b41203d3e (diff)
Make edit inference less naive
Diffstat (limited to 'src/edits.rs')
-rw-r--r--src/edits.rs61
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::*;