# prettydiff [![Crate](https://img.shields.io/crates/v/prettydiff.svg)](https://crates.io/crates/prettydiff) [![docs.rs](https://docs.rs/prettydiff/badge.svg)](https://docs.rs/prettydiff) Side-by-side diff for two files in Rust. App && Library. ## Examples ### Slice diff ```rust 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"]) ); ``` ![diff_slice](https://raw.githubusercontent.com/romankoblov/prettydiff/master/screens/diff_slice.png) Get vector of changes: ```rust 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"]), ] ); ``` ### Diff line by chars or words ![diff_chars](https://raw.githubusercontent.com/romankoblov/prettydiff/master/screens/diff_chars.png) ```rust 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" ) ); ``` ### Diff lines ![diff_lines](https://raw.githubusercontent.com/romankoblov/prettydiff/master/screens/diff_lines.png) ```rust 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)); ``` ## App This crate also provides app for side-by-side diff: ```sh cargo install prettydiff prettydiff left_file.txt right_file.txt ``` ![App](https://raw.githubusercontent.com/romankoblov/prettydiff/master/screens/app.png)