Skip to content

mitsuhiko/similar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

a169e29 · Feb 5, 2025
Jan 19, 2025
Jan 19, 2025
Aug 1, 2022
Feb 1, 2021
Oct 3, 2021
Jan 19, 2025
Feb 5, 2025
Jan 17, 2021
Jan 19, 2025
Jul 21, 2024
Jan 19, 2025
Jan 24, 2021
Jan 19, 2025
Feb 5, 2025
Mar 28, 2024

Repository files navigation

Similar: A Diffing Library

Crates.io License rustc 1.60.0 Documentation

Similar is a dependency free crate for Rust that implements different diffing algorithms and high level interfaces for it. It is based on the pijul implementation of the Patience algorithm and inherits some ideas from there. It also incorporates the Myers' diff algorithm which was largely written by Brandon Williams. This library was built for the insta snapshot testing library.

use similar::{ChangeTag, TextDiff};

fn main() {
    let diff = TextDiff::from_lines(
        "Hello World\nThis is the second line.\nThis is the third.",
        "Hallo Welt\nThis is the second line.\nThis is life.\nMoar and more",
    );

    for change in diff.iter_all_changes() {
        let sign = match change.tag() {
            ChangeTag::Delete => "-",
            ChangeTag::Insert => "+",
            ChangeTag::Equal => " ",
        };
        print!("{}{}", sign, change);
    }
}

Screenshot

terminal highlighting

What's in the box?

  • Myers' diff
  • Patience diff
  • Hunt–McIlroy / Hunt–Szymanski LCS diff
  • Diffing on arbitrary comparable sequences
  • Line, word, character and grapheme level diffing
  • Text and Byte diffing
  • Unified diff generation

Related Projects

License and Links