2 unstable releases

0.2.0 Feb 4, 2025
0.1.0 Feb 4, 2025

#586 in Parser implementations

Download history 197/week @ 2025-01-31 40/week @ 2025-02-07

237 downloads per month

MIT license

31KB
712 lines

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

Dependencies

~155KB