Color staged and unstaged hunks differently by opacity (#25108)
Release Notes: - Make staged diff hunks appear as more opaque than unstaged hunks --------- Co-authored-by: Nate Butler <iamnbutler@gmail.com>
This commit is contained in:
parent
c9bd44f983
commit
8e17b34eff
11 changed files with 265 additions and 175 deletions
|
@ -9,6 +9,7 @@ pub use position::{TypedOffset, TypedPoint, TypedRow};
|
|||
use anyhow::{anyhow, Result};
|
||||
use buffer_diff::{
|
||||
BufferDiff, BufferDiffEvent, BufferDiffSnapshot, DiffHunkSecondaryStatus, DiffHunkStatus,
|
||||
DiffHunkStatusKind,
|
||||
};
|
||||
use clock::ReplicaId;
|
||||
use collections::{BTreeMap, Bound, HashMap, HashSet};
|
||||
|
@ -135,12 +136,16 @@ pub struct MultiBufferDiffHunk {
|
|||
|
||||
impl MultiBufferDiffHunk {
|
||||
pub fn status(&self) -> DiffHunkStatus {
|
||||
if self.buffer_range.start == self.buffer_range.end {
|
||||
DiffHunkStatus::Removed(self.secondary_status)
|
||||
let kind = if self.buffer_range.start == self.buffer_range.end {
|
||||
DiffHunkStatusKind::Deleted
|
||||
} else if self.diff_base_byte_range.is_empty() {
|
||||
DiffHunkStatus::Added(self.secondary_status)
|
||||
DiffHunkStatusKind::Added
|
||||
} else {
|
||||
DiffHunkStatus::Modified(self.secondary_status)
|
||||
DiffHunkStatusKind::Modified
|
||||
};
|
||||
DiffHunkStatus {
|
||||
kind,
|
||||
secondary: self.secondary_status,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6210,7 +6215,7 @@ where
|
|||
excerpt,
|
||||
has_trailing_newline: *has_trailing_newline,
|
||||
is_main_buffer: false,
|
||||
diff_hunk_status: Some(DiffHunkStatus::Removed(
|
||||
diff_hunk_status: Some(DiffHunkStatus::deleted(
|
||||
hunk_info.hunk_secondary_status,
|
||||
)),
|
||||
buffer_range: buffer_start..buffer_end,
|
||||
|
@ -6256,7 +6261,7 @@ where
|
|||
has_trailing_newline,
|
||||
is_main_buffer: true,
|
||||
diff_hunk_status: inserted_hunk_info
|
||||
.map(|info| DiffHunkStatus::Added(info.hunk_secondary_status)),
|
||||
.map(|info| DiffHunkStatus::added(info.hunk_secondary_status)),
|
||||
buffer_range: buffer_start..buffer_end,
|
||||
range: start..end,
|
||||
})
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use super::*;
|
||||
use buffer_diff::DiffHunkStatus;
|
||||
use buffer_diff::{DiffHunkStatus, DiffHunkStatusKind};
|
||||
use gpui::{App, TestAppContext};
|
||||
use indoc::indoc;
|
||||
use language::{Buffer, Rope};
|
||||
|
@ -1325,13 +1325,13 @@ fn test_basic_diff_hunks(cx: &mut TestAppContext) {
|
|||
.map(|info| (info.buffer_row, info.diff_status))
|
||||
.collect::<Vec<_>>(),
|
||||
vec![
|
||||
(Some(0), Some(DiffHunkStatus::added())),
|
||||
(Some(0), Some(DiffHunkStatus::added_none())),
|
||||
(Some(1), None),
|
||||
(Some(1), Some(DiffHunkStatus::removed())),
|
||||
(Some(2), Some(DiffHunkStatus::added())),
|
||||
(Some(1), Some(DiffHunkStatus::deleted_none())),
|
||||
(Some(2), Some(DiffHunkStatus::added_none())),
|
||||
(Some(3), None),
|
||||
(Some(3), Some(DiffHunkStatus::removed())),
|
||||
(Some(4), Some(DiffHunkStatus::removed())),
|
||||
(Some(3), Some(DiffHunkStatus::deleted_none())),
|
||||
(Some(4), Some(DiffHunkStatus::deleted_none())),
|
||||
(Some(4), None),
|
||||
(Some(5), None)
|
||||
]
|
||||
|
@ -2279,7 +2279,7 @@ impl ReferenceMultibuffer {
|
|||
buffer_start: Some(
|
||||
base_buffer.offset_to_point(hunk.diff_base_byte_range.start),
|
||||
),
|
||||
status: Some(DiffHunkStatus::Removed(hunk.secondary_status)),
|
||||
status: Some(DiffHunkStatus::deleted(hunk.secondary_status)),
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -2294,7 +2294,7 @@ impl ReferenceMultibuffer {
|
|||
buffer_id: Some(buffer.remote_id()),
|
||||
range: len..text.len(),
|
||||
buffer_start: Some(buffer.offset_to_point(offset)),
|
||||
status: Some(DiffHunkStatus::Added(hunk.secondary_status)),
|
||||
status: Some(DiffHunkStatus::added(hunk.secondary_status)),
|
||||
});
|
||||
offset = hunk_range.end;
|
||||
}
|
||||
|
@ -2664,13 +2664,13 @@ async fn test_random_multibuffer(cx: &mut TestAppContext, mut rng: StdRng) {
|
|||
snapshot.widest_line_number(),
|
||||
expected_row_infos
|
||||
.into_iter()
|
||||
.filter_map(
|
||||
|info| if matches!(info.diff_status, Some(DiffHunkStatus::Removed(_))) {
|
||||
.filter_map(|info| {
|
||||
if info.diff_status.is_some_and(|status| status.is_deleted()) {
|
||||
None
|
||||
} else {
|
||||
info.buffer_row
|
||||
}
|
||||
)
|
||||
})
|
||||
.max()
|
||||
.unwrap()
|
||||
+ 1
|
||||
|
@ -3021,10 +3021,10 @@ fn format_diff(
|
|||
.enumerate()
|
||||
.zip(row_infos)
|
||||
.map(|((ix, line), info)| {
|
||||
let marker = match info.diff_status {
|
||||
Some(DiffHunkStatus::Added(_)) => "+ ",
|
||||
Some(DiffHunkStatus::Removed(_)) => "- ",
|
||||
Some(DiffHunkStatus::Modified(_)) => unreachable!(),
|
||||
let marker = match info.diff_status.map(|status| status.kind) {
|
||||
Some(DiffHunkStatusKind::Added) => "+ ",
|
||||
Some(DiffHunkStatusKind::Deleted) => "- ",
|
||||
Some(DiffHunkStatusKind::Modified) => unreachable!(),
|
||||
None => {
|
||||
if has_diff && !line.is_empty() {
|
||||
" "
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue