Skip to main content

Hunk

Struct Hunk 

Source
pub struct Hunk {
    pub before: Range<u32>,
    pub after: Range<u32>,
}
Available on crate feature blob only.
Expand description

A single change in a Diff that represents a range of tokens (before) in the first sequence that were replaced by a different range of tokens in the second sequence (after).

Each hunk identifies a contiguous region of change, where tokens from the before range should be replaced with tokens from the after range.

Fields§

§before: Range<u32>

The range of token indices in the first sequence (before) that were removed.

§after: Range<u32>

The range of token indices in the second sequence (after) that were added.

Implementations§

Source§

impl Hunk

Source

pub const NONE: Hunk

Can be used instead of Option::None for better performance. Because imara-diff does not support more than i32::MAX there is an unused bit pattern that can be used.

It has some nice properties where it usually is not necessary to check for None separately: Empty ranges fail contains checks and also fail smaller than checks.

Source

pub fn invert(&self) -> Hunk

Inverts a hunk so that it represents a change that would undo this hunk.

Source

pub fn is_pure_insertion(&self) -> bool

Returns whether tokens are only inserted and not removed in this hunk.

Source

pub fn is_pure_removal(&self) -> bool

Returns whether tokens are only removed and not inserted in this hunk.

Source

pub fn latin_word_diff<'a>( &self, input: &InternedInput<&'a str>, word_tokens: &mut InternedInput<&'a str>, diff: &mut Diff, )

Performs a word-diff on this hunk.

This requires passing the original input in order to look up the tokens of the current hunk, which typically are lines. Each token is split into words using the built-in words tokenizer. The resulting word tokens are stored in a second diff_input, and a diff is computed on them, with basic post-processing applied.

For performance reasons, this second diff_input as well as the computed diff need to be passed as parameters so that they can be re-used when iterating over hunks. Note that word tokens are always added but never removed from the interner. Consider clearing it if you expect your input to have a large vocabulary.

§Examples
// Compute diff normally
let before = "before text";
let after = "after text";
let mut lines = InternedInput::new(before, after);
let mut diff = Diff::compute(Algorithm::Histogram, &lines);
diff.postprocess_lines(&lines);

// Compute word-diff per hunk, reusing allocations across iterations
let mut hunk_diff_input = InternedInput::default();
let mut hunk_diff = Diff::default();
for hunk in diff.hunks() {
  hunk.latin_word_diff(&lines, &mut hunk_diff_input, &mut hunk_diff);
  let added = hunk_diff.count_additions();
  let removed = hunk_diff.count_removals();
  println!("word-diff of this hunk has {added} additions and {removed} removals");
  // optionally, clear the interner:
  hunk_diff_input.clear();
}

Trait Implementations§

Source§

impl Clone for Hunk

Source§

fn clone(&self) -> Hunk

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Hunk

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for Hunk

Source§

fn default() -> Hunk

Returns the “default value” for a type. Read more
Source§

impl Hash for Hunk

Source§

fn hash<__H>(&self, state: &mut __H)
where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for Hunk

Source§

fn eq(&self, other: &Hunk) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for Hunk

Source§

impl StructuralPartialEq for Hunk

Auto Trait Implementations§

§

impl Freeze for Hunk

§

impl RefUnwindSafe for Hunk

§

impl Send for Hunk

§

impl Sync for Hunk

§

impl Unpin for Hunk

§

impl UnsafeUnpin for Hunk

§

impl UnwindSafe for Hunk

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.