Return a Task<Result<()>> in {ItemView,Buffer,MultiBuffer}::save

This commit is contained in:
Antonio Scandurra
2022-01-20 09:58:24 +01:00
parent 634340dd84
commit 71082d4cdc
7 changed files with 27 additions and 32 deletions
+4 -6
View File
@@ -160,20 +160,18 @@ impl ItemView for Editor {
self.project_entry(cx).is_some()
}
fn save(&mut self, cx: &mut ViewContext<Self>) -> Result<Task<Result<()>>> {
fn save(&mut self, cx: &mut ViewContext<Self>) -> Task<Result<()>> {
let buffer = self.buffer().clone();
Ok(cx.spawn(|editor, mut cx| async move {
cx.spawn(|editor, mut cx| async move {
buffer
.update(&mut cx, |buffer, cx| buffer.format(cx).log_err())
.await;
editor.update(&mut cx, |editor, cx| {
editor.request_autoscroll(Autoscroll::Fit, cx)
});
buffer
.update(&mut cx, |buffer, cx| buffer.save(cx))?
.await?;
buffer.update(&mut cx, |buffer, cx| buffer.save(cx)).await?;
Ok(())
}))
})
}
fn can_save_as(&self, _: &AppContext) -> bool {
+4 -4
View File
@@ -812,18 +812,18 @@ impl MultiBuffer {
})
}
pub fn save(&mut self, cx: &mut ModelContext<Self>) -> Result<Task<Result<()>>> {
pub fn save(&mut self, cx: &mut ModelContext<Self>) -> Task<Result<()>> {
let mut save_tasks = Vec::new();
for BufferState { buffer, .. } in self.buffers.borrow().values() {
save_tasks.push(buffer.update(cx, |buffer, cx| buffer.save(cx))?);
save_tasks.push(buffer.update(cx, |buffer, cx| buffer.save(cx)));
}
Ok(cx.spawn(|_, _| async move {
cx.spawn(|_, _| async move {
for save in save_tasks {
save.await?;
}
Ok(())
}))
})
}
pub fn language<'a>(&self, cx: &'a AppContext) -> Option<&'a Arc<Language>> {