Side-by-side diff for two files in Rust. App && Library.
use prettydiff::diff_slice; println!("Diff: {}", diff_slice(&[1, 2, 3, 4, 5, 6], &[2, 3, 5, 7])); println!( "Diff: {}", diff_slice(&["q", "a", "b", "x", "c", "d"], &["a", "b", "y", "c", "d", "f"]) ); println!( "Diff: {}", diff_slice(&["a", "c", "d", "b"], &["a", "e", "b"]) );
Get vector of changes:
use prettydiff::diff_slice; assert_eq!( diff_slice(&["q", "a", "b", "x", "c", "d"], &["a", "b", "y", "c", "d", "f"]).diff, vec![ DiffOp::Remove(&["q"]), DiffOp::Equal(&["a", "b"]), DiffOp::Replace(&["x"], &["y"]), DiffOp::Equal(&["c", "d"]), DiffOp::Insert(&["f"]), ] );
use prettydiff::{diff_chars, diff_words}; println!("diff_chars: {}", diff_chars("abefcd", "zadqwc")); println!( "diff_chars: {}", diff_chars( "The quick brown fox jumps over the lazy dog", "The quick brown dog leaps over the lazy cat" ) ); println!( "diff_chars: {}", diff_chars( "The red brown fox jumped over the rolling log", "The brown spotted fox leaped over the rolling log" ) ); println!( "diff_chars: {}", diff_chars( "The red brown fox jumped over the rolling log", "The brown spotted fox leaped over the rolling log" ) .set_highlight_whitespace(true) ); println!( "diff_words: {}", diff_words( "The red brown fox jumped over the rolling log", "The brown spotted fox leaped over the rolling log" ) ); println!( "diff_words: {}", diff_words( "The quick brown fox jumps over the lazy dog", "The quick, brown dog leaps over the lazy cat" ) );
use prettydiff::diff_lines; let code1_a = r#" void func1() { x += 1 } void func2() { x += 2 } "#; let code1_b = r#" void func1(a: u32) { x += 1 } void functhreehalves() { x += 1.5 } void func2() { x += 2 } void func3(){} "#; println!("diff_lines:"); println!("{}", diff_lines(code1_a, code1_b));
This crate also provides app for side-by-side diff:
cargo install prettydiff prettydiff left_file.txt right_file.txt