blob: 0d1140001b814888e9fcbf4df2cf46d7bd3aca24 (
plain)
use std::ops::Range;
use imara_diff::{Algorithm, Diff, Hunk, InternedInput};
pub enum DiffSpan {
Insertion(Range<u32>),
Deletion(Range<u32>),
}
pub fn diff(before: &[u8], after: &[u8]) -> Vec<DiffSpan> {
let input = InternedInput::new(before, after);
let diff = Diff::compute(Algorithm::Histogram, &input);
let hunks: Vec<Hunk> = 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
}
|