-
Notifications
You must be signed in to change notification settings - Fork 86
/
graph.cljc
26 lines (23 loc) · 899 Bytes
/
graph.cljc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(ns mount.tools.graph)
#?(:clj
;;TODO ns based for now. need to be _state_ based. or better yet need to have a real graph :)
(defn- add-deps [{:keys [ns] :as state} states]
(let [refers (ns-refers ns)
any (->> states vals (map :var) set)
deps (->> (filter (comp any val) refers)
(map (comp str second))
set)]
(assoc (dissoc state :ns)
:deps deps))))
#?(:clj
(defn- meta-with-ns [[sname {:keys [var] :as smeta}]]
(let [sns (-> var meta :ns)]
(assoc smeta :ns sns :name sname))))
#?(:clj
(defn states-with-deps []
(let [states @@#'mount.core/meta-state]
(->> (map (comp #(add-deps % states)
#(select-keys % [:name :order :ns :status])
meta-with-ns)
states)
(sort-by :order)))))