diff --git a/core/autoload/files.el b/core/autoload/files.el index f93cce7fc..58f86be97 100644 --- a/core/autoload/files.el +++ b/core/autoload/files.el @@ -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. diff --git a/core/cli/autoloads.el b/core/cli/autoloads.el index 7a048eff9..cdd1000e6 100644 --- a/core/cli/autoloads.el +++ b/core/cli/autoloads.el @@ -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))) diff --git a/core/cli/byte-compile.el b/core/cli/byte-compile.el index 23dfd00ec..94c6e69c5 100644 --- a/core/cli/byte-compile.el +++ b/core/cli/byte-compile.el @@ -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 diff --git a/core/cli/test.el b/core/cli/test.el index daf1dd815..e052365c6 100644 --- a/core/cli/test.el +++ b/core/cli/test.el @@ -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 diff --git a/core/core-cli.el b/core/core-cli.el index 2aec15099..d3c4bb4e3 100644 --- a/core/core-cli.el +++ b/core/core-cli.el @@ -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).