   (add-hook 'before-save-hook #'+format|buffer nil t))
 
 ;;;###autoload
-(defun +format|buffer ()
-  "TODO"
-  (let ((tmpfile (make-temp-file "doom_format"))
-        (patchbuf (get-buffer-create " *doom format patch*"))
-        (mode major-mode)
-        (file buffer-file-name)
-        (dir default-directory)
-        (coding-system-for-read 'utf-8)
-        (coding-system-for-write 'utf-8))
-    (unwind-protect
-        (save-restriction
-          (with-current-buffer patchbuf (erase-buffer))
-          (quiet! (write-region (point-min) (point-max) tmpfile))
-          (pcase (with-current-buffer (find-file-noselect tmpfile t)
-                   (delay-mode-hooks (funcall mode))
-                   (setq buffer-file-name file
-                         default-directory dir)
-                   (quiet! (+format-buffer))
-                   (quiet! (write-region nil nil tmpfile)))
-            (`noop  (message "Buffer is already formatted"))
-            (`error (message "Couldn't format the buffer due to errors"))
-            (_ (if (zerop (call-process-region (point-min) (point-max) "diff" nil patchbuf nil "-n" "-" tmpfile))
-                   (message "Buffer is already formatted")
-                 (+format--apply-rcs-patch patchbuf)
-                 (message "Formatted buffer")))))
-      (kill-buffer patchbuf)
-      (delete-file tmpfile))))
+(defalias '+format|buffer #'+format-buffer)
 

             ((error "Invalid rcs patch or internal error in +format--apply-rcs-patch")))))))
    (move-to-column column)))


;;
;; Public library


;;;###autoload
(defun +format-buffer ()
  "Format the source code in the current buffer.

See `+format/buffer' for the interactive version of this function, and
`+format|buffer' to use as a `before-save-hook' hook."
  (require 'format-all)
  (cl-destructuring-bind (formatter mode-result)
      (format-all-probe)
    (unless formatter
      (error "Don't know how to format %S code" major-mode))
    (let ((f-function (gethash formatter format-all-format-table))
          (executable (format-all-formatter-executable formatter)))
      (cl-destructuring-bind (output errput first-diff)
          (+format--with-copy-of-buffer f-function executable mode-result)
        (unwind-protect
            (cond ((null output) 'error)
                  ((eq output t) 'noop)
                  ((let ((tmpfile (make-temp-file "doom_format"))
                         (patchbuf (get-buffer-create " *doom format patch*"))
                         (coding-system-for-read 'utf-8)
                         (coding-system-for-write 'utf-8))
                     (unwind-protect
                         (progn
                           (with-current-buffer patchbuf (erase-buffer))
                           (with-temp-file tmpfile (erase-buffer) (insert output))
                           (if (zerop (call-process-region (point-min) (point-max) "diff" nil patchbuf nil "-n" "-" tmpfile))
                               (message "Buffer is already formatted")
                             (+format--apply-rcs-patch patchbuf)
                             (message "Formatted buffer with %s" formatter)))
                       (kill-buffer patchbuf)
                       (delete-file tmpfile))
                     (list output errput first-diff))))
          (unless (= 0 (length errput))
            (message "Formatter error output:\n%s" errput)))))))


;;
