Skip to content

Commit d6e4ddc

Browse files
committed
feat: add deps w/ :systemic.core/dependencies meta
You can now add dependencies to a variable (eg. function metadata) w/ the :systemic.core/dependencies annotation to have it be added as a transitive dependency inside `defsys` calls.
1 parent be12f1e commit d6e4ddc

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

src/systemic/internal.clj

+9-6
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,15 @@
5959
(let [result (transient #{})]
6060
(walk/postwalk
6161
(fn [item]
62-
(when-some [qualified-sym (when (symbol? item)
63-
(let [resolved (ns-resolve ns item)]
64-
(cond
65-
(var? resolved) (symbol resolved)
66-
(nil? resolved) nil
67-
(class? resolved) nil)))]
62+
(let [resolved (when (symbol? item)
63+
(ns-resolve ns item))
64+
qualified-sym (cond
65+
(var? resolved) (symbol resolved)
66+
(nil? resolved) nil
67+
(class? resolved) nil)]
68+
(doseq [meta-dep (:systemic.core/dependencies (meta resolved))
69+
dep (find-dependencies ns meta-dep registry)]
70+
(conj! result dep))
6871
(when (contains? registry qualified-sym)
6972
(conj! result qualified-sym))))
7073
form)

test/systemic/core_test.clj

+13-1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@
4444
This will break if we rename this file but at least it's defined in just one place."
4545
'systemic.core-test/*config*)
4646

47+
(defn dependent-fn
48+
"Testing"
49+
{:systemic.core/dependencies #{`*config*}}
50+
[]
51+
5)
52+
4753
(deftest find-dependencies-test
4854
(testing "correctly identifies dependencies in a body"
4955
(is (= #{registry-symbol}
@@ -53,7 +59,13 @@
5359
(is (= #{} (internal/find-dependencies (-> *ns* str symbol) `(try 5
5460
(catch Exception e
5561
nil))
56-
@sut/*registry*)))))
62+
@sut/*registry*))))
63+
64+
(testing "handling metadata"
65+
(is (= #{registry-symbol}
66+
(internal/find-dependencies (-> *ns* str symbol)
67+
`(dependent-fn)
68+
@sut/*registry*)))))
5769

5870
(deftest defsys-test
5971
(testing "registers it in the registry"

0 commit comments

Comments
 (0)