Synchronize FoldMap with buffer's contents lazily
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
co-authored by
Nathan Sobo
parent
c135c84ef0
commit
05ab1bdddf
@@ -679,9 +679,8 @@ impl Buffer {
|
||||
if let Some(ctx) = ctx {
|
||||
ctx.notify();
|
||||
|
||||
let changes = self.edits_since(since).collect::<Vec<_>>();
|
||||
if !changes.is_empty() {
|
||||
self.did_edit(changes, was_dirty, ctx);
|
||||
if self.edits_since(since).next().is_some() {
|
||||
self.did_edit(was_dirty, ctx);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -742,8 +741,8 @@ impl Buffer {
|
||||
Ok(ops)
|
||||
}
|
||||
|
||||
fn did_edit(&self, changes: Vec<Edit>, was_dirty: bool, ctx: &mut ModelContext<Self>) {
|
||||
ctx.emit(Event::Edited(changes));
|
||||
fn did_edit(&self, was_dirty: bool, ctx: &mut ModelContext<Self>) {
|
||||
ctx.emit(Event::Edited);
|
||||
if !was_dirty {
|
||||
ctx.emit(Event::Dirtied);
|
||||
}
|
||||
@@ -892,9 +891,8 @@ impl Buffer {
|
||||
|
||||
if let Some(ctx) = ctx {
|
||||
ctx.notify();
|
||||
let changes = self.edits_since(old_version).collect::<Vec<_>>();
|
||||
if !changes.is_empty() {
|
||||
self.did_edit(changes, was_dirty, ctx);
|
||||
if self.edits_since(old_version).next().is_some() {
|
||||
self.did_edit(was_dirty, ctx);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1086,9 +1084,8 @@ impl Buffer {
|
||||
|
||||
if let Some(ctx) = ctx {
|
||||
ctx.notify();
|
||||
let changes = self.edits_since(old_version).collect::<Vec<_>>();
|
||||
if !changes.is_empty() {
|
||||
self.did_edit(changes, was_dirty, ctx);
|
||||
if self.edits_since(old_version).next().is_some() {
|
||||
self.did_edit(was_dirty, ctx);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1113,9 +1110,8 @@ impl Buffer {
|
||||
|
||||
if let Some(ctx) = ctx {
|
||||
ctx.notify();
|
||||
let changes = self.edits_since(old_version).collect::<Vec<_>>();
|
||||
if !changes.is_empty() {
|
||||
self.did_edit(changes, was_dirty, ctx);
|
||||
if self.edits_since(old_version).next().is_some() {
|
||||
self.did_edit(was_dirty, ctx);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1794,7 +1790,7 @@ impl Snapshot {
|
||||
|
||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||
pub enum Event {
|
||||
Edited(Vec<Edit>),
|
||||
Edited,
|
||||
Dirtied,
|
||||
Saved,
|
||||
FileHandleChanged,
|
||||
@@ -2403,34 +2399,11 @@ mod tests {
|
||||
let buffer_1_events = buffer_1_events.borrow();
|
||||
assert_eq!(
|
||||
*buffer_1_events,
|
||||
vec![
|
||||
Event::Edited(vec![Edit {
|
||||
old_range: 2..4,
|
||||
new_range: 2..5
|
||||
}]),
|
||||
Event::Dirtied,
|
||||
Event::Edited(vec![Edit {
|
||||
old_range: 5..5,
|
||||
new_range: 5..7
|
||||
}]),
|
||||
Event::Edited(vec![Edit {
|
||||
old_range: 5..7,
|
||||
new_range: 5..5
|
||||
}]),
|
||||
]
|
||||
vec![Event::Edited, Event::Dirtied, Event::Edited, Event::Edited]
|
||||
);
|
||||
|
||||
let buffer_2_events = buffer_2_events.borrow();
|
||||
assert_eq!(
|
||||
*buffer_2_events,
|
||||
vec![
|
||||
Event::Edited(vec![Edit {
|
||||
old_range: 2..4,
|
||||
new_range: 2..5
|
||||
},]),
|
||||
Event::Dirtied
|
||||
]
|
||||
);
|
||||
assert_eq!(*buffer_2_events, vec![Event::Edited, Event::Dirtied]);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -2970,16 +2943,7 @@ mod tests {
|
||||
model.update(app, |buffer, ctx| {
|
||||
assert!(buffer.text() == "ac");
|
||||
assert!(buffer.is_dirty());
|
||||
assert_eq!(
|
||||
*events.borrow(),
|
||||
&[
|
||||
Event::Edited(vec![Edit {
|
||||
old_range: 1..2,
|
||||
new_range: 1..1
|
||||
}]),
|
||||
Event::Dirtied
|
||||
]
|
||||
);
|
||||
assert_eq!(*events.borrow(), &[Event::Edited, Event::Dirtied]);
|
||||
events.borrow_mut().clear();
|
||||
|
||||
buffer.did_save(buffer.version(), ctx);
|
||||
@@ -3001,17 +2965,7 @@ mod tests {
|
||||
assert!(buffer.is_dirty());
|
||||
assert_eq!(
|
||||
*events.borrow(),
|
||||
&[
|
||||
Event::Edited(vec![Edit {
|
||||
old_range: 1..1,
|
||||
new_range: 1..2
|
||||
}]),
|
||||
Event::Dirtied,
|
||||
Event::Edited(vec![Edit {
|
||||
old_range: 2..2,
|
||||
new_range: 2..3
|
||||
}]),
|
||||
],
|
||||
&[Event::Edited, Event::Dirtied, Event::Edited],
|
||||
);
|
||||
events.borrow_mut().clear();
|
||||
|
||||
@@ -3023,13 +2977,7 @@ mod tests {
|
||||
});
|
||||
|
||||
model.update(app, |_, _| {
|
||||
assert_eq!(
|
||||
*events.borrow(),
|
||||
&[Event::Edited(vec![Edit {
|
||||
old_range: 1..3,
|
||||
new_range: 1..1
|
||||
},])]
|
||||
);
|
||||
assert_eq!(*events.borrow(), &[Event::Edited]);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user