2020-01-27 02:11:10 +01:00
|
|
|
;;; lsp.el --- Language Server Protocol. -*- lexical-binding: t; -*-
|
|
|
|
|
2020-03-09 15:04:48 +01:00
|
|
|
;; Time-stamp: <2020-03-09T15:04:37+0100>
|
2020-01-27 02:11:10 +01:00
|
|
|
|
|
|
|
;;; 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)
|
2020-02-11 17:59:12 +01:00
|
|
|
:diminish lsp-mode
|
2020-01-27 02:11:10 +01:00
|
|
|
|
|
|
|
: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.
|
2020-03-09 15:04:48 +01:00
|
|
|
(lsp-restart 'auto-restart) ; Automatically restart server.
|
2020-01-27 02:11:10 +01:00
|
|
|
|
|
|
|
: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)
|
2020-02-26 04:49:31 +01:00
|
|
|
:custom (company-lsp-cache-candidates 'auto)
|
|
|
|
:config (push 'company-lsp company-backends)
|
2020-01-27 02:11:10 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
;; 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
|
|
|
|
("<f7>" . 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
|