Speed up anchor comparison when the version is the same

Antonio Scandurra created

Change summary

zed/src/editor/buffer/anchor.rs | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)

Detailed changes

zed/src/editor/buffer/anchor.rs 🔗

@@ -61,15 +61,26 @@ impl Anchor {
             (Anchor::End, _) | (_, Anchor::Start) => Ordering::Greater,
             (
                 Anchor::Middle {
-                    bias: self_bias, ..
+                    offset: self_offset,
+                    bias: self_bias,
+                    version: self_version,
                 },
                 Anchor::Middle {
-                    bias: other_bias, ..
+                    offset: other_offset,
+                    bias: other_bias,
+                    version: other_version,
                 },
-            ) => buffer
-                .full_offset_for_anchor(self)
-                .cmp(&buffer.full_offset_for_anchor(other))
-                .then_with(|| self_bias.cmp(&other_bias)),
+            ) => {
+                let offset_comparison = if self_version == other_version {
+                    self_offset.cmp(other_offset)
+                } else {
+                    buffer
+                        .full_offset_for_anchor(self)
+                        .cmp(&buffer.full_offset_for_anchor(other))
+                };
+
+                offset_comparison.then_with(|| self_bias.cmp(&other_bias))
+            }
         })
     }