From 010eba509c07b642fea09a49e9932b90abd3be89 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Mon, 20 Feb 2023 09:42:44 -0800 Subject: [PATCH] Make Project::save_buffer and ::save_buffers into methods --- crates/collab/src/tests/integration_tests.rs | 4 ++-- .../src/tests/randomized_integration_tests.rs | 2 +- crates/editor/src/items.rs | 6 ++++-- crates/project/src/project.rs | 17 ++++++++++------- crates/project/src/project_tests.rs | 12 ++++++++---- 5 files changed, 25 insertions(+), 16 deletions(-) diff --git a/crates/collab/src/tests/integration_tests.rs b/crates/collab/src/tests/integration_tests.rs index 8b922167342c36c8efc69ac8ca36bc5baa383474..f2cb2eddbb56c74fe5feaca2b7a43ddc082a34c0 100644 --- a/crates/collab/src/tests/integration_tests.rs +++ b/crates/collab/src/tests/integration_tests.rs @@ -2244,7 +2244,7 @@ async fn test_propagate_saves_and_fs_changes( }); // Edit the buffer as the host and concurrently save as guest B. - let save_b = cx_b.update(|cx| Project::save_buffer(buffer_b.clone(), cx)); + let save_b = project_b.update(cx_b, |project, cx| project.save_buffer(buffer_b.clone(), cx)); buffer_a.update(cx_a, |buf, cx| buf.edit([(0..0, "hi-a, ")], None, cx)); save_b.await.unwrap(); assert_eq!( @@ -2917,7 +2917,7 @@ async fn test_buffer_conflict_after_save( assert!(!buf.has_conflict()); }); - cx_b.update(|cx| Project::save_buffer(buffer_b.clone(), cx)) + project_b.update(cx_b, |project, cx| project.save_buffer(buffer_b.clone(), cx)) .await .unwrap(); cx_a.foreground().forbid_parking(); diff --git a/crates/collab/src/tests/randomized_integration_tests.rs b/crates/collab/src/tests/randomized_integration_tests.rs index 434006c5c145bfee78bb93623d45540b7b161363..950f12d1869168515eba1953d5857e50c74b1e51 100644 --- a/crates/collab/src/tests/randomized_integration_tests.rs +++ b/crates/collab/src/tests/randomized_integration_tests.rs @@ -1073,7 +1073,7 @@ async fn randomly_query_and_mutate_buffers( ); buffer.version() }); - let save = cx.update(|cx| Project::save_buffer(buffer, cx)); + let save = project.update(cx, |project, cx| project.save_buffer(buffer, cx)); let save = cx.background().spawn(async move { let (saved_version, _, _) = save .await diff --git a/crates/editor/src/items.rs b/crates/editor/src/items.rs index aac8701a2295669be2452b09294148401d360ad1..c3a446faa7e89dd249db3a8ad0cfdceee973dd09 100644 --- a/crates/editor/src/items.rs +++ b/crates/editor/src/items.rs @@ -610,9 +610,11 @@ impl Item for Editor { self.report_event("save editor", cx); let format = self.perform_format(project.clone(), cx); let buffers = self.buffer().clone().read(cx).all_buffers(); - cx.spawn(|_, mut cx| async move { + cx.as_mut().spawn(|mut cx| async move { format.await?; - cx.update(|cx| Project::save_buffers(buffers, cx)).await?; + project + .update(&mut cx, |project, cx| project.save_buffers(buffers, cx)) + .await?; Ok(()) }) } diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index 3a0e0a43c050ef6f73e1ac5170196e3400549a85..8ed37a003c748bdea86472c10179cf40e1d80457 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -1429,21 +1429,23 @@ impl Project { } pub fn save_buffers( + &self, buffers: HashSet>, - cx: &mut MutableAppContext, + cx: &mut ModelContext, ) -> Task> { - cx.spawn(|mut cx| async move { + cx.spawn(|this, mut cx| async move { let save_tasks = buffers .into_iter() - .map(|buffer| cx.update(|cx| Self::save_buffer(buffer, cx))); + .map(|buffer| this.update(&mut cx, |this, cx| this.save_buffer(buffer, cx))); try_join_all(save_tasks).await?; Ok(()) }) } pub fn save_buffer( + &self, buffer: ModelHandle, - cx: &mut MutableAppContext, + cx: &mut ModelContext, ) -> Task> { let Some(file) = File::from_dyn(buffer.read(cx).file()) else { return Task::ready(Err(anyhow!("buffer doesn't have a file"))); @@ -1460,7 +1462,7 @@ impl Project { &mut self, buffer: ModelHandle, abs_path: PathBuf, - cx: &mut ModelContext, + cx: &mut ModelContext, ) -> Task> { let worktree_task = self.find_or_create_local_worktree(&abs_path, true, cx); let old_path = @@ -5186,8 +5188,9 @@ impl Project { }) .await; - let (saved_version, fingerprint, mtime) = - cx.update(|cx| Self::save_buffer(buffer, cx)).await?; + let (saved_version, fingerprint, mtime) = this + .update(&mut cx, |this, cx| this.save_buffer(buffer, cx)) + .await?; Ok(proto::BufferSaved { project_id, buffer_id, diff --git a/crates/project/src/project_tests.rs b/crates/project/src/project_tests.rs index fa3bf9dff82177032ce220d36ed5eb1afc53fda2..2f9f92af4e1e0d3415a2c52ffd401e41fd2005ea 100644 --- a/crates/project/src/project_tests.rs +++ b/crates/project/src/project_tests.rs @@ -243,7 +243,8 @@ async fn test_managing_language_servers( ); // Save notifications are reported to all servers. - cx.update(|cx| Project::save_buffer(toml_buffer, cx)) + project + .update(cx, |project, cx| project.save_buffer(toml_buffer, cx)) .await .unwrap(); assert_eq!( @@ -2087,7 +2088,8 @@ async fn test_save_file(cx: &mut gpui::TestAppContext) { buffer.edit([(0..0, "a line of text.\n".repeat(10 * 1024))], None, cx); }); - cx.update(|cx| Project::save_buffer(buffer.clone(), cx)) + project + .update(cx, |project, cx| project.save_buffer(buffer.clone(), cx)) .await .unwrap(); @@ -2115,7 +2117,8 @@ async fn test_save_in_single_file_worktree(cx: &mut gpui::TestAppContext) { buffer.edit([(0..0, "a line of text.\n".repeat(10 * 1024))], None, cx); }); - cx.update(|cx| Project::save_buffer(buffer.clone(), cx)) + project + .update(cx, |project, cx| project.save_buffer(buffer.clone(), cx)) .await .unwrap(); @@ -2704,7 +2707,8 @@ async fn test_buffer_line_endings(cx: &mut gpui::TestAppContext) { buffer2.update(cx, |buffer, cx| { buffer.set_text("one\ntwo\nthree\nfour\n", cx); }); - cx.update(|cx| Project::save_buffer(buffer2, cx)) + project + .update(cx, |project, cx| project.save_buffer(buffer2, cx)) .await .unwrap(); assert_eq!(