;;; lsp.el --- Language Server Protocol. -*- lexical-binding: t; -*- ;; Time-stamp: <2020-07-07T05:30:48+0200> ;;; Commentary: ;;; Code: (require 'basics/package-management) (require 'basics/global-variables) (require 'programming/common) (unless slow-computer ;; Client for Language Server Protocol servers. (use-package lsp-mode :if (executable-find "clangd") :defines (lsp-clients-clangd-args) :diminish lsp-mode :custom ((lsp-prefer-flymake nil) ; Disable flymake. (lsp-auto-guess-root t) ; Don't ask for project root. (lsp-eldoc-render-all t) (lsp-restart 'auto-restart) (lsp-enable-semantic-highlighting t)) ; Needs clangd 11(?). :config (progn (setq lsp-clients-clangd-args '("--compile-commands-dir=build")) ;; Add “-clang-tidy” to clangd args if the version supports it. (when (>= (my/clangd-version) 9.0) (add-to-list 'lsp-clients-clangd-args "--clang-tidy" t)) ;; Mark lsp-clients-clangd-args as safe to override. (put 'lsp-clients-clangd-args 'safe-local-variable #'consp)) :bind ("C-c C-f" . lsp-execute-code-action) :hook ((c++-mode . lsp) (c-mode . lsp))) ;; Eye-candy and flycheck support for lsp-mode. (use-package lsp-ui :after (lsp-mode flycheck whitespace) :functions (my/whitespace-mode-on my/whitespace-mode-off) :custom ((lsp-ui-sideline-enable nil) ; Do not insert doc into buffer. (lsp-ui-doc-include-signature t) ; Include signature in doc popup. (lsp-ui-doc-enable nil)) ; Disable doc popup. :config (defun my/lsp-ws-toggle () "Works around the dots-in-wrong-color bug." (if lsp-ui-peek-mode (my/whitespace-mode-off) (my/whitespace-mode-on))) :bind (:map lsp-ui-mode-map ("M-." . lsp-ui-peek-find-definitions) ("C-M-." . lsp-ui-peek-find-references) ("C-M-," . lsp-ui-peek-find-implementation)) :hook ((lsp-mode . lsp-ui-mode) (lsp-ui-peek-mode . my/lsp-ws-toggle))) ;; Completions with lsp-mode. (use-package company-lsp :demand t :after (lsp-mode company) :custom (company-lsp-cache-candidates 'auto) :config (push 'company-lsp company-backends)) ;; ivy interface to lsp-mode. (use-package lsp-ivy :demand t :after (lsp-mode ivy)) ;; Integration between lsp-mode and treemacs. (use-package lsp-treemacs :after (treemacs lsp-ui) :bind (:map lsp-ui-mode-map ("" . lsp-treemacs-errors-list) ("M-i" . lsp-treemacs-symbols))) ) ; unless slow-computer. (provide 'programming/lsp) ;;; lsp.el ends here