19 个版本 (稳定版)

2.6.0 2024年7月21日
2.5.0 2024年3月28日
2.4.0 2023年12月29日
2.3.0 2023年10月7日
0.5.0 2021年2月1日

文本处理 中排名 3

Download history 300570/week @ 2024-05-03 331429/week @ 2024-05-10 331128/week @ 2024-05-17 321748/week @ 2024-05-24 345992/week @ 2024-05-31 356349/week @ 2024-06-07 355789/week @ 2024-06-14 362716/week @ 2024-06-21 348307/week @ 2024-06-28 364070/week @ 2024-07-05 374747/week @ 2024-07-12 446460/week @ 2024-07-19 438893/week @ 2024-07-26 455652/week @ 2024-08-02 488131/week @ 2024-08-09 503044/week @ 2024-08-16

每月下载量 1,975,322
1,641 个 Crates 中使用 (直接使用 130 个)

Apache-2.0

185KB
4K SLoC

Similar:一个 Diffing 库

Crates.io License rustc 1.60.0 Documentation

Similar 是一个针对 Rust 的无依赖项 crate,它实现了不同的 diffing 算法和高级接口。它基于 Patience 算法的 pijul 实现,并从中借鉴了一些想法。它还结合了由 Brandon Williams 大量编写的 Myers diff 算法。此库是为 insta 快照测试库 构建的。

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);
    }
}

截图

terminal highlighting

盒子里有什么?

  • Myer's diff
  • 耐心 diff
  • Hunt–McIlroy / Hunt–Szymanski LCS diff
  • 在任意可比较序列上 diff
  • 行、单词、字符和字形级别 diff
  • 文本和字节 diff
  • 生成统一 diff

依赖项

~0–700KB
~10K SLoC