No description
Find a file
Armin Ronacher d599113da0 Bump console
2022-01-05 16:14:23 +01:00
.github Create FUNDING.yml 2022-01-05 10:16:38 +01:00
.vscode Initial implementation 2021-01-17 22:18:57 +01:00
assets Added screenshot 2021-02-01 01:41:58 +01:00
examples Added serde example 2021-10-03 09:02:22 +02:00
src Fixed a clippy lint 2021-10-03 08:53:23 +02:00
.gitignore Initial implementation 2021-01-17 22:18:57 +01:00
Cargo.toml Bump console 2022-01-05 16:14:23 +01:00
CHANGELOG.md Added optional serde support 2021-10-03 08:46:57 +02:00
clippy.toml Add support for Rust 1.41.0 (#14) 2021-02-15 22:50:12 +01:00
LICENSE Added license 2021-01-24 02:19:19 +01:00
Makefile Add support for byte diffing (#7) 2021-02-02 14:16:00 +01:00
README.md Remove assert example and link to similar-asserts 2021-02-25 23:42:33 +01:00

Similar: A Diffing Library

Build Status Crates.io License 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 Myer's 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?

  • Myer's diff
  • Patience diff
  • HuntMcIlroy / HuntSzymanski LCS diff
  • Diffing on arbitrary comparable sequences
  • Line, word, character and grapheme level diffing
  • Text and Byte diffing
  • Unified diff generation