From 389ce38e5df934b6ebd13a0a980fa0d0da3b9113 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Sat, 22 Apr 2023 05:53:48 +1200 Subject: [PATCH] Merge pull request #2402 from zed-industries/fix-panics Fix panic in pane.rs --- Cargo.lock | 1 - crates/copilot/Cargo.toml | 1 - crates/copilot/src/copilot.rs | 14 +++++++------- crates/copilot/src/request.rs | 2 +- crates/workspace/src/pane.rs | 17 +++++++++++++++++ 5 files changed, 25 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 653eec0524446909dff06534437b63f70dff97c4..9c007af3faba7b0b3deef35ccdedcb9a23177229 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1354,7 +1354,6 @@ dependencies = [ "smol", "theme", "util", - "workspace", ] [[package]] diff --git a/crates/copilot/Cargo.toml b/crates/copilot/Cargo.toml index 9d68edd6b5b6a626d7a082d132c1d135a8fd2d84..e0359b79ef858b5f01f502aaf0f200869d72175c 100644 --- a/crates/copilot/Cargo.toml +++ b/crates/copilot/Cargo.toml @@ -44,4 +44,3 @@ language = { path = "../language", features = ["test-support"] } settings = { path = "../settings", features = ["test-support"] } lsp = { path = "../lsp", features = ["test-support"] } util = { path = "../util", features = ["test-support"] } -workspace = { path = "../workspace", features = ["test-support"] } diff --git a/crates/copilot/src/copilot.rs b/crates/copilot/src/copilot.rs index 8229aaa36a946440d45804f68cd7f580084e5cbe..f2b7a1b5022a348bab8e105f58dece0f55c4aa73 100644 --- a/crates/copilot/src/copilot.rs +++ b/crates/copilot/src/copilot.rs @@ -249,13 +249,6 @@ impl Copilot { cx.clone(), )?; - let server = server.initialize(Default::default()).await?; - let status = server - .request::(request::CheckStatusParams { - local_checks_only: false, - }) - .await?; - server .on_notification::(|params, _cx| { match params.level { @@ -276,6 +269,13 @@ impl Copilot { ) .detach(); + let server = server.initialize(Default::default()).await?; + let status = server + .request::(request::CheckStatusParams { + local_checks_only: false, + }) + .await?; + anyhow::Ok((server, status)) }; diff --git a/crates/copilot/src/request.rs b/crates/copilot/src/request.rs index 415f160ea3a9335d8272c2122e2db285f3f16290..334db1758edfa4905fc74ec2a362c18711079770 100644 --- a/crates/copilot/src/request.rs +++ b/crates/copilot/src/request.rs @@ -146,8 +146,8 @@ pub enum LogMessage {} #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct LogMessageParams { - pub message: String, pub level: u8, + pub message: String, pub metadata_str: String, pub extra: Vec, } diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index a54aed96f464bdcfff03e526ecdb8cd9f5c37963..cab06bb7f9c8c8a07c0a020ad2f8a7a8a27b6e91 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -785,6 +785,10 @@ impl Pane { ) -> Option>> { let pane_handle = workspace.active_pane().clone(); let pane = pane_handle.read(cx); + + if pane.items.is_empty() { + return None; + } let active_item_id = pane.items[pane.active_item_index].id(); let task = Self::close_item_by_id(workspace, pane_handle, active_item_id, cx); @@ -2078,6 +2082,19 @@ mod tests { use gpui::{executor::Deterministic, TestAppContext}; use project::FakeFs; + #[gpui::test] + async fn test_remove_active_empty(cx: &mut TestAppContext) { + Settings::test_async(cx); + let fs = FakeFs::new(cx.background()); + + let project = Project::test(fs, None, cx).await; + let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + + workspace.update(cx, |workspace, cx| { + assert!(Pane::close_active_item(workspace, &CloseActiveItem, cx).is_none()) + }); + } + #[gpui::test] async fn test_add_item_with_new_item(cx: &mut TestAppContext) { cx.foreground().forbid_parking();