diff options
author | tummychow <tummychow@users.noreply.github.com> | 2020-11-02 18:52:40 -0800 |
---|---|---|
committer | tummychow <tummychow@users.noreply.github.com> | 2020-11-02 18:56:56 -0800 |
commit | e02847e7abdf4028623b6776216e26d487584168 (patch) | |
tree | 7dceef3143e02f640d1bb1a8016d548849f71745 | |
parent | faea70b1aef26d6161260391345f7895a601b943 (diff) |
fix new clippy if_same_then_else
-rw-r--r-- | src/commute.rs | 51 |
1 files changed, 40 insertions, 11 deletions
diff --git a/src/commute.rs b/src/commute.rs index 3b8ca63..6009130 100644 --- a/src/commute.rs +++ b/src/commute.rs @@ -34,18 +34,14 @@ pub fn commute(first: &owned::Hunk, second: &owned::Hunk) -> Option<(owned::Hunk // repeated, then they commute no matter what their // offsets are, because they can be interleaved in any // order without changing the final result - if first.added.lines.is_empty() + if (first.added.lines.is_empty() && second.added.lines.is_empty() - && uniform(first.removed.lines.iter().chain(&*second.removed.lines)) + && uniform(first.removed.lines.iter().chain(&*second.removed.lines))) + || (first.removed.lines.is_empty() + && second.removed.lines.is_empty() + && uniform(first.added.lines.iter().chain(&*second.added.lines))) { - // TODO: removed start positions probably need to be - // tweaked here - return Some((second.clone(), first.clone())); - } else if first.removed.lines.is_empty() - && second.removed.lines.is_empty() - && uniform(first.added.lines.iter().chain(&*second.added.lines)) - { - // TODO: added start positions probably need to be + // TODO: removed/added start positions probably need to be // tweaked here return Some((second.clone(), first.clone())); } @@ -138,7 +134,7 @@ mod tests { } #[test] - fn test_commute_interleave() { + fn test_commute_trivial_add() { let mut line = ::std::iter::repeat(b"bar\n".to_vec()); let hunk1 = owned::Hunk { added: owned::Block { @@ -171,6 +167,39 @@ mod tests { } #[test] + fn test_commute_trivial_remove() { + let mut line = ::std::iter::repeat(b"bar\n".to_vec()); + let hunk1 = owned::Hunk { + added: owned::Block { + start: 1, + lines: Rc::new(vec![]), + trailing_newline: true, + }, + removed: owned::Block { + start: 4, + lines: Rc::new((&mut line).take(4).collect::<Vec<_>>()), + trailing_newline: true, + }, + }; + let hunk2 = owned::Hunk { + added: owned::Block { + start: 1, + lines: Rc::new(vec![]), + trailing_newline: true, + }, + removed: owned::Block { + start: 2, + lines: Rc::new((&mut line).take(2).collect::<Vec<_>>()), + trailing_newline: true, + }, + }; + + let (new1, new2) = commute(&hunk1, &hunk2).unwrap(); + assert_eq!(new1.removed.lines.len(), 2); + assert_eq!(new2.removed.lines.len(), 4); + } + + #[test] fn test_commute_patch() { // example init: <<EOF // foo |