From 8450d63ed6aee8f8c5d6eb3b182e246c2b995a87 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Sat, 25 May 2024 15:24:15 -0400 Subject: [PATCH] Remove potential crash when missing worktrees (#12291) This PR removes a potential crash when there are no worktrees in the project. Present on Nightly only. Release Notes: - N/A --- crates/assistant/src/assistant_panel.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/crates/assistant/src/assistant_panel.rs b/crates/assistant/src/assistant_panel.rs index 41fc176f28b11a8812fd53167e6ddc3a1dbbfd2f..e753d75b2706df01164c608ef2c29d7ab82c035f 100644 --- a/crates/assistant/src/assistant_panel.rs +++ b/crates/assistant/src/assistant_panel.rs @@ -1132,9 +1132,10 @@ impl AssistantPanel { let lsp_adapter_delegate = workspace .update(cx, |workspace, cx| { - make_lsp_adapter_delegate(workspace.project(), cx) + make_lsp_adapter_delegate(workspace.project(), cx).log_err() }) - .log_err(); + .log_err() + .flatten(); cx.spawn(|this, mut cx| async move { let saved_conversation = SavedConversation::load(&path, fs.as_ref()).await?; @@ -2749,7 +2750,7 @@ impl ConversationEditor { ) -> Self { let telemetry = workspace.read(cx).client().telemetry().clone(); let project = workspace.read(cx).project().clone(); - let lsp_adapter_delegate = make_lsp_adapter_delegate(&project, cx); + let lsp_adapter_delegate = make_lsp_adapter_delegate(&project, cx).log_err(); let conversation = cx.new_model(|cx| { Conversation::new( @@ -2757,7 +2758,7 @@ impl ConversationEditor { language_registry, slash_command_registry, Some(telemetry), - Some(lsp_adapter_delegate), + lsp_adapter_delegate, cx, ) }); @@ -3934,14 +3935,14 @@ fn merge_ranges(ranges: &mut Vec>, buffer: &MultiBufferSnapshot) { fn make_lsp_adapter_delegate( project: &Model, cx: &mut AppContext, -) -> Arc { +) -> Result> { project.update(cx, |project, cx| { // TODO: Find the right worktree. let worktree = project .worktrees() .next() - .expect("expected at least one worktree"); - ProjectLspAdapterDelegate::new(project, &worktree, cx) + .ok_or_else(|| anyhow!("no worktrees when constructing ProjectLspAdapterDelegate"))?; + Ok(ProjectLspAdapterDelegate::new(project, &worktree, cx) as Arc) }) }