Update old snapshot when only the tab size changes

This commit is contained in:
Antonio Scandurra 2022-08-03 12:23:02 +02:00
parent 1e94eb74f4
commit 3174b08082

View file

@ -34,28 +34,21 @@ impl TabMap {
version: old_snapshot.version,
};
if old_snapshot.tab_size != new_snapshot.tab_size {
new_snapshot.version += 1;
let edits = vec![TabEdit {
old: TabPoint::zero()..old_snapshot.max_point(),
new: TabPoint::zero()..new_snapshot.max_point(),
}];
return (new_snapshot, edits);
}
if old_snapshot.fold_snapshot.version != new_snapshot.fold_snapshot.version {
new_snapshot.version += 1;
}
let old_max_offset = old_snapshot.fold_snapshot.len();
let mut tab_edits = Vec::with_capacity(fold_edits.len());
if old_snapshot.tab_size == new_snapshot.tab_size {
for fold_edit in &mut fold_edits {
let mut delta = 0;
for chunk in
old_snapshot
.fold_snapshot
.chunks(fold_edit.old.end..old_max_offset, false, None)
{
for chunk in old_snapshot.fold_snapshot.chunks(
fold_edit.old.end..old_max_offset,
false,
None,
) {
let patterns: &[_] = &['\t', '\n'];
if let Some(ix) = chunk.text.find(patterns) {
if &chunk.text[ix..ix + 1] == "\t" {
@ -94,6 +87,13 @@ impl TabMap {
new: new_snapshot.to_tab_point(new_start)..new_snapshot.to_tab_point(new_end),
});
}
} else {
new_snapshot.version += 1;
tab_edits.push(TabEdit {
old: TabPoint::zero()..old_snapshot.max_point(),
new: TabPoint::zero()..new_snapshot.max_point(),
});
}
*old_snapshot = new_snapshot;
(old_snapshot.clone(), tab_edits)