blob: da2feeeaf828e9b1f5575dacaec0c6ff91d7817c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
;;; init-eglot.el --- configure lsp integration -*- lexical-binding:t -*-
;;; Commentary:
;;; Code:
(defvar mpolden/inhibit-format-before-save nil
"List of modes where `eglot-format' should not be run before saving the buffer.")
(defvar mpolden/inhibit-organize-imports-before-save nil
"List of modes where `eglot-code-action-organize-imports' should not be run before saving the buffer.")
(defun mpolden/format-before-save ()
"Format buffer before saving."
(unless (member major-mode mpolden/inhibit-format-before-save)
(eglot-format)))
(defun mpolden/organize-imports-before-save ()
"Organize imports before saving buffer."
(unless (member major-mode mpolden/inhibit-organize-imports-before-save)
(call-interactively 'eglot-code-action-organize-imports)))
(defun mpolden/eglot-before-save ()
"All actions that may run before saving buffer."
(mpolden/format-before-save)
(mpolden/organize-imports-before-save))
(use-package eglot
:ensure t
:init
;; eglot passes tab-width as tab size to the lsp server, but most language
;; servers treat this as an indentation width
;; https://github.com/joaotavora/eglot/issues/157
;;
;; set a default value that fits most languages
(setq-default tab-width 4)
:hook
;; load eglot automatically for these modes
((go-mode . eglot-ensure)
(java-mode . eglot-ensure)
(python-mode . eglot-ensure)
(rust-mode . eglot-ensure)
(before-save . mpolden/eglot-before-save))
:bind (:map eglot-mode-map
;; C-c r renames identifier
("C-c r" . eglot-rename)
;; C-c f formats buffer
("C-c f" . eglot-format)
;; C-c o organizes imports
("C-c o" . eglot-code-action-organize-imports)))
(provide 'init-eglot)
;;; init-eglot.el ends here
|