diff --git a/src/diff.rs b/src/diff.rs index caf3e05..63fe612 100644 --- a/src/diff.rs +++ b/src/diff.rs @@ -15,29 +15,33 @@ pub fn render(&Changeset { ref diffs, .. }: &Changeset) -> Result { - match diffs[i - 1] { - Difference::Rem(ref y) => { - write!(t, "{}", "+".green())?; - let Changeset { diffs, .. } = Changeset::new(y, x, " "); - for c in diffs { - match c { - Difference::Same(ref z) if !z.is_empty() => { - write!(t, "{}", z.green())?; - write!(t, " ")?; + if i == 0 { + writeln!(t, "{}", format!("+{}", x).green())?; + } else { + match diffs[i - 1] { + Difference::Rem(ref y) => { + write!(t, "{}", "+".green())?; + let Changeset { diffs, .. } = Changeset::new(y, x, " "); + for c in diffs { + match c { + Difference::Same(ref z) if !z.is_empty() => { + write!(t, "{}", z.green())?; + write!(t, " ")?; + } + Difference::Add(ref z) if !z.is_empty() => { + write!(t, "{}", z.green().reverse())?; + write!(t, " ")?; + } + _ => (), } - Difference::Add(ref z) if !z.is_empty() => { - write!(t, "{}", z.green().reverse())?; - write!(t, " ")?; - } - _ => (), } + writeln!(t, "")?; + } + _ => { + writeln!(t, "{}", format!("+{}", x).green().dimmed())?; } - writeln!(t, "")?; - } - _ => { - writeln!(t, "{}", format!("+{}", x).green().dimmed())?; - } - }; + }; + } } } } @@ -84,4 +88,18 @@ ullamco laboris nisi ut aliquip ex ea commodo consequat.", commodo consequat.\n" ); } + + #[test] + fn added_first_line_diff() { + let diff = Changeset::new( + "Line 1\nLine 2\nLine 3", + "Line 0\nLine 1\nLine 2\nLine 3", + "\n", + ); + println!("{}", render(&diff).unwrap()); + assert_eq!( + render(&diff).unwrap(), + "\u{1b}[32m+Line 0\u{1b}[0m\n Line 1\nLine 2\nLine 3\n" + ); + } }