Even when there's no :config, run any pre/post config hooks

i.e., following the existing docs for use-package-inject-hooks, these hooks are
run:

use-package--foo--pre-config-hook
use-package--foo--post-config-hook

This should make config customisations more predictable (for example, spacemacs
uses these hooks extensively to allow 'layers' to be customised).

I got rid of the "special" default value for :config, because it doesn't seem to
be treated any differently than nil.

Fixes https://github.com/jwiegley/use-package/issues/785

Copyright-paperwork-exempt: yes
This commit is contained in:
John Lee 2020-05-09 19:01:01 +01:00
parent 91e5d275af
commit f30d5761af
2 changed files with 32 additions and 3 deletions

View file

@ -156,8 +156,7 @@ See also `use-package-defaults', which uses this value."
:group 'use-package)
(defcustom use-package-defaults
'(;; this '(t) has special meaning; see `use-package-handler/:config'
(:config '(t) t)
'((:config nil t)
(:init nil t)
(:catch t (lambda (name args)
(not use-package-expand-minimally)))
@ -1468,7 +1467,7 @@ no keyword implies `:all'."
(use-package-concat
(when use-package-compute-statistics
`((use-package-statistics-gather :config ',name nil)))
(if (or (null arg) (equal arg '(t)))
(if (and (null arg) (not use-package-inject-hooks))
body
(use-package-with-elapsed-timer
(format "Configuring package %s" name-symbol)

View file

@ -1474,6 +1474,36 @@
(config)
t))))))
(ert-deftest use-package-test/pre-post-hooks-with-:config ()
(let ((use-package-inject-hooks t))
(match-expansion
(use-package foo :config (config))
`(progn
(when
(run-hook-with-args-until-failure 'use-package--foo--pre-init-hook)
(run-hooks 'use-package--foo--post-init-hook))
(require 'foo nil nil)
(when
(run-hook-with-args-until-failure 'use-package--foo--pre-config-hook)
(config)
(run-hooks 'use-package--foo--post-config-hook))
t))))
(ert-deftest use-package-test/pre-post-hooks-without-:config ()
;; https://github.com/jwiegley/use-package/issues/785
(let ((use-package-inject-hooks t))
(match-expansion
(use-package foo)
`(progn
(when
(run-hook-with-args-until-failure 'use-package--foo--pre-init-hook)
(run-hooks 'use-package--foo--post-init-hook))
(require 'foo nil nil)
(when
(run-hook-with-args-until-failure 'use-package--foo--pre-config-hook)
(run-hooks 'use-package--foo--post-config-hook))
t))))
(ert-deftest use-package-test-normalize/:diminish ()
(should (equal (use-package-normalize-diminish 'foopkg :diminish nil)
'(foopkg-mode)))