:type 'boolean
:group 'use-package)
-(eval-when-compile
- (defvar use-package-expand-minimally))
+(defvar use-package-extra-keywords nil
+ "A list of extra keywords to be accepted in the use-package form.")
+
+(defconst use-package-phases
+ '(setup-load-path
+ pre-compile-load
+ preface
+ setup-autoloads
+ register-load-on-idle
+ declare-functions
+ init
+ register-eval-after-load
+ deferred-config
+ package-load
+ config
+ wrapup)
+ "A list of phases that capture the sequence of `use-package'.
+This is used by `use-package-add-keywords' in order to register
+new keywords, and to specify when their handler should be
+called.
+Each phase registers a `before-' and `after-' counterpart, so
+that you can register new keywords as follows:
+
+ (use-package-add-keywords :ensure 'after-preface)
+
+Which is identical to saying:
+
+ (use-package-add-keywords :ensure 'before-setup-autoloads)
+
+The reason for duplicating the sequence points with redundant
+before and after monikers is to make keyword-adding resilient to
+the creation of new phases in future.")
+
+(defun use-package-add-keywords (&rest args)
+ (let ((keywords (cl-remove-if #'(lambda (x) (not (keywordp args)))))
+ (phases (cl-remove-if #'(lambda (x) (keywordp args))))))
+ )
(defun use-package-progn (body)
(if (= (length body) 1)
"Given a list of forms, return it wrapped in `progn'."
(unless (listp (car args))
(use-package-error (concat label " wants a sexp or list of sexps")))
- args)
+ (mapcar #'(lambda (form)
+ (if (and (consp form)
+ (eq (car form) 'use-package))
+ (macroexpand form)
+ form)) args))
(defsubst use-package-normalize-value (label arg)
"Normalize a value."