Now that we are loading package autoloads files (as part of the generated doom-package-autoload-file when running make autoloads), many :commands properties are redundant. In fact, many def-package! blocks are redundant. In some cases, we can do without a config.el file entirely, and can move into the autoloads file or rely entirely on package autoloads. Also, many settings have been moved in their module's autoloads files, which makes them available ASAP; their use no longer depends on module load order. This gained me a modest ~10% boost in startup speed.
96 lines
3.5 KiB
EmacsLisp
96 lines
3.5 KiB
EmacsLisp
;;; lang/cc/autoload.el -*- lexical-binding: t; -*-
|
|
|
|
;;;###autoload
|
|
(defun +cc/reload-compile-db ()
|
|
"Reload the current project's JSON compilation database."
|
|
(interactive)
|
|
(unless (memq major-mode '(c-mode c++-mode objc-mode))
|
|
(user-error "Not a C/C++/ObjC buffer"))
|
|
(unless (project-file-exists-p! "compile_commands.json")
|
|
(user-error "No compile_commands.json file"))
|
|
;; first rtag
|
|
(when (and (featurep 'rtags)
|
|
rtags-enabled
|
|
(executable-find "rc"))
|
|
(with-temp-buffer
|
|
(message "Reloaded compile commands for rtags daemon")
|
|
(rtags-call-rc :silent t "-J" (doom-project-root))))
|
|
;; then irony
|
|
(when (and (featurep 'irony) irony-mode)
|
|
(+cc|irony-init-compile-options)))
|
|
|
|
;;;###autoload
|
|
(defun +cc-sp-point-is-template-p (id action context)
|
|
"Return t if point is in the right place for C++ angle-brackets."
|
|
(and (sp-in-code-p id action context)
|
|
(cond ((eq action 'insert)
|
|
(sp-point-after-word-p id action context))
|
|
((eq action 'autoskip)
|
|
(/= (char-before) 32)))))
|
|
|
|
;;;###autoload
|
|
(defun +cc-sp-point-after-include-p (id action context)
|
|
"Return t if point is in an #include."
|
|
(and (sp-in-code-p id action context)
|
|
(save-excursion
|
|
(goto-char (line-beginning-position))
|
|
(looking-at-p "[ ]*#include[^<]+"))))
|
|
|
|
;;;###autoload
|
|
(defun +cc-c++-lineup-inclass (langelem)
|
|
"Indent inclass lines one level further than access modifier keywords."
|
|
(when (and (eq major-mode 'c++-mode)
|
|
(or (assoc 'access-label c-syntactic-context)
|
|
(save-excursion
|
|
(save-match-data
|
|
(re-search-backward
|
|
"\\(?:p\\(?:ublic\\|r\\(?:otected\\|ivate\\)\\)\\)"
|
|
(c-langelem-pos langelem) t)))))
|
|
'++))
|
|
|
|
;;;###autoload
|
|
(defun +cc-lineup-arglist-close (langlem)
|
|
"Line up the closing brace in an arglist with the opening brace IF cursor is
|
|
preceded by the opening brace or a comma (disregarding whitespace in between)."
|
|
(when (save-excursion
|
|
(save-match-data
|
|
(skip-chars-backward " \t\n" (c-langelem-pos langelem))
|
|
(memq (char-before) (list ?, ?\( ?\;))))
|
|
(c-lineup-arglist langlem)))
|
|
|
|
|
|
;;
|
|
;; Hooks
|
|
;;
|
|
|
|
;;;###autoload
|
|
(defun +cc|fontify-constants ()
|
|
"Better fontification for preprocessor constants"
|
|
(when (memq major-mode '(c-mode c++-mode))
|
|
(font-lock-add-keywords
|
|
nil '(("\\<[A-Z]*_[A-Z_]+\\>" . font-lock-constant-face)
|
|
("\\<[A-Z]\\{3,\\}\\>" . font-lock-constant-face))
|
|
t)))
|
|
|
|
;;;###autoload
|
|
(defun +cc|irony-init-compile-options ()
|
|
"Initialize compiler options for irony-mode. It searches for the nearest
|
|
compilation database and initailizes it, otherwise falling back on
|
|
`+cc-default-compiler-options' and `+cc-default-include-paths'.
|
|
|
|
See https://github.com/Sarcasm/irony-mode#compilation-database for details on
|
|
compilation dbs."
|
|
(when (memq major-mode '(c-mode c++-mode objc-mode))
|
|
(require 'irony-cdb)
|
|
(unless (irony-cdb-autosetup-compile-options)
|
|
(irony-cdb--update-compile-options
|
|
(append (delq nil (cdr-safe (assq major-mode +cc-default-compiler-options)))
|
|
(cl-loop for path in +cc-default-include-paths
|
|
nconc (list "-I" path)))
|
|
(doom-project-root)))))
|
|
|
|
;;;###autoload
|
|
(defun +cc|cleanup-rtags ()
|
|
"Kill rtags server(s) if there are no C/C++ buffers open."
|
|
(unless (doom-buffers-in-mode '(c-mode c++-mode) (buffer-list))
|
|
(rtags-cancel-process)))
|