]> git.eshelyaron.com Git - emacs.git/commitdiff
Even when there's no :config, run any pre/post config hooks
authorJohn Lee <jjl@pobox.com>
Sat, 9 May 2020 18:01:01 +0000 (19:01 +0100)
committerJohn Lee <jjl@pobox.com>
Sat, 9 May 2020 22:46:53 +0000 (23:46 +0100)
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

lisp/use-package/use-package-core.el
test/lisp/use-package/use-package-tests.el

index c18877d5e666499c1ceb0a5b942ca879c20d0dba..f547fcfa5ae75be082900b7f9dab0b177968d377 100644 (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)
index 04a653e30e8292e268e76c028e5b0a11c5d04b58..d92a818cdbeabe3675871e95a9838142d242e077 100644 (file)
              (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)))