No description
Find a file
2021-02-01 01:41:58 +01:00
.github/workflows Added github actions and makefile 2021-01-17 23:42:25 +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 Make InlineChange consistent with Change for missing_newline 2021-01-31 22:16:45 +01:00
src Add proper multi-sequence inline highlighting 2021-02-01 01:38:00 +01:00
.gitignore Initial implementation 2021-01-17 22:18:57 +01:00
Cargo.toml Added support for unicode word splitting and change inline to use it 2021-01-31 22:13:56 +01:00
CHANGELOG.md Added support for unicode word splitting and change inline to use it 2021-01-31 22:13:56 +01:00
LICENSE Added license 2021-01-24 02:19:19 +01:00
Makefile Feature flagged out the text module 2021-01-24 09:26:56 +01:00
README.md Added screenshot 2021-02-01 01:41:58 +01:00

similar

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 Myer's and Patience algorithms and inherits some ideas from there.

use similar::text::{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 op in diff.ops() {
        for change in diff.iter_changes(op) {
            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
  • Line, word, character and grapheme level diffing
  • Unified diff generation