Avoid cloning entry in `Snapshot::entry_for_path`

Antonio Scandurra created

Change summary

zed/src/sum_tree/mod.rs | 2 +-
zed/src/worktree.rs     | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)

Detailed changes

zed/src/sum_tree/mod.rs 🔗

@@ -22,7 +22,7 @@ pub trait KeyedItem: Item {
     fn key(&self) -> Self::Key;
 }
 
-pub trait Dimension<'a, Summary: Default>: 'a + Clone + fmt::Debug + Default {
+pub trait Dimension<'a, Summary: Default>: Clone + fmt::Debug + Default {
     fn add_summary(&mut self, summary: &'a Summary);
 }
 

zed/src/worktree.rs 🔗

@@ -244,7 +244,7 @@ impl Snapshot {
         FileIter::visible(self, start)
     }
 
-    pub fn root_entry(&self) -> Entry {
+    pub fn root_entry(&self) -> &Entry {
         self.entry_for_path("").unwrap()
     }
 
@@ -256,10 +256,10 @@ impl Snapshot {
         &self.root_name_chars
     }
 
-    fn entry_for_path(&self, path: impl AsRef<Path>) -> Option<Entry> {
+    fn entry_for_path(&self, path: impl AsRef<Path>) -> Option<&Entry> {
         let mut cursor = self.entries.cursor::<_, ()>();
         if cursor.seek(&PathSearch::Exact(path.as_ref()), SeekBias::Left) {
-            cursor.item().cloned()
+            cursor.item()
         } else {
             None
         }
@@ -532,7 +532,7 @@ impl<'a> Default for PathSearch<'a> {
     }
 }
 
-impl<'a> sum_tree::Dimension<'a, EntrySummary> for PathSearch<'a> {
+impl<'a: 'b, 'b> sum_tree::Dimension<'a, EntrySummary> for PathSearch<'b> {
     fn add_summary(&mut self, summary: &'a EntrySummary) {
         *self = Self::Exact(summary.max_path.as_ref());
     }