lang/cc: general refactor

For idempotence and to group dependencies so certain sub-packages (like
irony's) aren't loaded if irony is disabled.
This commit is contained in:
Henrik Lissner 2018-06-05 02:06:01 +02:00
parent 7880154214
commit 3c52c36c2f
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
3 changed files with 43 additions and 47 deletions

View file

@ -1,5 +1,13 @@
;;; lang/cc/autoload.el -*- lexical-binding: t; -*- ;;; lang/cc/autoload.el -*- lexical-binding: t; -*-
;;;###autoload
(add-to-list 'auto-mode-alist '("\\.cl\\'" . opencl-mode))
;;
;; Library
;;
;;;###autoload ;;;###autoload
(defun +cc/reload-compile-db () (defun +cc/reload-compile-db ()
"Reload the current project's JSON compilation database." "Reload the current project's JSON compilation database."

View file

@ -27,7 +27,10 @@ compilation database is present in the project.")
:commands (c-mode c++-mode objc-mode java-mode) :commands (c-mode c++-mode objc-mode java-mode)
:mode ("\\.mm\\'" . objc-mode) :mode ("\\.mm\\'" . objc-mode)
:preface :preface
;; The plusses in c++-mode can be annoying to search for ivy/helm (which reads
;; queries as regexps), so wee add these for convenience.
(defalias 'cpp-mode 'c++-mode) (defalias 'cpp-mode 'c++-mode)
(defvaralias 'cpp-mode-map 'c++-mode-map)
(defun +cc-c++-header-file-p () (defun +cc-c++-header-file-p ()
(and buffer-file-name (and buffer-file-name
@ -45,8 +48,9 @@ compilation database is present in the project.")
(equal (file-name-extension buffer-file-name) "h") (equal (file-name-extension buffer-file-name) "h")
(re-search-forward "@\\<interface\\>" magic-mode-regexp-match-limit t))) (re-search-forward "@\\<interface\\>" magic-mode-regexp-match-limit t)))
(push '(+cc-c++-header-file-p . c++-mode) magic-mode-alist) (unless (assq '+cc-c++-header-file-p magic-mode-alist)
(push '(+cc-objc-header-file-p . objc-mode) magic-mode-alist) (push '(+cc-c++-header-file-p . c++-mode) magic-mode-alist)
(push '(+cc-objc-header-file-p . objc-mode) magic-mode-alist))
:init :init
(setq-default c-basic-offset tab-width (setq-default c-basic-offset tab-width
@ -54,21 +58,13 @@ compilation database is present in the project.")
c-default-style "doom") c-default-style "doom")
:config :config
(set! :electric '(c-mode c++-mode objc-mode java-mode) (set! :electric '(c-mode c++-mode objc-mode java-mode) :chars '(?\n ?\}))
:chars '(?\n ?\}))
(set! :company-backend
'(c-mode c++-mode objc-mode)
'(company-irony-c-headers company-irony))
;;; Style/formatting
;; C/C++ style settings
(c-toggle-electric-state -1)
(c-toggle-auto-newline -1)
;;; Better fontification (also see `modern-cpp-font-lock') ;;; Better fontification (also see `modern-cpp-font-lock')
(add-hook 'c-mode-common-hook #'rainbow-delimiters-mode) (add-hook 'c-mode-common-hook #'rainbow-delimiters-mode)
(add-hook! (c-mode c++-mode) #'highlight-numbers-mode) (add-hook! '(c-mode-hook c++-mode-hook)
(add-hook! (c-mode c++-mode) #'+cc|fontify-constants) #'(highlight-numbers-mode
+cc|fontify-constants))
;; Custom style, based off of linux ;; Custom style, based off of linux
(map-put c-style-alist "doom" (map-put c-style-alist "doom"
@ -104,6 +100,8 @@ compilation database is present in the project.")
;;; Keybindings ;;; Keybindings
;; Disable electric keys because it interferes with smartparens and custom ;; Disable electric keys because it interferes with smartparens and custom
;; bindings. We'll do it ourselves (mostly). ;; bindings. We'll do it ourselves (mostly).
(c-toggle-electric-state -1)
(c-toggle-auto-newline -1)
(setq c-tab-always-indent nil (setq c-tab-always-indent nil
c-electric-flag nil) c-electric-flag nil)
(dolist (key '("#" "}" "/" "*" ";" "," ":" "(" ")" "\177")) (dolist (key '("#" "}" "/" "*" ";" "," ":" "(" ")" "\177"))
@ -141,11 +139,13 @@ compilation database is present in the project.")
(add-hook 'c-mode-common-hook #'+cc|init-irony-mode) (add-hook 'c-mode-common-hook #'+cc|init-irony-mode)
:config :config
(setq irony-cdb-search-directory-list '("." "build" "build-conda")) (setq irony-cdb-search-directory-list '("." "build" "build-conda"))
;; Initialize compilation database, if present. Otherwise, fall back on ;; Initialize compilation database, if present. Otherwise, fall back on
;; `+cc-default-compiler-options'. ;; `+cc-default-compiler-options'.
(add-hook 'irony-mode-hook #'+cc|irony-init-compile-options) (add-hook 'irony-mode-hook #'+cc|irony-init-compile-options)
(def-package! irony-eldoc :hook (irony-mode . irony-eldoc)) (def-package! irony-eldoc
:hook (irony-mode . irony-eldoc))
(def-package! flycheck-irony (def-package! flycheck-irony
:when (featurep! :feature syntax-checker) :when (featurep! :feature syntax-checker)
@ -155,47 +155,35 @@ compilation database is present in the project.")
(def-package! company-irony (def-package! company-irony
:when (featurep! :completion company) :when (featurep! :completion company)
:after irony) :init
(set! :company-backend
(def-package! company-irony-c-headers '(c-mode c++-mode objc-mode)
:when (featurep! :completion company) '(:separate company-irony-c-headers company-irony))
:after company-irony)) :config
(require 'company-irony-c-headers)))
;;
;; Tools
;;
(def-package! disaster :commands disaster)
;; ;;
;; Major modes ;; Major modes
;; ;;
(def-package! cmake-mode ;; `cmake-mode'
:defer t (set! :company-backend 'cmake-mode '(company-cmake company-yasnippet))
:config
(set! :company-backend 'cmake-mode '(company-cmake company-yasnippet)))
(def-package! opencl-mode :mode "\\.cl\\'")
(def-package! demangle-mode :hook llvm-mode)
;;
;; Company plugins
;;
(def-package! company-cmake (def-package! company-cmake
:when (featurep! :completion company) :when (featurep! :completion company)
:after cmake-mode) :after cmake-mode)
;; `demangle-mode'
(add-hook 'llvm-mode-hook #'demangle-mode)
;; `glsl-mode'
(def-package! company-glsl (def-package! company-glsl
:when (featurep! :completion company) :when (featurep! :completion company)
:after glsl-mode :after glsl-mode
:config :config (set! :company-backend 'glsl-mode '(company-glsl)))
(set! :company-backend 'glsl-mode '(company-glsl)))
;; ;;
@ -226,20 +214,19 @@ compilation database is present in the project.")
:references #'rtags-find-references-at-point) :references #'rtags-find-references-at-point)
(add-hook 'doom-cleanup-hook #'+cc|cleanup-rtags) (add-hook 'doom-cleanup-hook #'+cc|cleanup-rtags)
(add-hook! kill-emacs (ignore-errors (rtags-cancel-process))) (add-hook! 'kill-emacs-hook (ignore-errors (rtags-cancel-process)))
;; Use rtags-imenu instead of imenu/counsel-imenu ;; Use rtags-imenu instead of imenu/counsel-imenu
(define-key! (c-mode-map c++-mode-map) [remap imenu] #'rtags-imenu) (define-key! (c-mode-map c++-mode-map) [remap imenu] #'rtags-imenu)
(when (featurep 'evil) (add-hook 'rtags-jump-hook #'evil-set-jump)) (when (featurep 'evil)
(add-hook 'rtags-jump-hook #'evil-set-jump))
(add-hook 'rtags-after-find-file-hook #'recenter) (add-hook 'rtags-after-find-file-hook #'recenter)
(def-package! ivy-rtags (def-package! ivy-rtags
:when (featurep! :completion ivy) :when (featurep! :completion ivy)
:after rtags
:config (setq rtags-display-result-backend 'ivy)) :config (setq rtags-display-result-backend 'ivy))
(def-package! helm-rtags (def-package! helm-rtags
:when (featurep! :completion helm) :when (featurep! :completion helm)
:after rtags
:config (setq rtags-display-result-backend 'helm))) :config (setq rtags-display-result-backend 'helm)))

View file

@ -12,7 +12,8 @@
(when (featurep! :completion company) (when (featurep! :completion company)
(package! company-glsl :recipe (:fetcher github :repo "Kaali/company-glsl")))) (package! company-glsl :recipe (:fetcher github :repo "Kaali/company-glsl"))))
(when (package! irony) (when (featurep! +irony)
(package! irony)
(package! irony-eldoc) (package! irony-eldoc)
(when (featurep! :feature syntax-checker) (when (featurep! :feature syntax-checker)
(package! flycheck-irony)) (package! flycheck-irony))