Make entry_for_path return a reference instead of cloning (#37591)

Release Notes:

- N/A
This commit is contained in:
Michael Sloan
2025-09-05 00:26:37 +00:00
committed by GitHub
parent 0cb8a8983c
commit a660527036
7 changed files with 18 additions and 19 deletions
+3 -4
View File
@@ -493,14 +493,13 @@ impl MessageEditor {
let Some(entry) = self.project.read(cx).entry_for_path(&project_path, cx) else {
return Task::ready(Err(anyhow!("project entry not found")));
};
let Some(worktree) = self.project.read(cx).worktree_for_entry(entry.id, cx) else {
let directory_path = entry.path.clone();
let worktree_id = project_path.worktree_id;
let Some(worktree) = self.project.read(cx).worktree_for_id(worktree_id, cx) else {
return Task::ready(Err(anyhow!("worktree not found")));
};
let project = self.project.clone();
cx.spawn(async move |_, cx| {
let directory_path = entry.path.clone();
let worktree_id = worktree.read_with(cx, |worktree, _| worktree.id())?;
let file_paths = worktree.read_with(cx, |worktree, _cx| {
collect_files_in_path(worktree, &directory_path)
})?;
+6 -8
View File
@@ -4070,15 +4070,15 @@ impl AcpThreadView {
MentionUri::PastedImage => {}
MentionUri::Directory { abs_path } => {
let project = workspace.project();
let Some(entry) = project.update(cx, |project, cx| {
let Some(entry_id) = project.update(cx, |project, cx| {
let path = project.find_project_path(abs_path, cx)?;
project.entry_for_path(&path, cx)
project.entry_for_path(&path, cx).map(|entry| entry.id)
}) else {
return;
};
project.update(cx, |_, cx| {
cx.emit(project::Event::RevealInProjectPanel(entry.id));
cx.emit(project::Event::RevealInProjectPanel(entry_id));
});
}
MentionUri::Symbol {
@@ -4091,11 +4091,9 @@ impl AcpThreadView {
line_range,
} => {
let project = workspace.project();
let Some((path, _)) = project.update(cx, |project, cx| {
let path = project.find_project_path(path, cx)?;
let entry = project.entry_for_path(&path, cx)?;
Some((path, entry))
}) else {
let Some(path) =
project.update(cx, |project, cx| project.find_project_path(path, cx))
else {
return;
};
+2 -1
View File
@@ -987,7 +987,8 @@ impl MentionLink {
.read(cx)
.project()
.read(cx)
.entry_for_path(&project_path, cx)?;
.entry_for_path(&project_path, cx)?
.clone();
Some(MentionLink::File(project_path, entry))
}
Self::SYMBOL => {
+1 -1
View File
@@ -4352,7 +4352,7 @@ impl Project {
self.active_entry
}
pub fn entry_for_path(&self, path: &ProjectPath, cx: &App) -> Option<Entry> {
pub fn entry_for_path<'a>(&'a self, path: &ProjectPath, cx: &'a App) -> Option<&'a Entry> {
self.worktree_store.read(cx).entry_for_path(path, cx)
}
+1 -2
View File
@@ -203,11 +203,10 @@ impl WorktreeStore {
})
}
pub fn entry_for_path(&self, path: &ProjectPath, cx: &App) -> Option<Entry> {
pub fn entry_for_path<'a>(&'a self, path: &ProjectPath, cx: &'a App) -> Option<&'a Entry> {
self.worktree_for_id(path.worktree_id, cx)?
.read(cx)
.entry_for_path(&path.path)
.cloned()
}
pub fn create_worktree(
+4 -3
View File
@@ -594,9 +594,10 @@ impl project::ProjectItem for NotebookItem {
};
let id = project
.update(cx, |project, cx| project.entry_for_path(&path, cx))?
.context("Entry not found")?
.id;
.update(cx, |project, cx| {
project.entry_for_path(&path, cx).map(|entry| entry.id)
})?
.context("Entry not found")?;
cx.new(|_| NotebookItem {
path: abs_path,
+1
View File
@@ -3201,6 +3201,7 @@ pub mod tests {
.read(cx)
.entry_for_path(&(worktree_id, "a").into(), cx)
.expect("no entry for /a/ directory")
.clone()
});
assert!(a_dir_entry.is_dir());
window