Implement BlockMapWriter::remove
Co-Authored-By: Max Brunsfeld <maxbrunsfeld@gmail.com>
This commit is contained in:
parent
7b12c1c9e0
commit
7d1ba6455b
1 changed files with 48 additions and 19 deletions
|
@ -381,8 +381,37 @@ impl<'a> BlockMapWriter<'a> {
|
||||||
ids
|
ids
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn remove(&mut self, _: HashSet<BlockId>, _: &AppContext) {
|
pub fn remove(&mut self, block_ids: HashSet<BlockId>, cx: &AppContext) {
|
||||||
todo!()
|
let buffer = self.0.buffer.read(cx);
|
||||||
|
let wrap_snapshot = &*self.0.wrap_snapshot.lock();
|
||||||
|
let mut edits = Vec::new();
|
||||||
|
let mut last_block_buffer_row = None;
|
||||||
|
self.0.blocks.retain(|block| {
|
||||||
|
if block_ids.contains(&block.id) {
|
||||||
|
let buffer_row = block.position.to_point(buffer).row;
|
||||||
|
if last_block_buffer_row != Some(buffer_row) {
|
||||||
|
last_block_buffer_row = Some(buffer_row);
|
||||||
|
let start_row = wrap_snapshot
|
||||||
|
.from_point(Point::new(buffer_row, 0), Bias::Left)
|
||||||
|
.row();
|
||||||
|
let end_row = wrap_snapshot
|
||||||
|
.from_point(
|
||||||
|
Point::new(buffer_row, buffer.line_len(buffer_row)),
|
||||||
|
Bias::Left,
|
||||||
|
)
|
||||||
|
.row()
|
||||||
|
+ 1;
|
||||||
|
edits.push(Edit {
|
||||||
|
old: start_row..end_row,
|
||||||
|
new: start_row..end_row,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
self.0.sync(wrap_snapshot, edits, cx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -895,24 +924,24 @@ mod tests {
|
||||||
expected_blocks.push((block_id, props));
|
expected_blocks.push((block_id, props));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 40..=59 if !expected_blocks.is_empty() => {
|
40..=59 if !expected_blocks.is_empty() => {
|
||||||
// let block_count = rng.gen_range(1..=4.min(expected_blocks.len()));
|
let block_count = rng.gen_range(1..=4.min(expected_blocks.len()));
|
||||||
// let block_ids_to_remove = (0..block_count)
|
let block_ids_to_remove = (0..block_count)
|
||||||
// .map(|_| {
|
.map(|_| {
|
||||||
// expected_blocks
|
expected_blocks
|
||||||
// .remove(rng.gen_range(0..expected_blocks.len()))
|
.remove(rng.gen_range(0..expected_blocks.len()))
|
||||||
// .0
|
.0
|
||||||
// })
|
})
|
||||||
// .collect();
|
.collect();
|
||||||
|
|
||||||
// let (folds_snapshot, fold_edits) = fold_map.read(cx);
|
let (folds_snapshot, fold_edits) = fold_map.read(cx);
|
||||||
// let (tabs_snapshot, tab_edits) = tab_map.sync(folds_snapshot, fold_edits);
|
let (tabs_snapshot, tab_edits) = tab_map.sync(folds_snapshot, fold_edits);
|
||||||
// let (wraps_snapshot, wrap_edits) = wrap_map.update(cx, |wrap_map, cx| {
|
let (wraps_snapshot, wrap_edits) = wrap_map.update(cx, |wrap_map, cx| {
|
||||||
// wrap_map.sync(tabs_snapshot, tab_edits, cx)
|
wrap_map.sync(tabs_snapshot, tab_edits, cx)
|
||||||
// });
|
});
|
||||||
// let mut block_map = block_map.write(wraps_snapshot, wrap_edits, cx);
|
let mut block_map = block_map.write(wraps_snapshot, wrap_edits, cx);
|
||||||
// block_map.remove(block_ids_to_remove, cx);
|
block_map.remove(block_ids_to_remove, cx);
|
||||||
// }
|
}
|
||||||
_ => {
|
_ => {
|
||||||
buffer.update(cx, |buffer, _| {
|
buffer.update(cx, |buffer, _| {
|
||||||
buffer.randomly_edit(&mut rng, 1);
|
buffer.randomly_edit(&mut rng, 1);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue