Enable formatter if LSP formatter is available
The :editor format module uses either the formatter available through an LSP server or a formatter that the format-all package supports. With :editor (format +onsave), this formatter is triggered when a file is saved. However, if no format-all formatter is available, this on-save behavior is disabled, even if an LSP formatter is available. This fixes that.
This commit is contained in:
parent
68bee5043c
commit
6e7a19a2f4
1 changed files with 29 additions and 10 deletions
|
@ -34,20 +34,39 @@ select buffers.")
|
||||||
;;
|
;;
|
||||||
;;; Bootstrap
|
;;; Bootstrap
|
||||||
|
|
||||||
|
(defun +format-enable-for-lsp-on-save-maybe-h ()
|
||||||
|
"Enable LSP formatter when LSP client is available."
|
||||||
|
(cond ((not +format-with-lsp) nil)
|
||||||
|
((bound-and-true-p lsp-mode)
|
||||||
|
(remove-hook 'lsp-mode-hook #'+format-lsp-enable-on-save-maybe-h 'local)
|
||||||
|
(when (lsp-feature? "textDocument/formatting")
|
||||||
|
(+format-enable-on-save-h))
|
||||||
|
t)
|
||||||
|
((bound-and-true-p eglot--managed-mode)
|
||||||
|
(remove-hook 'eglot-managed-mode-hook #'+format-lsp-enable-on-save-maybe-h 'local)
|
||||||
|
(when (eglot--server-capable :documentRangeFormattingProvider)
|
||||||
|
(+format-enable-on-save-h))
|
||||||
|
t)
|
||||||
|
((bound-and-true-p lsp--buffer-deferred)
|
||||||
|
(add-hook 'lsp-mode-hook #'+format-lsp-enable-on-save-maybe-h
|
||||||
|
nil 'local)
|
||||||
|
t)))
|
||||||
|
|
||||||
(defun +format-enable-on-save-maybe-h ()
|
(defun +format-enable-on-save-maybe-h ()
|
||||||
"Enable formatting on save in certain major modes.
|
"Enable formatting on save in certain major modes.
|
||||||
|
|
||||||
This is controlled by `+format-on-save-enabled-modes'."
|
This is controlled by `+format-on-save-enabled-modes'."
|
||||||
(or (eq major-mode 'fundamental-mode)
|
(and (not (eq major-mode 'fundamental-mode))
|
||||||
(cond ((booleanp +format-on-save-enabled-modes)
|
(cond ((booleanp +format-on-save-enabled-modes)
|
||||||
(null +format-on-save-enabled-modes))
|
+format-on-save-enabled-modes)
|
||||||
((eq (car +format-on-save-enabled-modes) 'not)
|
((eq (car-safe +format-on-save-enabled-modes) 'not)
|
||||||
(memq major-mode (cdr +format-on-save-enabled-modes)))
|
(not (memq major-mode (cdr +format-on-save-enabled-modes))))
|
||||||
((not (memq major-mode +format-on-save-enabled-modes))))
|
((memq major-mode +format-on-save-enabled-modes))
|
||||||
(not (require 'format-all nil t))
|
((not (require 'format-all nil t))))
|
||||||
(let (current-prefix-arg) ; never prompt
|
(not (+format-lsp-enable-on-save-maybe-h))
|
||||||
(null (car (format-all--probe))))
|
(let (current-prefix-arg) ; never prompt
|
||||||
(+format-enable-on-save-h)))
|
(not (car (format-all--probe))))
|
||||||
|
(+format-enable-on-save-h)))
|
||||||
|
|
||||||
(when (featurep! +onsave)
|
(when (featurep! +onsave)
|
||||||
(add-hook 'after-change-major-mode-hook #'+format-enable-on-save-maybe-h))
|
(add-hook 'after-change-major-mode-hook #'+format-enable-on-save-maybe-h))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue