Skip to content

Commit

Permalink
improve missing dependencies utility
Browse files Browse the repository at this point in the history
now it can find missing dependencies even if they are nested in a
:given :fn predicate

#23
  • Loading branch information
ag91 committed Dec 6, 2021
1 parent 360df93 commit bb55e12
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 17 deletions.
27 changes: 10 additions & 17 deletions moldable-emacs.el
Original file line number Diff line number Diff line change
Expand Up @@ -1264,26 +1264,19 @@ a string (node -> string)."

(defun me-find-missing-dependencies-for-mold (mold)
"List unmet dependencies by MOLD."
(let ((given-cond (me-get-in mold '(:given :fn)))) ;; TODO this will break if I add other keywords than :fn
(let* ((flatten-given (-flatten (me-get-in mold '(:given :fn)))) ;; TODO this will break if I add other keywords than :fn
(executables (--> flatten-given
(--find-indices (eq it 'executable-find) it)
(--map (list (nth it flatten-given) (nth (+ 1 it) flatten-given)) it)
(--remove (eval it) it)))
(requires (--> flatten-given
(--find-indices (eq it 'me-require) it)
(--map (list (nth it flatten-given) `(quote ,(nth (+ 2 it) flatten-given))) it)
(--remove (eval it) it))))
(list
:key (plist-get mold :key)
:missing-dependencies
(and
(ignore-errors (> (length given-cond) 1))
(eq (car given-cond) 'and)
(--> (cdr given-cond)
(--filter
(or
(and
(seqp it)
(-contains? it 'executable-find)
(me-with-mold-let mold (lambda () (not (eval it)))))
(and
(seqp it)
(-contains? it 'me-require)
(me-with-mold-let mold (lambda () (not (eval it)))))
)
it))))))
(append requires executables))))

(defun me-find-missing-dependencies-for-molds (molds)
"List unmet dependencies by MOLDS."
Expand Down
20 changes: 20 additions & 0 deletions tests/moldable-emacs-test.el
Original file line number Diff line number Diff line change
Expand Up @@ -132,3 +132,23 @@ some new contents
| 1 | hello 2! |
| 2 | hello 3! |" )))


(ert-deftest me-find-missing-dependencies-for-mold_finds-nothing ()
(should
(equal (me-find-missing-dependencies-for-mold '(:key "test" :given (:fn (and t))))
'(:key "test" :missing-dependencies nil))))

(ert-deftest me-find-missing-dependencies-for-mold_finds-nothing-for-existing-dependencies ()
(should
(equal (me-find-missing-dependencies-for-mold '(:key "test" :given (:fn (and (me-require 'org) (executable-find "sh")))))
'(:key "test" :missing-dependencies nil))))

(ert-deftest me-find-missing-dependencies-for-mold_finds-requires-and-executables ()
(should
(equal (me-find-missing-dependencies-for-mold '(:key "test" :given (:fn (and (me-require 'some-package) (executable-find "some-command")))))
'(:key "test" :missing-dependencies ((me-require 'some-package) (executable-find "some-command"))))))

(ert-deftest me-find-missing-dependencies-for-mold_finds-nested-requires-and-executables ()
(should
(equal (me-find-missing-dependencies-for-mold '(:key "test" :given (:fn (or (or (me-require 'some-package) t) (and t (executable-find "some-command"))))))
'(:key "test" :missing-dependencies ((me-require 'some-package) (executable-find "some-command"))))))

0 comments on commit bb55e12

Please sign in to comment.