-
-
Notifications
You must be signed in to change notification settings - Fork 11
/
utils.clj
31 lines (27 loc) · 1 KB
/
utils.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
(ns clj-holmes.rules.utils
(:require [clj-holmes.logic.namespace :as logic.namespace]))
; private
(defn ^:private enrich-form [form]
(-> form
meta
(assoc :code form)))
(defn ^:private apply-fn-in-all-forms [code f]
(->> code
(tree-seq coll? identity)
(filter f)))
; public
(defn function-usage-possibilities [ns-declaration ns-to-find function]
(let [requires (-> ns-declaration logic.namespace/requires)
namespace-alias (some-> requires
(logic.namespace/find-ns-in-requires ns-to-find)
last)
namespaced-function-with-alias (some-> namespace-alias name (symbol (name function)))
namespaced-function (symbol (name ns-to-find) (name function))]
(->> (conj [] function namespaced-function namespaced-function-with-alias)
(filter identity)
set)))
(defn find-in-forms [f forms]
(->> forms
(map #(apply-fn-in-all-forms % f))
(reduce concat)
(mapv enrich-form)))