Properly calculate expanded git diff hunk highlight ranges (#11632)

Closes https://github.com/zed-industries/zed/issues/11576

Release Notes:

- Fixed expanded diff hunks highlighting an extra row as added
([11576](https://github.com/zed-industries/zed/issues/11576))
This commit is contained in:
Kirill Bulatov 2024-05-10 02:02:56 +03:00 committed by GitHub
parent 50c45c7897
commit 4762e52d31
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 161 additions and 121 deletions

View file

@ -148,18 +148,31 @@ pub fn expanded_hunks(
#[cfg(any(test, feature = "test-support"))]
pub fn expanded_hunks_background_highlights(
editor: &Editor,
snapshot: &DisplaySnapshot,
) -> Vec<core::ops::Range<u32>> {
use itertools::Itertools;
editor: &mut Editor,
cx: &mut gpui::WindowContext,
) -> Vec<std::ops::RangeInclusive<u32>> {
let mut highlights = Vec::new();
editor
.highlighted_rows::<crate::DiffRowHighlight>()
.into_iter()
.flatten()
.map(|(range, _)| {
range.start.to_display_point(snapshot).row()..range.end.to_display_point(snapshot).row()
})
.unique()
.collect()
let mut range_start = 0;
let mut previous_highlighted_row = None;
for (highlighted_row, _) in editor.highlighted_display_rows(collections::HashSet::default(), cx)
{
match previous_highlighted_row {
Some(previous_row) => {
if previous_row + 1 != highlighted_row {
highlights.push(range_start..=previous_row);
range_start = highlighted_row;
}
}
None => {
range_start = highlighted_row;
}
}
previous_highlighted_row = Some(highlighted_row);
}
if let Some(previous_row) = previous_highlighted_row {
highlights.push(range_start..=previous_row);
}
highlights
}