-
Notifications
You must be signed in to change notification settings - Fork 69
/
Copy pathtracker.clj
28 lines (25 loc) · 1.05 KB
/
tracker.clj
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
27
28
(ns refactor-nrepl.ns.tracker
(:require [clojure.tools.namespace
[dependency :as dep]
[file :as file]
[track :as tracker]]
[refactor-nrepl.core :as core]))
(defn build-tracker
"Build a tracker for the project."
[]
(file/add-files (tracker/tracker) (core/find-in-project core/source-file?)))
(defn get-dependents
"Get the dependent files for ns from tracker."
[tracker my-ns]
(let [deps (dep/immediate-dependents (:clojure.tools.namespace.track/deps tracker)
(symbol my-ns))]
(for [[file ns] (:clojure.tools.namespace.file/filemap tracker)
:when ((set deps) ns)]
file)))
(defn project-files-in-topo-order []
(let [tracker (file/add-files (tracker/tracker) (core/find-in-project core/clj-file?))
nses (dep/topo-sort (:clojure.tools.namespace.track/deps tracker))
filemap (:clojure.tools.namespace.file/filemap tracker)
ns2file (zipmap (vals filemap) (keys filemap))]
(->> (map ns2file nses)
(remove nil?))))