From 84105e10d0ce93052cdce677e8472bdcc3c388db Mon Sep 17 00:00:00 2001 From: Micha White Date: Sat, 4 Oct 2025 19:07:22 -0400 Subject: Basic diffing --- src/diff.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/diff.rs (limited to 'src/diff.rs') diff --git a/src/diff.rs b/src/diff.rs new file mode 100644 index 0000000..0d11400 --- /dev/null +++ b/src/diff.rs @@ -0,0 +1,26 @@ +use std::ops::Range; + +use imara_diff::{Algorithm, Diff, Hunk, InternedInput}; + +pub enum DiffSpan { + Insertion(Range), + Deletion(Range), +} + +pub fn diff(before: &[u8], after: &[u8]) -> Vec { + let input = InternedInput::new(before, after); + let diff = Diff::compute(Algorithm::Histogram, &input); + + let hunks: Vec = diff.hunks().collect(); + let mut spans = Vec::with_capacity(hunks.len()); + for hunk in hunks { + if !hunk.before.is_empty() { + spans.push(DiffSpan::Deletion(hunk.before)); + } + if !hunk.after.is_empty() { + spans.push(DiffSpan::Insertion(hunk.after)); + } + } + + spans +} -- cgit v1.2.3