2 unstable releases
0.2.0 | Feb 4, 2025 |
---|---|
0.1.0 | Feb 4, 2025 |
#586 in Parser implementations
237 downloads per month
31KB
712 lines
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