Add placement checks for package macros

Doom should complain if these macros are found anywhere they're not
supposed to be.
This commit is contained in:
Henrik Lissner 2018-05-13 17:11:20 +02:00
parent 88082c0dc9
commit e3841c4460
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -525,6 +525,16 @@ omitted. eg. (featurep! +flag1)"
;; Module package macros ;; Module package macros
;; ;;
(defun doom--assert-file-p (file-name macro)
(cl-assert (string= (file-name-nondirectory load-file-name) file-name)
nil
"Found %s call in non-%s file (%s)"
macro
file-name
(if (file-in-directory-p load-file-name doom-emacs-dir)
(file-relative-name load-file-name doom-emacs-dir)
(abbreviate-file-name load-file-name))))
(defmacro package! (name &rest plist) (defmacro package! (name &rest plist)
"Declares a package and how to install it (if applicable). "Declares a package and how to install it (if applicable).
@ -550,6 +560,7 @@ Accepts the following properties:
:freeze FORM :freeze FORM
Do not update this package if FORM is non-nil." Do not update this package if FORM is non-nil."
(declare (indent defun)) (declare (indent defun))
(doom--assert-file-p "packages.el" #'package!)
(cond ((memq name doom-disabled-packages) nil) (cond ((memq name doom-disabled-packages) nil)
((let ((disable (plist-get plist :disable))) ((let ((disable (plist-get plist :disable)))
(and disable (eval disable))) (and disable (eval disable)))
@ -580,6 +591,7 @@ Accepts the following properties:
packages at once. packages at once.
Only use this macro in a module's packages.el file." Only use this macro in a module's packages.el file."
(doom--assert-file-p "packages.el" #'packages!)
`(progn ,@(cl-loop for desc in packages collect `(package! ,@desc)))) `(progn ,@(cl-loop for desc in packages collect `(package! ,@desc))))
(defmacro disable-packages! (&rest packages) (defmacro disable-packages! (&rest packages)
@ -587,6 +599,7 @@ Only use this macro in a module's packages.el file."
packages at once. packages at once.
Only use this macro in a module's packages.el file." Only use this macro in a module's packages.el file."
(doom--assert-file-p "packages.el" #'disable-packages!)
`(setq doom-disabled-packages (append ',packages doom-disabled-packages))) `(setq doom-disabled-packages (append ',packages doom-disabled-packages)))
(defmacro depends-on! (module submodule &optional flags) (defmacro depends-on! (module submodule &optional flags)
@ -596,6 +609,7 @@ Only use this macro in a module's packages.el file.
MODULE is a keyword, and SUBMODULE is a symbol. Under the hood, this simply MODULE is a keyword, and SUBMODULE is a symbol. Under the hood, this simply
loads MODULE SUBMODULE's packages.el file." loads MODULE SUBMODULE's packages.el file."
(doom--assert-file-p "packages.el" #'depends-on!)
`(let ((doom-modules ,doom-modules) `(let ((doom-modules ,doom-modules)
(flags ,flags)) (flags ,flags))
(when flags (when flags