Skip to content

Commit ed0bbff

Browse files
authored
Merge pull request #18 from stevenremot/add-priority
Add a priority system to the visitors
2 parents c25e7dd + fe0f707 commit ed0bbff

File tree

2 files changed

+60
-9
lines changed

2 files changed

+60
-9
lines changed

ede-php-autoload-composer.el

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -223,23 +223,36 @@ PROJECT-DIR is the absolute path of the project directory."
223223
"Return the absolute path to the project directory in the given CONTEXT."
224224
(cdr (assoc 'project-dir context)))
225225

226-
(defun ede-php-autoload-composer-define-visitor (visitor)
226+
(defun ede-php-autoload-composer-define-visitor (visitor &optional step)
227227
"Add a new VISITOR to the list of composer visitors.
228228
229229
A visitor is a function that takes a context and the current list
230230
of autoloads, and returns a new list of autoloads.
231231
232232
All visitors are executed when a composer project is detected, to
233-
generate the composer autoloads."
234-
(add-to-list 'ede-php-autoload-composer--visitors visitor))
235-
236-
(defun ede-php-autoload-composer--run-visitors (context autoloads)
233+
generate the composer autoloads.
234+
235+
STEP is the autoload construction step at which the visitor
236+
should execute. It can be `:early', `:normal' or `:late. It
237+
defaults to `:normal'.'"
238+
(let* ((real-step (or step :normal))
239+
(pair (assoc real-step ede-php-autoload-composer--visitors)))
240+
(if pair
241+
(setf (cdr pair) (push visitor (cdr pair)))
242+
(add-to-list 'ede-php-autoload-composer--visitors (cons real-step (list visitor))))))
243+
244+
(defun ede-php-autoload-composer--run-visitors (visitors context autoloads)
237245
"Run all the visitors on a specified CONTEXT, with the initial AUTOLOADS.
238246
239247
Returns the new list of autoloads."
240-
(let ((current-autoloads autoloads))
241-
(dolist (visitor ede-php-autoload-composer--visitors)
242-
(setq current-autoloads (funcall visitor context current-autoloads)))
248+
(let ((current-autoloads autoloads)
249+
step-visitors)
250+
251+
(dolist (step '(:early :normal :late))
252+
(setq step-visitors (cdr (assoc step visitors)))
253+
(dolist (visitor step-visitors)
254+
(setq current-autoloads (funcall visitor context current-autoloads))))
255+
243256
current-autoloads))
244257

245258
;; Basic visitors ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -287,7 +300,7 @@ information into AUTOLOADS."
287300
(lock-file (expand-file-name ede-php-autoload-composer-lock-file project-dir))
288301
(composer-lock (when (file-exists-p lock-file) (json-read-file lock-file)))
289302
(context (ede-php-autoload-composer-make-context composer-data composer-lock project-dir)))
290-
(ede-php-autoload-composer--run-visitors context autoloads)))
303+
(ede-php-autoload-composer--run-visitors ede-php-autoload-composer--visitors context autoloads)))
291304

292305

293306
(provide 'ede-php-autoload-composer)

test/ede-php-autoload-composer-test.el

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,44 @@
4040
:psr-4 (("Test3" . "test3/")
4141
("Test4" . "test4/"))))))
4242

43+
(ert-deftest ede-php-autoload-composer-define-visitor ()
44+
"`:define-visitors' should define a visitor according to its step."
45+
(setq ede-php-autoload-composer--visitors '())
46+
47+
(ede-php-autoload-composer-define-visitor 'test-visitor-1)
48+
(should (equal ede-php-autoload-composer--visitors '((:normal . (test-visitor-1)))))
49+
50+
(ede-php-autoload-composer-define-visitor 'test-visitor-2 :late)
51+
(should (equal ede-php-autoload-composer--visitors '((:late . (test-visitor-2))
52+
(:normal . (test-visitor-1)))))
53+
54+
55+
(ede-php-autoload-composer-define-visitor 'test-visitor-3 :early)
56+
(should (equal ede-php-autoload-composer--visitors '((:early . (test-visitor-3))
57+
(:late . (test-visitor-2))
58+
(:normal . (test-visitor-1)))))
59+
60+
61+
(ede-php-autoload-composer-define-visitor 'test-visitor-4)
62+
(should (equal ede-php-autoload-composer--visitors '((:early . (test-visitor-3))
63+
(:late . (test-visitor-2))
64+
(:normal . (test-visitor-4 test-visitor-1))))))
65+
66+
(ert-deftest ede-php-autoload-composer--run-visitors ()
67+
"`ede-php-autoload-composer--run-visitors' should build configuration from visitors."
68+
(should (equal
69+
(ede-php-autoload-composer--run-visitors
70+
'((:late . ((lambda (context autoloads)
71+
(push :late autoloads))))
72+
(:early . ((lambda (context autoloads)
73+
(push :early autoloads))))
74+
(:normal . ((lambda (context autoloads)
75+
(push :normal autoloads)))))
76+
nil
77+
'())
78+
79+
'(:late :normal :early))))
80+
4381
(provide 'ede-php-autoload-composer-test)
4482

4583
;;; ede-php-autoload-composer-test.el ends here

0 commit comments

Comments
 (0)