Diff view: Fold excerpts of deleted files by default (#25436)
Release Notes: - N/A
This commit is contained in:
parent
2b28b5969f
commit
d1302a7a08
2 changed files with 18 additions and 5 deletions
|
@ -11,7 +11,7 @@ use editor::{
|
||||||
};
|
};
|
||||||
use feature_flags::FeatureFlagViewExt;
|
use feature_flags::FeatureFlagViewExt;
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
use git::{Commit, StageAll, StageAndNext, ToggleStaged, UnstageAll};
|
use git::{status::FileStatus, Commit, StageAll, StageAndNext, ToggleStaged, UnstageAll};
|
||||||
use gpui::{
|
use gpui::{
|
||||||
actions, Action, AnyElement, AnyView, App, AppContext as _, AsyncWindowContext, Entity,
|
actions, Action, AnyElement, AnyView, App, AppContext as _, AsyncWindowContext, Entity,
|
||||||
EventEmitter, FocusHandle, Focusable, Render, Subscription, Task, WeakEntity,
|
EventEmitter, FocusHandle, Focusable, Render, Subscription, Task, WeakEntity,
|
||||||
|
@ -51,6 +51,7 @@ struct DiffBuffer {
|
||||||
path_key: PathKey,
|
path_key: PathKey,
|
||||||
buffer: Entity<Buffer>,
|
buffer: Entity<Buffer>,
|
||||||
diff: Entity<BufferDiff>,
|
diff: Entity<BufferDiff>,
|
||||||
|
file_status: FileStatus,
|
||||||
}
|
}
|
||||||
|
|
||||||
const CONFLICT_NAMESPACE: &'static str = "0";
|
const CONFLICT_NAMESPACE: &'static str = "0";
|
||||||
|
@ -351,6 +352,7 @@ impl ProjectDiff {
|
||||||
path_key,
|
path_key,
|
||||||
buffer,
|
buffer,
|
||||||
diff: changes,
|
diff: changes,
|
||||||
|
file_status: entry.status,
|
||||||
})
|
})
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
@ -383,15 +385,22 @@ impl ProjectDiff {
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
};
|
};
|
||||||
|
|
||||||
self.multibuffer.update(cx, |multibuffer, cx| {
|
let is_excerpt_newly_added = self.multibuffer.update(cx, |multibuffer, cx| {
|
||||||
multibuffer.set_excerpts_for_path(
|
multibuffer.set_excerpts_for_path(
|
||||||
path_key.clone(),
|
path_key.clone(),
|
||||||
buffer,
|
buffer,
|
||||||
diff_hunk_ranges,
|
diff_hunk_ranges,
|
||||||
editor::DEFAULT_MULTIBUFFER_CONTEXT,
|
editor::DEFAULT_MULTIBUFFER_CONTEXT,
|
||||||
cx,
|
cx,
|
||||||
);
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if is_excerpt_newly_added && diff_buffer.file_status.is_deleted() {
|
||||||
|
self.editor.update(cx, |editor, cx| {
|
||||||
|
editor.fold_buffer(snapshot.text.remote_id(), cx)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if self.multibuffer.read(cx).is_empty()
|
if self.multibuffer.read(cx).is_empty()
|
||||||
&& self
|
&& self
|
||||||
.editor
|
.editor
|
||||||
|
|
|
@ -1448,7 +1448,7 @@ impl MultiBuffer {
|
||||||
excerpt.range.context.start,
|
excerpt.range.context.start,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
/// Sets excerpts, returns `true` if at least one new excerpt was added.
|
||||||
pub fn set_excerpts_for_path(
|
pub fn set_excerpts_for_path(
|
||||||
&mut self,
|
&mut self,
|
||||||
path: PathKey,
|
path: PathKey,
|
||||||
|
@ -1456,7 +1456,7 @@ impl MultiBuffer {
|
||||||
ranges: Vec<Range<Point>>,
|
ranges: Vec<Range<Point>>,
|
||||||
context_line_count: u32,
|
context_line_count: u32,
|
||||||
cx: &mut Context<Self>,
|
cx: &mut Context<Self>,
|
||||||
) {
|
) -> bool {
|
||||||
let buffer_snapshot = buffer.update(cx, |buffer, _| buffer.snapshot());
|
let buffer_snapshot = buffer.update(cx, |buffer, _| buffer.snapshot());
|
||||||
|
|
||||||
let mut insert_after = self
|
let mut insert_after = self
|
||||||
|
@ -1475,6 +1475,7 @@ impl MultiBuffer {
|
||||||
let mut new_excerpt_ids = Vec::new();
|
let mut new_excerpt_ids = Vec::new();
|
||||||
let mut to_remove = Vec::new();
|
let mut to_remove = Vec::new();
|
||||||
let mut to_insert = Vec::new();
|
let mut to_insert = Vec::new();
|
||||||
|
let mut added_a_new_excerpt = false;
|
||||||
let snapshot = self.snapshot(cx);
|
let snapshot = self.snapshot(cx);
|
||||||
|
|
||||||
let mut excerpts_cursor = snapshot.excerpts.cursor::<Option<&Locator>>(&());
|
let mut excerpts_cursor = snapshot.excerpts.cursor::<Option<&Locator>>(&());
|
||||||
|
@ -1489,6 +1490,7 @@ impl MultiBuffer {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
(Some(_), None) => {
|
(Some(_), None) => {
|
||||||
|
added_a_new_excerpt = true;
|
||||||
to_insert.push(new_iter.next().unwrap());
|
to_insert.push(new_iter.next().unwrap());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -1552,6 +1554,8 @@ impl MultiBuffer {
|
||||||
} else {
|
} else {
|
||||||
self.buffers_by_path.insert(path, new_excerpt_ids);
|
self.buffers_by_path.insert(path, new_excerpt_ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
added_a_new_excerpt
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn paths(&self) -> impl Iterator<Item = PathKey> + '_ {
|
pub fn paths(&self) -> impl Iterator<Item = PathKey> + '_ {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue