🎨
This commit is contained in:
parent
45d6f5ab04
commit
8354d1520d
1 changed files with 19 additions and 8 deletions
|
@ -19,7 +19,13 @@ pub type FragmentId = Location;
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct FragmentList {
|
pub struct FragmentList {
|
||||||
snapshot: Mutex<Snapshot>,
|
snapshot: Mutex<Snapshot>,
|
||||||
buffers: HashMap<usize, (ModelHandle<Buffer>, text::Subscription, Vec<FragmentId>)>,
|
buffers: HashMap<usize, BufferState>,
|
||||||
|
}
|
||||||
|
|
||||||
|
struct BufferState {
|
||||||
|
buffer: ModelHandle<Buffer>,
|
||||||
|
subscription: text::Subscription,
|
||||||
|
fragments: Vec<FragmentId>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Default)]
|
#[derive(Clone, Default)]
|
||||||
|
@ -108,9 +114,13 @@ impl FragmentList {
|
||||||
.entry(props.buffer.id())
|
.entry(props.buffer.id())
|
||||||
.or_insert_with(|| {
|
.or_insert_with(|| {
|
||||||
let subscription = props.buffer.update(cx, |buffer, _| buffer.subscribe());
|
let subscription = props.buffer.update(cx, |buffer, _| buffer.subscribe());
|
||||||
(props.buffer.clone(), subscription, Default::default())
|
BufferState {
|
||||||
|
buffer: props.buffer.clone(),
|
||||||
|
subscription,
|
||||||
|
fragments: Default::default(),
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.2
|
.fragments
|
||||||
.push(id.clone());
|
.push(id.clone());
|
||||||
|
|
||||||
id
|
id
|
||||||
|
@ -120,15 +130,16 @@ impl FragmentList {
|
||||||
let mut snapshot = self.snapshot.lock();
|
let mut snapshot = self.snapshot.lock();
|
||||||
let mut patches = Vec::new();
|
let mut patches = Vec::new();
|
||||||
let mut fragments_to_edit = Vec::new();
|
let mut fragments_to_edit = Vec::new();
|
||||||
for (buffer, subscription, fragment_ids) in self.buffers.values() {
|
for buffer_state in self.buffers.values() {
|
||||||
let patch = subscription.consume();
|
let patch = buffer_state.subscription.consume();
|
||||||
if !patch.is_empty() {
|
if !patch.is_empty() {
|
||||||
let patch_ix = patches.len();
|
let patch_ix = patches.len();
|
||||||
patches.push(patch);
|
patches.push(patch);
|
||||||
fragments_to_edit.extend(
|
fragments_to_edit.extend(
|
||||||
fragment_ids
|
buffer_state
|
||||||
|
.fragments
|
||||||
.iter()
|
.iter()
|
||||||
.map(|fragment_id| (buffer, fragment_id, patch_ix)),
|
.map(|fragment_id| (&buffer_state.buffer, fragment_id, patch_ix)),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -440,7 +451,7 @@ mod tests {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[gpui::test(iterations = 10000)]
|
#[gpui::test(iterations = 100)]
|
||||||
fn test_location(mut rng: StdRng) {
|
fn test_location(mut rng: StdRng) {
|
||||||
let mut lhs = Default::default();
|
let mut lhs = Default::default();
|
||||||
let mut rhs = Default::default();
|
let mut rhs = Default::default();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue