;;; lsp.el --- Language Server Protocol. -*- lexical-binding: t; -*- ;; Time-stamp: <2020-01-27T02:10:04+0100> ;;; Commentary: ;;; Code: (require 'basics/global-variables) (unless slow-computer ;; Client for Language Server Protocol servers. (use-package lsp-mode :if (executable-find "clangd") :after (whitespace) :defines (lsp-clients-clangd-args) :custom (lsp-prefer-flymake nil) ; Disable flymake. (lsp-auto-guess-root t) ; Don't ask for project root. (lsp-eldoc-render-all t) ; Display all eldoc information. :config (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) (defun my/lsp-ws-toggle () (if lsp-ui-peek-mode (my/whitespace-mode-off) (my/whitespace-mode-on))) :hook (c++-mode . lsp) (c-mode . lsp) (lsp-ui-peek-mode . my/lsp-ws-toggle) ; Dots in wrong color. ) ;; Eye-candy and flycheck support for lsp-mode. (use-package lsp-ui :after (lsp-mode flycheck) :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. :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) ) ;; Completions with lsp-mode. (use-package company-lsp :after (lsp-mode company) :config (push 'company-lsp company-backends) ) ;; ivy interface to lsp-mode. (use-package lsp-ivy :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) ; Use treemacs for error list. ("M-i" . lsp-treemacs-symbols) ; Display symbols using treemacs. ) ) ) ; unless slow-computer. (provide 'programming/lsp) ;;; lsp.el ends here