From 6ee0d104d68ebe33757427b62d03f09cc0e90a3e Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Fri, 21 Apr 2023 10:08:52 -0700 Subject: [PATCH 1/4] Fix panic in remove active item --- crates/workspace/src/pane.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index c394ae4631b57de99c3c8e2c229942c4cfe7481f..089618ea205387c47e9c02793d939d5a891caf6c 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 Some(Task::Ready(Some(Ok(())))); + } 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); @@ -2098,6 +2102,21 @@ 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)); + + let task = workspace.update(cx, |workspace, cx| { + Pane::close_active_item(workspace, &CloseActiveItem, cx).unwrap() + }); + + assert!(task.await.is_ok()) + } + #[gpui::test] async fn test_add_item_with_new_item(cx: &mut TestAppContext) { cx.foreground().forbid_parking(); From 39512655aa2f236237e40ec3f948b55fa435c5fc Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Fri, 21 Apr 2023 10:38:36 -0700 Subject: [PATCH 2/4] Remove unused cyclic dependency from copilot crate Move notification handling earlier so that there are less copilot messages in the log --- Cargo.lock | 1 - crates/copilot/Cargo.toml | 1 - crates/copilot/src/copilot.rs | 15 ++++++++------- crates/copilot/src/request.rs | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b3e5c38a46c74975ee71372ce29477963c92a41e..4c1e7de4350cf1c061e3b24d7d0babeb0ee00659 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1358,7 +1358,6 @@ dependencies = [ "smol", "theme", "util", - "workspace", ] [[package]] diff --git a/crates/copilot/Cargo.toml b/crates/copilot/Cargo.toml index bfafdbc0ca9522fe1553ee4ac38f4fc934007020..f4d75cc582d9d26957e697b744f5f43054b7d149 100644 --- a/crates/copilot/Cargo.toml +++ b/crates/copilot/Cargo.toml @@ -47,4 +47,3 @@ lsp = { path = "../lsp", features = ["test-support"] } rpc = { path = "../rpc", features = ["test-support"] } settings = { path = "../settings", 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 182db084a1d2cc0452d545b102abafb7fc7d8861..b2da730c3fde265e8fc13b6d971d1fed4a651fad 100644 --- a/crates/copilot/src/copilot.rs +++ b/crates/copilot/src/copilot.rs @@ -378,13 +378,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 { @@ -405,6 +398,14 @@ impl Copilot { ) .detach(); + let server = server.initialize(Default::default()).await?; + + let status = server + .request::(request::CheckStatusParams { + local_checks_only: false, + }) + .await?; + server .request::(request::SetEditorInfoParams { editor_info: request::EditorInfo { diff --git a/crates/copilot/src/request.rs b/crates/copilot/src/request.rs index 43b5109d027dd2bcc62d1e9a5cb48a5996e84fd7..0f9a478b910dd7fc5e87551d4cfe18408cc65451 100644 --- a/crates/copilot/src/request.rs +++ b/crates/copilot/src/request.rs @@ -143,8 +143,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, } From aa2af53f5609c0d80a4bf0edeb930fc5572aa62f Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Fri, 21 Apr 2023 10:44:27 -0700 Subject: [PATCH 3/4] Align return of close_active_item to match original format --- crates/workspace/src/pane.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index 089618ea205387c47e9c02793d939d5a891caf6c..a120523131a693492ea57ea6a1a799d395b744c7 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -787,7 +787,7 @@ impl Pane { let pane = pane_handle.read(cx); if pane.items.is_empty() { - return Some(Task::Ready(Some(Ok(())))); + return None; } let active_item_id = pane.items[pane.active_item_index].id(); From b8fd6435d76acfc7cb447f50e3af05f34bd87922 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Fri, 21 Apr 2023 10:48:34 -0700 Subject: [PATCH 4/4] Fix test covering this case --- crates/workspace/src/pane.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index a120523131a693492ea57ea6a1a799d395b744c7..38e9bb5b54f0acd8378fee8dc1e91f7f0229d107 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -2110,11 +2110,9 @@ mod tests { let project = Project::test(fs, None, cx).await; let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); - let task = workspace.update(cx, |workspace, cx| { - Pane::close_active_item(workspace, &CloseActiveItem, cx).unwrap() + workspace.update(cx, |workspace, cx| { + assert!(Pane::close_active_item(workspace, &CloseActiveItem, cx).is_none()) }); - - assert!(task.await.is_ok()) } #[gpui::test]