Merge pull request from conao3/add-commands-keyword

GitHub-reference: https://github.com/jwiegley/use-package/issues/917
This commit is contained in:
John Wiegley 2022-10-12 13:43:57 -04:00 committed by GitHub
commit c0338e06cd
2 changed files with 32 additions and 1 deletions

View file

@ -94,6 +94,7 @@
;; Any other keyword that also declares commands to be autoloaded (such as
;; :bind) must appear before this keyword.
:commands
:autoload
:init
:defer
:demand
@ -119,7 +120,8 @@ declaration is incorrect."
(defcustom use-package-deferring-keywords
'(:bind-keymap
:bind-keymap*
:commands)
:commands
:autoload)
"Unless `:demand' is used, keywords in this list imply deferred loading.
The reason keywords like `:hook' are not in this list is that
they only imply deferred loading if they reference actual
@ -1347,6 +1349,28 @@ meaning:
(delete-dups arg)))
(use-package-process-keywords name rest state)))
;;;; :autoload
(defalias 'use-package-normalize/:autoload 'use-package-normalize/:commands)
(defun use-package-handler/:autoload (name _keyword arg rest state)
(use-package-concat
;; Since we deferring load, establish any necessary autoloads, and also
;; keep the byte-compiler happy.
(let ((name-string (use-package-as-string name)))
(cl-mapcan
#'(lambda (command)
(when (symbolp command)
(append
(unless (plist-get state :demand)
`((unless (fboundp ',command)
(autoload #',command ,name-string))))
(when (bound-and-true-p byte-compile-current-file)
`((eval-when-compile
(declare-function ,command ,name-string)))))))
(delete-dups arg)))
(use-package-process-keywords name rest state)))
;;;; :defer
(defalias 'use-package-normalize/:defer 'use-package-normalize-predicate)
@ -1633,6 +1657,7 @@ this file. Usage:
package. This is useful if the package is being lazily
loaded, and you wish to conditionally call functions in your
`:init' block that are defined in the package.
:autoload Similar to :commands, but it for no-interactive one.
:hook Specify hook(s) to attach this package to.
:bind Bind keys, and define autoloads for the bound commands.

View file

@ -875,6 +875,12 @@
(gnus-harvest-install))
t))))
(ert-deftest use-package-test/:autoload-1 ()
(match-expansion
(use-package foo :autoload bar)
`(unless (fboundp 'bar)
(autoload #'bar "foo"))))
(ert-deftest use-package-test/:defines-1 ()
(match-expansion
(use-package foo :defines bar)