-
-
Notifications
You must be signed in to change notification settings - Fork 11
/
namespace.clj
34 lines (28 loc) · 1.01 KB
/
namespace.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
29
30
31
32
33
34
(ns clj-holmes.logic.namespace
(:require [clojure.tools.namespace.parse :refer [name-from-ns-decl ns-decl?]]))
; private
(defn ^:private require-form? [form]
(and (seq? form)
(-> form first (= :require))))
(defn ^:private index-of-ns-declaration [forms ns-declaration]
(-> forms (.indexOf ns-declaration) inc))
; public
(defn find-ns-declaration [forms]
(when-let [ns-declaration (->> forms
(filter ns-decl?)
first)]
(with-meta ns-declaration {:index (index-of-ns-declaration forms ns-declaration)})))
(defn name-from-ns-declaration [form]
(if (ns-decl? form)
(or (name-from-ns-decl form) 'user)
'user))
(defn requires [ns-declaration]
(when (ns-decl? ns-declaration)
(let [requires-decl (filter require-form? ns-declaration)]
(->> requires-decl
(map rest)
(reduce concat)))))
(defn find-ns-in-requires [requires namespace]
(->> requires
(filter (comp #(= namespace %) first))
first))