+ Lsp-Mode: - https://github.com/emacs-lsp/lsp-mode - https://melpa.org/#/lsp-mode #+BEGIN_SRC emacs-lisp (defcustom mydot-emacs-enable-lsp nil "Whether to enable Emacs LSP integration." :group 'mydot-emacs :type 'boolean) #+END_SRC #+BEGIN_SRC emacs-lisp (defcustom mydot-emacs-lsp-exceptions '(ebuild-mode) "List of modes where Emacs LSP integration should not be enabled." :group 'mydot-emacs :type '(repeat symbol)) #+END_SRC #+BEGIN_SRC emacs-lisp (defun maybe-enable-lsp () "Enable LSP mode for a buffer if all requirements are satisfied." (cond ;; Short-circuit. ((not mydot-emacs-enable-lsp) nil) ;; Mode exceptions. ((member major-mode mydot-emacs-lsp-exceptions) nil) ;; Enable LSP for projects. ((and (fboundp 'projectile-project-p) (fboundp 'lsp-deferred) (projectile-project-p)) (lsp-deferred)) ;; Base. (t nil))) #+END_SRC #+BEGIN_SRC emacs-lisp (use-package lsp-mode :hook ((c-mode . maybe-enable-lsp) (c++-mode . maybe-enable-lsp) (csharp-mode . maybe-enable-lsp) (fsharp-mode . maybe-enable-lsp) (js-mode . maybe-enable-lsp) (markdown-mode . maybe-enable-lsp) (powershell-mode . maybe-enable-lsp) (rust-mode . maybe-enable-lsp) (sh-mode . maybe-enable-lsp) (typescript-mode . maybe-enable-lsp) (yaml-mode . maybe-enable-lsp) (lsp-mode . lsp-diagnostics-mode) (lsp-mode . lsp-enable-which-key-integration)) :commands (lsp lsp-deferred) :custom ((lsp-eldoc-render-all t) (lsp-keep-workspace-alive nil) (lsp-modeline-workspace-status-enable nil) (lsp-response-timeout 15) (lsp-tcp-connection-timeout 15)) :config (progn (mapc (lambda (f) (add-to-list 'lsp-file-watch-ignored-directories f)) '("[/\\\\]\\.cache\\'" "[/\\\\]\\.log\\'" "[/\\\\]\\compiled\\'")))) #+END_SRC #+BEGIN_SRC emacs-lisp (use-package lsp-lens :hook ((lsp-mode . lsp-lens-mode)) :diminish lsp-lens-mode) #+END_SRC