mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-02 19:31:39 +03:00
Implement MultiBuffer::{is_dirty,has_conflict}
This commit is contained in:
parent
5f819b6edc
commit
7d2b74a93b
@ -20,6 +20,8 @@ pub fn init(cx: &mut MutableAppContext) {
|
|||||||
cx.add_action(ProjectDiagnosticsEditor::toggle);
|
cx.add_action(ProjectDiagnosticsEditor::toggle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Event = editor::Event;
|
||||||
|
|
||||||
struct ProjectDiagnostics {
|
struct ProjectDiagnostics {
|
||||||
project: ModelHandle<Project>,
|
project: ModelHandle<Project>,
|
||||||
}
|
}
|
||||||
@ -41,7 +43,7 @@ impl Entity for ProjectDiagnostics {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Entity for ProjectDiagnosticsEditor {
|
impl Entity for ProjectDiagnosticsEditor {
|
||||||
type Event = ();
|
type Event = Event;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl View for ProjectDiagnosticsEditor {
|
impl View for ProjectDiagnosticsEditor {
|
||||||
@ -68,6 +70,8 @@ impl ProjectDiagnosticsEditor {
|
|||||||
let build_settings = editor::settings_builder(excerpts.downgrade(), settings.clone());
|
let build_settings = editor::settings_builder(excerpts.downgrade(), settings.clone());
|
||||||
let editor =
|
let editor =
|
||||||
cx.add_view(|cx| Editor::for_buffer(excerpts.clone(), build_settings.clone(), cx));
|
cx.add_view(|cx| Editor::for_buffer(excerpts.clone(), build_settings.clone(), cx));
|
||||||
|
cx.subscribe(&editor, |_, _, event, cx| cx.emit(*event))
|
||||||
|
.detach();
|
||||||
Self {
|
Self {
|
||||||
excerpts,
|
excerpts,
|
||||||
editor,
|
editor,
|
||||||
@ -240,6 +244,21 @@ impl workspace::ItemView for ProjectDiagnosticsEditor {
|
|||||||
) -> gpui::Task<anyhow::Result<()>> {
|
) -> gpui::Task<anyhow::Result<()>> {
|
||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_dirty(&self, cx: &AppContext) -> bool {
|
||||||
|
self.excerpts.read(cx).read(cx).is_dirty()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn has_conflict(&self, cx: &AppContext) -> bool {
|
||||||
|
self.excerpts.read(cx).read(cx).has_conflict()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn should_update_tab_on_event(event: &Event) -> bool {
|
||||||
|
matches!(
|
||||||
|
event,
|
||||||
|
Event::Saved | Event::Dirtied | Event::FileHandleChanged
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -3638,6 +3638,7 @@ fn compute_scroll_position(
|
|||||||
scroll_position
|
scroll_position
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone)]
|
||||||
pub enum Event {
|
pub enum Event {
|
||||||
Activate,
|
Activate,
|
||||||
Edited,
|
Edited,
|
||||||
|
@ -181,11 +181,11 @@ impl ItemView for Editor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn is_dirty(&self, cx: &AppContext) -> bool {
|
fn is_dirty(&self, cx: &AppContext) -> bool {
|
||||||
self.buffer().read(cx).is_dirty(cx)
|
self.buffer().read(cx).read(cx).is_dirty()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn has_conflict(&self, cx: &AppContext) -> bool {
|
fn has_conflict(&self, cx: &AppContext) -> bool {
|
||||||
self.buffer().read(cx).has_conflict(cx)
|
self.buffer().read(cx).read(cx).has_conflict()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,6 +82,8 @@ pub struct MultiBufferSnapshot {
|
|||||||
excerpts: SumTree<Excerpt>,
|
excerpts: SumTree<Excerpt>,
|
||||||
parse_count: usize,
|
parse_count: usize,
|
||||||
diagnostics_update_count: usize,
|
diagnostics_update_count: usize,
|
||||||
|
is_dirty: bool,
|
||||||
|
has_conflict: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type RenderHeaderFn = Arc<dyn 'static + Send + Sync + Fn(&AppContext) -> ElementBox>;
|
pub type RenderHeaderFn = Arc<dyn 'static + Send + Sync + Fn(&AppContext) -> ElementBox>;
|
||||||
@ -681,14 +683,6 @@ impl MultiBuffer {
|
|||||||
self.as_singleton().unwrap().read(cx).file()
|
self.as_singleton().unwrap().read(cx).file()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_dirty(&self, cx: &AppContext) -> bool {
|
|
||||||
self.as_singleton().unwrap().read(cx).is_dirty()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn has_conflict(&self, cx: &AppContext) -> bool {
|
|
||||||
self.as_singleton().unwrap().read(cx).has_conflict()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub fn is_parsing(&self, cx: &AppContext) -> bool {
|
pub fn is_parsing(&self, cx: &AppContext) -> bool {
|
||||||
self.as_singleton().unwrap().read(cx).is_parsing()
|
self.as_singleton().unwrap().read(cx).is_parsing()
|
||||||
@ -699,6 +693,8 @@ impl MultiBuffer {
|
|||||||
let mut excerpts_to_edit = Vec::new();
|
let mut excerpts_to_edit = Vec::new();
|
||||||
let mut reparsed = false;
|
let mut reparsed = false;
|
||||||
let mut diagnostics_updated = false;
|
let mut diagnostics_updated = false;
|
||||||
|
let mut is_dirty = false;
|
||||||
|
let mut has_conflict = false;
|
||||||
for buffer_state in self.buffers.values() {
|
for buffer_state in self.buffers.values() {
|
||||||
let buffer = buffer_state.buffer.read(cx);
|
let buffer = buffer_state.buffer.read(cx);
|
||||||
let buffer_edited = buffer.version().gt(&buffer_state.last_version);
|
let buffer_edited = buffer.version().gt(&buffer_state.last_version);
|
||||||
@ -716,6 +712,8 @@ impl MultiBuffer {
|
|||||||
|
|
||||||
reparsed |= buffer_reparsed;
|
reparsed |= buffer_reparsed;
|
||||||
diagnostics_updated |= buffer_diagnostics_updated;
|
diagnostics_updated |= buffer_diagnostics_updated;
|
||||||
|
is_dirty |= buffer.is_dirty();
|
||||||
|
has_conflict |= buffer.has_conflict();
|
||||||
}
|
}
|
||||||
if reparsed {
|
if reparsed {
|
||||||
snapshot.parse_count += 1;
|
snapshot.parse_count += 1;
|
||||||
@ -723,6 +721,9 @@ impl MultiBuffer {
|
|||||||
if diagnostics_updated {
|
if diagnostics_updated {
|
||||||
snapshot.diagnostics_update_count += 1;
|
snapshot.diagnostics_update_count += 1;
|
||||||
}
|
}
|
||||||
|
snapshot.is_dirty = is_dirty;
|
||||||
|
snapshot.has_conflict = has_conflict;
|
||||||
|
|
||||||
excerpts_to_edit.sort_unstable_by_key(|(excerpt_id, _, _)| *excerpt_id);
|
excerpts_to_edit.sort_unstable_by_key(|(excerpt_id, _, _)| *excerpt_id);
|
||||||
|
|
||||||
let mut edits = Vec::new();
|
let mut edits = Vec::new();
|
||||||
@ -1493,6 +1494,14 @@ impl MultiBufferSnapshot {
|
|||||||
.and_then(|excerpt| excerpt.buffer.language())
|
.and_then(|excerpt| excerpt.buffer.language())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_dirty(&self) -> bool {
|
||||||
|
self.is_dirty
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn has_conflict(&self) -> bool {
|
||||||
|
self.has_conflict
|
||||||
|
}
|
||||||
|
|
||||||
pub fn diagnostic_group<'a, O>(
|
pub fn diagnostic_group<'a, O>(
|
||||||
&'a self,
|
&'a self,
|
||||||
group_id: usize,
|
group_id: usize,
|
||||||
|
Loading…
Reference in New Issue
Block a user