@@ -11,7 +11,6 @@ use std::path::PathBuf;
use std::rc::Rc;
use std::{cell::RefCell, fmt::Write};
use text::{Point, Selection};
-use util::TryFutureExt;
use workspace::{
ItemHandle, ItemNavHistory, ItemView, ItemViewHandle, NavHistory, PathOpener, Settings,
StatusItemView, WeakItemHandle, Workspace,
@@ -226,14 +225,21 @@ impl ItemView for Editor {
cx: &mut ViewContext<Self>,
) -> Task<Result<()>> {
let buffer = self.buffer().clone();
- cx.spawn(|editor, mut cx| async move {
- buffer
- .update(&mut cx, |buffer, cx| buffer.format(project, cx).log_err())
- .await;
- editor.update(&mut cx, |editor, cx| {
+ let buffers = buffer.read(cx).all_buffers();
+ let transaction = project.update(cx, |project, cx| project.format(buffers, true, cx));
+ cx.spawn(|this, mut cx| async move {
+ let transaction = transaction.await?;
+ this.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| {
+ if !buffer.is_singleton() {
+ buffer.push_transaction(&transaction.0);
+ }
+ buffer.save(cx)
+ })
+ .await?;
Ok(())
})
}
@@ -3,14 +3,13 @@ mod anchor;
pub use anchor::{Anchor, AnchorRangeExt};
use anyhow::Result;
use clock::ReplicaId;
-use collections::{Bound, HashMap};
+use collections::{Bound, HashMap, HashSet};
use gpui::{AppContext, Entity, ModelContext, ModelHandle, Task};
pub use language::Completion;
use language::{
Buffer, BufferChunks, BufferSnapshot, Chunk, DiagnosticEntry, Event, File, Language, Outline,
OutlineItem, Selection, ToOffset as _, ToPoint as _, ToPointUtf16 as _, TransactionId,
};
-use project::Project;
use std::{
cell::{Ref, RefCell},
cmp, fmt, io,
@@ -931,27 +930,12 @@ impl MultiBuffer {
cx.emit(event.clone());
}
- pub fn format(
- &mut self,
- project: ModelHandle<Project>,
- cx: &mut ModelContext<Self>,
- ) -> Task<Result<()>> {
- let buffers = self
- .buffers
+ pub fn all_buffers(&self) -> HashSet<ModelHandle<Buffer>> {
+ self.buffers
.borrow()
.values()
.map(|state| state.buffer.clone())
- .collect();
- let transaction = project.update(cx, |project, cx| project.format(buffers, true, cx));
- cx.spawn(|this, mut cx| async move {
- let transaction = transaction.await?;
- this.update(&mut cx, |this, _| {
- if !this.singleton {
- this.push_transaction(&transaction.0);
- }
- });
- Ok(())
- })
+ .collect()
}
pub fn save(&mut self, cx: &mut ModelContext<Self>) -> Task<Result<()>> {