No description
Find a file
Barrett Ruth 11f9b4d80b
Some checks are pending
Clippy / build (push) Waiting to run
Rustfmt / build (push) Waiting to run
Tests / Test on Latest (push) Waiting to run
Tests / Build on 1.66.0 (push) Waiting to run
Tests / Test on WASI (push) Waiting to run
Merge pull request #6 from barrettruth/fix/naming
one more fix
2026-01-10 11:26:46 -06:00
.cargo Add wasm tests (#74) 2025-01-19 15:36:34 +01:00
.github use the old ci 2025-09-11 14:53:01 -05:00
.vscode Remove unused lifetime 2022-08-01 09:34:35 +02:00
assets Added screenshot 2021-02-01 01:41:58 +01:00
examples cargo format 2025-09-11 15:20:00 -05:00
scripts Add wasm tests (#74) 2025-01-19 15:36:34 +01:00
src update docstrings 2025-09-11 15:31:36 -05:00
.gitignore Initial implementation 2021-01-17 22:18:57 +01:00
Cargo.lock.msrv try to fix; 2025-09-11 14:48:28 -05:00
Cargo.toml feat: github name rename 2026-01-10 12:16:04 -05:00
clippy.toml version to 1.66 2025-09-11 14:42:44 -05:00
LICENSE Added license 2021-01-24 02:19:19 +01:00
Makefile Add wasm tests (#74) 2025-01-19 15:36:34 +01:00
README.md one more fix 2026-01-10 12:25:31 -05:00

Likewise: A Diffing Library

This crate is a fork of similar library, which, as of 11/9/25, is rather inactive.

Crates.io License rustc 1.66.0 Documentation

Likewise 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 likewise::{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
  • HuntMcIlroy / HuntSzymanski LCS diff
  • Diffing on arbitrary comparable sequences
  • Floating point comparison with epsilon tolerance
  • Line, word, character and grapheme level diffing
  • Text and Byte diffing
  • Unified diff generation