Generalize doom-file-cookie-p

And move it to doom-file-cookie-p for anyone to use.
This commit is contained in:
Henrik Lissner 2019-10-04 22:42:53 -04:00
parent 5b5dbe1c47
commit 297728bf74
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
5 changed files with 21 additions and 12 deletions

View file

@ -137,6 +137,24 @@ MATCH is a string regexp. Only entries that match it will be included."
result))))
result))
;;;###autoload
(defun doom-file-cookie-p (file &optional cookie null-value)
"Returns the evaluated result of FORM in a ;;;###COOKIE FORM at the top of
FILE.
If COOKIE doesn't exist, return NULL-VALUE."
(unless (file-exists-p file)
(signal 'file-missing file))
(unless (file-readable-p file)
(error "%S is unreadable" file))
(with-temp-buffer
(insert-file-contents file nil 0 256)
(if (re-search-forward (format "^;;;###%s " (regexp-quote (or cookie "if")))
nil t)
(let ((load-file-name file))
(eval (sexp-at-point) t))
null-value)))
;;;###autoload
(defmacro file-exists-p! (files &optional directory)
"Returns non-nil if the FILES in DIRECTORY all exist.

View file

@ -101,7 +101,7 @@ even if it doesn't need reloading!"
(dolist (file targets)
(insert
(with-temp-buffer
(cond ((not (doom-file-cookie-p file))
(cond ((not (doom-file-cookie-p file "if" t))
(print! (debug "Ignoring %s") (relpath file)))
((let ((generated-autoload-load-name (file-name-sans-extension file)))

View file

@ -156,7 +156,7 @@ If RECOMPILE-P is non-nil, only recompile out-of-date files."
(and (file-exists-p elc-file)
(file-newer-than-file-p target elc-file)))))
total-noop
(pcase (if (doom-file-cookie-p target)
(pcase (if (doom-file-cookie-p target "if" t)
(byte-compile-file target)
'no-byte-compile)
(`no-byte-compile

View file

@ -51,7 +51,7 @@
(message "%s" (buffer-string))
(error "Failed to bootstrap unit tests")))
(dolist (file files)
(if (doom-file-cookie-p file)
(if (doom-file-cookie-p file "if" t)
(with-temp-buffer
(unless
(zerop

View file

@ -21,15 +21,6 @@ commands like `doom-packages-install', `doom-packages-update' and
;;
;;; Dispatcher API
(defun doom-file-cookie-p (file)
(with-temp-buffer
(insert-file-contents-literally file nil 0 256)
(if (and (re-search-forward "^;;;###if " nil t)
(<= (line-number-at-pos) 3))
(let ((load-file-name file))
(eval (sexp-at-point) t))
t)))
(defun doom-sh (command &rest args)
"Execute COMMAND with ARGS in the shell and return (STATUS . OUTPUT).