:art:

Antonio Scandurra created

Change summary

crates/language/src/fragment_list.rs | 27 +++++++++++++++++++--------
1 file changed, 19 insertions(+), 8 deletions(-)

Detailed changes

crates/language/src/fragment_list.rs 🔗

@@ -19,7 +19,13 @@ pub type FragmentId = Location;
 #[derive(Default)]
 pub struct FragmentList {
     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)]
@@ -108,9 +114,13 @@ impl FragmentList {
             .entry(props.buffer.id())
             .or_insert_with(|| {
                 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());
 
         id
@@ -120,15 +130,16 @@ impl FragmentList {
         let mut snapshot = self.snapshot.lock();
         let mut patches = Vec::new();
         let mut fragments_to_edit = Vec::new();
-        for (buffer, subscription, fragment_ids) in self.buffers.values() {
-            let patch = subscription.consume();
+        for buffer_state in self.buffers.values() {
+            let patch = buffer_state.subscription.consume();
             if !patch.is_empty() {
                 let patch_ix = patches.len();
                 patches.push(patch);
                 fragments_to_edit.extend(
-                    fragment_ids
+                    buffer_state
+                        .fragments
                         .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) {
         let mut lhs = Default::default();
         let mut rhs = Default::default();