feat: add doctor context

Ref: f9201eb218
This commit is contained in:
Henrik Lissner 2023-02-23 01:16:38 -05:00
parent 7cc946a74b
commit 357d10f5a7
No known key found for this signature in database
GPG key ID: B60957CA074D39A3
2 changed files with 37 additions and 36 deletions

View file

@ -238,41 +238,42 @@ in."
(print! (start "Checking your enabled modules...")) (print! (start "Checking your enabled modules..."))
(advice-add #'require :around #'doom-shut-up-a) (advice-add #'require :around #'doom-shut-up-a)
(pcase-dolist (`(,group . ,name) (doom-module-list)) (pcase-dolist (`(,group . ,name) (doom-module-list))
(let (doom-local-errors (doom-context-with 'doctor
doom-local-warnings) (let (doom-local-errors
(let (doom-doctor--errors doom-local-warnings)
doom-doctor--warnings) (let (doom-doctor--errors
(condition-case-unless-debug ex doom-doctor--warnings)
(doom-module-context-with (cons group name) (condition-case-unless-debug ex
(let ((doctor-file (doom-module-expand-path group name "doctor.el")) (doom-module-context-with (cons group name)
(packages-file (doom-module-expand-path group name doom-module-packages-file))) (let ((doctor-file (doom-module-expand-path group name "doctor.el"))
(when packages-file (packages-file (doom-module-expand-path group name doom-module-packages-file)))
(cl-loop with doom-output-indent = 6 (when packages-file
for name in (doom-context-with 'packages (cl-loop with doom-output-indent = 6
(let* (doom-packages for name in (doom-context-with 'packages
doom-disabled-packages) (let* (doom-packages
(load packages-file 'noerror 'nomessage) doom-disabled-packages)
(mapcar #'car doom-packages))) (load packages-file 'noerror 'nomessage)
unless (or (doom-package-get name :disable) (mapcar #'car doom-packages)))
(eval (doom-package-get name :ignore)) unless (or (doom-package-get name :disable)
(plist-member (doom-package-get name :recipe) :local-repo) (eval (doom-package-get name :ignore))
(locate-library (symbol-name name)) (plist-member (doom-package-get name :recipe) :local-repo)
(doom-package-built-in-p name) (locate-library (symbol-name name))
(doom-package-installed-p name)) (doom-package-built-in-p name)
do (print! (error "Missing emacs package: %S") name))) (doom-package-installed-p name))
(when doctor-file do (print! (error "Missing emacs package: %S") name)))
(let ((inhibit-message t)) (when doctor-file
(load doctor-file 'noerror 'nomessage))))) (let ((inhibit-message t))
(file-missing (error! "%s" (error-message-string ex))) (load doctor-file 'noerror 'nomessage)))))
(error (error! "Syntax error: %s" ex))) (file-missing (error! "%s" (error-message-string ex)))
(when (or doom-doctor--errors doom-doctor--warnings) (error (error! "Syntax error: %s" ex)))
(print-group! (when (or doom-doctor--errors doom-doctor--warnings)
(print! (start (bold "%s %s")) group name) (print-group!
(print! "%s" (string-join (append doom-doctor--errors doom-doctor--warnings) "\n"))) (print! (start (bold "%s %s")) group name)
(setq doom-local-errors doom-doctor--errors (print! "%s" (string-join (append doom-doctor--errors doom-doctor--warnings) "\n")))
doom-local-warnings doom-doctor--warnings))) (setq doom-local-errors doom-doctor--errors
(appendq! doom-doctor--errors doom-local-errors) doom-local-warnings doom-doctor--warnings)))
(appendq! doom-doctor--warnings doom-local-warnings))))) (appendq! doom-doctor--errors doom-local-errors)
(appendq! doom-doctor--warnings doom-local-warnings))))))
(error (error
(warn! "Attempt to load DOOM failed\n %s\n" (warn! "Attempt to load DOOM failed\n %s\n"
(or (cdr-safe ex) (car ex))) (or (cdr-safe ex) (car ex)))

View file

@ -487,7 +487,7 @@ All valid contexts:
sandbox -- This session was launched from Doom's sandbox. sandbox -- This session was launched from Doom's sandbox.
packages -- when packagedefs are being read packages -- when packagedefs are being read
reload -- while reloading doom") reload -- while reloading doom")
(put 'doom-context 'valid-values '(cli compile eval init modules packages reload sandbox)) (put 'doom-context 'valid-values '(cli compile eval init modules packages reload doctor sandbox))
(put 'doom-context 'risky-local-variable t) (put 'doom-context 'risky-local-variable t)
(defun doom-context--check (context) (defun doom-context--check (context)