From 750b74379dd86fd08d1ff4bff3753359c36ef374 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Tue, 26 Dec 2017 18:12:36 -0500 Subject: [PATCH] lang/cc: add rtags support #305 --- modules/lang/cc/config.el | 45 +++++++++++++++++++++++++++++++++++++ modules/lang/cc/packages.el | 10 +++++---- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/modules/lang/cc/config.el b/modules/lang/cc/config.el index fb2e6ef71..0bb7b1a02 100644 --- a/modules/lang/cc/config.el +++ b/modules/lang/cc/config.el @@ -188,3 +188,48 @@ compilation database is present in the project.") (set! :company-backend 'glsl-mode '(company-glsl)))) +;; +;; Rtags Support +;; + +(def-package! rtags + :after cc-mode + :config + (if (not (executable-find "rdm")) + (warn "cc-mode: couldn't find rdm, disabling rtags support") + (add-hook! (c-mode c++-mode) #'rtags-start-process-unless-running) + (set! :jump '(c-mode c++-mode) + :definition #'rtags-find-symbol-at-point + :references #'rtags-find-references-at-point)) + + (setq rtags-autostart-diagnostics t + rtags-use-bookmarks nil + rtags-jump-to-first-match nil + rtags-results-buffer-other-window t) + + (defun +cc|cleanup-rdm-maybe () + "Shut down the rtags daemon, if it's running." + (when (and (processp rtags-rdm-process) + (not (memq (process-status rtags-rdm-process) '(exit signal))) + (not (doom-buffers-in-mode '(c-mode c++-mode)))) + (rtags-cancel-process))) + (add-hook 'doom-cleanup-hook #'+cc|cleanup-rdm-maybe) + (add-hook 'rtags-jump-hook #'evil-set-jump) + (add-hook 'rtags-after-find-file-hook #'recenter)) + +(def-package! ivy-rtags + :when (featurep! :completion ivy) + :after rtags + :init + ;; NOTE Ivy integration breaks when rtags is byte-compiled with Emacs 26 or + ;; later, so we un-byte-compile it before we load it. + (eval-when-compile + (when (>= emacs-major-version 26) + (when-let* ((elc-file (locate-library "rtags.elc" t doom--package-load-path))) + (delete-file elc-file)))) + :config (setq rtags-display-result-backend 'ivy)) + +(def-package! helm-rtags + :when (featurep! :completion helm) + :after rtags + :config (setq rtags-display-result-backend 'helm)) diff --git a/modules/lang/cc/packages.el b/modules/lang/cc/packages.el index 8109c1886..24f69c2e6 100644 --- a/modules/lang/cc/packages.el +++ b/modules/lang/cc/packages.el @@ -8,14 +8,16 @@ (package! glsl-mode) (package! irony) (package! irony-eldoc) -(package! opencl-mode) (package! modern-cpp-font-lock) - -(when (featurep! :feature syntax-checker) - (package! flycheck-irony)) +(package! opencl-mode) (when (featurep! :completion company) (package! company-glsl :recipe (:fetcher github :repo "Kaali/company-glsl")) (package! company-irony) (package! company-irony-c-headers)) +(package! rtags) +(when (featurep! :completion ivy) + (package! ivy-rtags)) +(when (featurep! :completion helm) + (package! helm-rtags))