fudiff

Crates.iofudiff
lib.rsfudiff
version0.2.0
created_at2025-02-04 05:31:44.123634+00
updated_at2025-02-04 07:19:30.54301+00
descriptionFuzzy Unified Diff
homepage
repositoryhttps://github.com/cortesi/fudiff
max_upload_size
id1541579
size47,683
Aldo Cortesi (cortesi)

documentation

README

Crates.io Docs License

FuDiff

A Rust library implementing a robust fuzzy unified diff format designed for AI-driven patching tools.

Features

  • Context-based patching without relying on line numbers
  • Fuzzy matching for reliable patch application
  • Clean, minimalist diff format optimized for AI interactions
  • Reversible patches - can apply and revert changes
  • Extensive tests
  • Optional serde support for serialization/deserialization (enable with serde feature)

Usage

use fudiff::{diff, parse};

// Create a diff between two strings
let diff = diff("old content", "new content");

// Parse an existing diff
let diff = parse("@@ @@\n-old\n+new\n").unwrap();

// Apply a diff
let patched = diff.patch("old content").unwrap();

// Revert a diff
let original = diff.revert("new content").unwrap();

Diff Format

The format uses context lines (prefixed with space), deletions (prefixed with -), and additions (prefixed with +):

@@ @@
 fn compute(x: i32) -> i32 {
-    let y = x * 2;
-    println!("Value: {}", y);
+    let y = x + 10;
+    println!("Result: {}", y);
+    println!("Input was: {}", x);
     y
 }

The patch is located by matching the unchanged context lines rather than using line numbers. Multiple changes are separated by hunk headers (@@ @@).

License

MIT

Commit count: 34

cargo fmt