Fix hover links in channel buffers (#7393)

Conrad Irwin created

Release Notes:

- N/A

Change summary

crates/editor/src/editor.rs      | 17 +++++++++++------
crates/editor/src/hover_links.rs |  9 ++++-----
2 files changed, 15 insertions(+), 11 deletions(-)

Detailed changes

crates/editor/src/editor.rs 🔗

@@ -7264,10 +7264,6 @@ impl Editor {
         split: bool,
         cx: &mut ViewContext<Editor>,
     ) {
-        let Some(workspace) = self.workspace() else {
-            return;
-        };
-        let pane = workspace.read(cx).active_pane().clone();
         // If there is one definition, just open it directly
         if definitions.len() == 1 {
             let definition = definitions.pop().unwrap();
@@ -7285,6 +7281,11 @@ impl Editor {
                 let target = target_task.await.context("target resolution task")?;
                 if let Some(target) = target {
                     editor.update(&mut cx, |editor, cx| {
+                        let Some(workspace) = editor.workspace() else {
+                            return;
+                        };
+                        let pane = workspace.read(cx).active_pane().clone();
+
                         let range = target.range.to_offset(target.buffer.read(cx));
                         let range = editor.range_for_match(&range);
                         if Some(&target.buffer) == editor.buffer.read(cx).as_singleton().as_ref() {
@@ -7325,7 +7326,7 @@ impl Editor {
         } else if !definitions.is_empty() {
             let replica_id = self.replica_id(cx);
             cx.spawn(|editor, mut cx| async move {
-                let (title, location_tasks) = editor
+                let (title, location_tasks, workspace) = editor
                     .update(&mut cx, |editor, cx| {
                         let title = definitions
                             .iter()
@@ -7353,7 +7354,7 @@ impl Editor {
                                 HoverLink::Url(_) => Task::ready(Ok(None)),
                             })
                             .collect::<Vec<_>>();
-                        (title, location_tasks)
+                        (title, location_tasks, editor.workspace().clone())
                     })
                     .context("location tasks preparation")?;
 
@@ -7363,6 +7364,10 @@ impl Editor {
                     .filter_map(|location| location.transpose())
                     .collect::<Result<_>>()
                     .context("location tasks")?;
+
+                let Some(workspace) = workspace else {
+                    return Ok(());
+                };
                 workspace
                     .update(&mut cx, |workspace, cx| {
                         Self::open_locations_in_multibuffer(

crates/editor/src/hover_links.rs 🔗

@@ -394,10 +394,6 @@ pub fn show_link_definition(
         return;
     };
 
-    let Some(project) = editor.project.clone() else {
-        return;
-    };
-
     let same_kind = hovered_link_state.preferred_kind == preferred_kind
         || hovered_link_state
             .links
@@ -419,6 +415,7 @@ pub fn show_link_definition(
     } else {
         editor.hide_hovered_link(cx)
     }
+    let project = editor.project.clone();
 
     let snapshot = snapshot.buffer_snapshot.clone();
     hovered_link_state.task = Some(cx.spawn(|this, mut cx| {
@@ -436,7 +433,7 @@ pub fn show_link_definition(
                             )
                         })
                         .ok()
-                    } else {
+                    } else if let Some(project) = project {
                         // query the LSP for definition info
                         project
                             .update(&mut cx, |project, cx| match preferred_kind {
@@ -468,6 +465,8 @@ pub fn show_link_definition(
                                     definition_result.into_iter().map(HoverLink::Text).collect(),
                                 )
                             })
+                    } else {
+                        None
                     }
                 }
                 TriggerPoint::InlayHint(highlight, lsp_location, server_id) => Some((