Bump FoldSnapshot version if excerpt gets edited outside of its bounds
This will cause layers above `FoldMap` to grab a fresh snapshot of the `FoldMap` and, as a result, of the underlying `MultiBufferSnapshot`. It is a necessary change because, even though the coordinate space is not affected, a buffer edit taking place *before* an excerpt range could cause the excerpt buffer rows to change, e.g. if lines were added or removed. This manifested itself in a randomized test.
This commit is contained in:
parent
efd9563b25
commit
c0bf4a5bfd
2 changed files with 12 additions and 1 deletions
|
@ -271,7 +271,8 @@ impl FoldMap {
|
|||
) -> Vec<FoldEdit> {
|
||||
if buffer_edits.is_empty() {
|
||||
let mut buffer = self.buffer.lock();
|
||||
if buffer.parse_count() != new_buffer.parse_count()
|
||||
if buffer.edit_count() != new_buffer.edit_count()
|
||||
|| buffer.parse_count() != new_buffer.parse_count()
|
||||
|| buffer.diagnostics_update_count() != new_buffer.diagnostics_update_count()
|
||||
|| buffer.trailing_excerpt_update_count()
|
||||
!= new_buffer.trailing_excerpt_update_count()
|
||||
|
|
|
@ -93,6 +93,7 @@ pub struct MultiBufferSnapshot {
|
|||
parse_count: usize,
|
||||
diagnostics_update_count: usize,
|
||||
trailing_excerpt_update_count: usize,
|
||||
edit_count: usize,
|
||||
is_dirty: bool,
|
||||
has_conflict: bool,
|
||||
}
|
||||
|
@ -1151,6 +1152,7 @@ impl MultiBuffer {
|
|||
let mut diagnostics_updated = false;
|
||||
let mut is_dirty = false;
|
||||
let mut has_conflict = false;
|
||||
let mut edited = false;
|
||||
let mut buffers = self.buffers.borrow_mut();
|
||||
for buffer_state in buffers.values_mut() {
|
||||
let buffer = buffer_state.buffer.read(cx);
|
||||
|
@ -1186,11 +1188,15 @@ impl MultiBuffer {
|
|||
);
|
||||
}
|
||||
|
||||
edited |= buffer_edited;
|
||||
reparsed |= buffer_reparsed;
|
||||
diagnostics_updated |= buffer_diagnostics_updated;
|
||||
is_dirty |= buffer.is_dirty();
|
||||
has_conflict |= buffer.has_conflict();
|
||||
}
|
||||
if edited {
|
||||
snapshot.edit_count += 1;
|
||||
}
|
||||
if reparsed {
|
||||
snapshot.parse_count += 1;
|
||||
}
|
||||
|
@ -2172,6 +2178,10 @@ impl MultiBufferSnapshot {
|
|||
})
|
||||
}
|
||||
|
||||
pub fn edit_count(&self) -> usize {
|
||||
self.edit_count
|
||||
}
|
||||
|
||||
pub fn parse_count(&self) -> usize {
|
||||
self.parse_count
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue