Update old snapshot when only the tab size changes
This commit is contained in:
parent
1e94eb74f4
commit
3174b08082
1 changed files with 44 additions and 44 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue