diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 5df52855..93d01aa7 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -1160,20 +1160,12 @@ mod cmd {
         if doc.path().is_none() {
             return Err(anyhow!("cannot write a buffer without a filename"));
         }
-        let autofmt = doc
-            .language_config()
-            .map(|config| config.auto_format)
-            .unwrap_or_default();
-        let fmt = if autofmt {
-            doc.format().map(|fmt| {
-                let shared = fmt.shared();
-                let callback = make_format_callback(doc.id(), doc.version(), true, shared.clone());
-                jobs.callback(callback);
-                shared
-            })
-        } else {
-            None
-        };
+        let fmt = doc.auto_format().map(|fmt| {
+            let shared = fmt.shared();
+            let callback = make_format_callback(doc.id(), doc.version(), true, shared.clone());
+            jobs.callback(callback);
+            shared
+        });
         Ok(tokio::spawn(doc.format_and_save(fmt)))
     }
 
@@ -1917,6 +1909,9 @@ fn append_to_line(cx: &mut Context) {
 
 // Creates an LspCallback that waits for formatting changes to be computed. When they're done,
 // it applies them, but only if the doc hasn't changed.
+//
+// TODO: provide some way to cancel this, probably as part of a more general job cancellation
+// scheme
 async fn make_format_callback(
     doc_id: DocumentId,
     doc_version: i32,
diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs
index 80ef54d5..0f1f3a8f 100644
--- a/helix-view/src/document.rs
+++ b/helix-view/src/document.rs
@@ -473,6 +473,18 @@ impl Document {
         Ok(doc)
     }
 
+    /// The same as [`format`], but only returns formatting changes if auto-formatting
+    /// is configured.
+    pub fn auto_format(&self) -> Option<impl Future<Output = LspFormatting> + 'static> {
+        if self.language_config().map(|c| c.auto_format) == Some(true) {
+            self.format()
+        } else {
+            None
+        }
+    }
+
+    /// If supported, returns the changes that should be applied to this document in order
+    /// to format it nicely.
     pub fn format(&self) -> Option<impl Future<Output = LspFormatting> + 'static> {
         if let Some(language_server) = self.language_server.clone() {
             let text = self.text.clone();