pub struct HunkLocation {
pub start_index: usize,
pub length: usize,
}Expand description
Represents the location where a hunk should be applied.
This is returned by find_hunk_location() and provides the necessary
information to manually apply a patch to a slice of lines.
§Example
let original_content = "line 1\nline 2\nline 3\n";
let diff = r#"
```diff
--- a/file.txt
+++ b/file.txt
@@ -1,3 +1,3 @@
line 1
-line 2
+line two
line 3
```
"#;
let hunk = parse_single_patch(diff)?.hunks.remove(0);
let options = ApplyOptions::exact();
let (location, _) = find_hunk_location(&hunk, original_content, &options)?;
assert_eq!(location.start_index, 0); // 0-based index
assert_eq!(location.length, 3);
assert_eq!(location.to_string(), "line 1"); // User-friendly 1-based displayFields§
§start_index: usizeThe 0-based starting line index in the target content where the hunk should be applied.
This index indicates the first line of the slice in the target content that
will be replaced by the hunk’s changes. You can use this along with the
length field to understand the exact range of lines affected by the patch.
§Example
let location = HunkLocation { start_index: 4, length: 3 };
// Note that the user-facing line number is start_index + 1.
assert_eq!(location.start_index, 4);
println!(
"Patch will be applied starting at line {} (index {}).",
location.start_index + 1,
location.start_index
);length: usizeThe number of lines in the target content that will be replaced. This may differ from the number of lines in the hunk’s “match block” when a fuzzy match is found.
Trait Implementations§
Source§impl Clone for HunkLocation
impl Clone for HunkLocation
Source§fn clone(&self) -> HunkLocation
fn clone(&self) -> HunkLocation
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for HunkLocation
impl Debug for HunkLocation
Source§impl Display for HunkLocation
Formats the location for display, showing a user-friendly 1-based line number.
impl Display for HunkLocation
Formats the location for display, showing a user-friendly 1-based line number.
This implementation provides a more intuitive, human-readable representation of the
hunk’s location. It converts the internal 0-based start_index into a 1-based
line number (e.g., index 9 becomes "line 10"), which is the standard
convention in text editors and log messages. This makes it easy to use
HunkLocation directly in formatted strings for clear diagnostic output.
§Example
let location = HunkLocation { start_index: 9, length: 3 };
assert_eq!(location.to_string(), "line 10");
assert_eq!(format!("Hunk applied at {}", location), "Hunk applied at line 10");Source§impl PartialEq for HunkLocation
impl PartialEq for HunkLocation
impl Copy for HunkLocation
impl Eq for HunkLocation
impl StructuralPartialEq for HunkLocation
Auto Trait Implementations§
impl Freeze for HunkLocation
impl RefUnwindSafe for HunkLocation
impl Send for HunkLocation
impl Sync for HunkLocation
impl Unpin for HunkLocation
impl UnsafeUnpin for HunkLocation
impl UnwindSafe for HunkLocation
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more