-
-
Notifications
You must be signed in to change notification settings - Fork 11
/
namespace.clj
29 lines (23 loc) · 963 Bytes
/
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
(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 (first (filter ns-decl? forms))]
(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 [filter-map (comp (filter require-form?) (map rest))]
(transduce filter-map concat ns-declaration))))
(defn find-ns-in-requires [requires namespace]
(let [is-namespace? (comp #(= namespace %) first)]
(first (filter is-namespace? requires))))