use std::fmt::Write; use nu_ansi_term::{Color, Style}; use similar::{ChangeTag, TextDiff}; /// Generate a stylized diff of different lines between two strings pub(crate) fn diff_by_line(old: &str, new: &str) -> String { let mut out = String::new(); let diff = TextDiff::from_lines(old, new); for change in diff.iter_all_changes() { let style = match change.tag() { ChangeTag::Equal => Style::new(), ChangeTag::Delete => Color::Red.into(), ChangeTag::Insert => Color::Green.into(), }; let _ = write!( out, "{}{}", style.paint(change.tag().to_string()), style.paint(change.value()), ); } out }