forked from zero-one-group/geni
/
docs.clj
45 lines (38 loc) · 1.08 KB
/
docs.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
35
36
37
38
39
40
41
42
43
44
45
(ns zero-one.geni.docs
(:require
[clojure.java.io :as io]
[taoensso.nippy :as nippy])
(:import
(org.apache.commons.io IOUtils)))
(def spark-docs
(-> "spark-docs.nippy"
io/resource
io/input-stream
IOUtils/toByteArray
nippy/thaw))
(defn no-doc? [v]
(-> v meta :doc nil?))
(defn add-doc! [fn-var doc]
(alter-meta! fn-var assoc :doc doc))
(defn alter-doc! [fn-name fn-var doc-maps]
(let [fn-key (keyword fn-name)
doc (->> doc-maps (mapv fn-key) (remove nil?) first)]
(when (and doc (no-doc? fn-var))
(add-doc! fn-var doc))))
(defn alter-docs-in-ns! [ns-sym doc-maps]
(let [public-vars (ns-publics ns-sym)]
(mapv
(fn [[fn-name fn-var]]
(alter-doc! fn-name fn-var doc-maps))
public-vars)
:succeeded))
(defn docless-vars [ns-sym]
(->> (ns-publics ns-sym)
(mapv second)
(filter no-doc?)))
(defn invalid-doc-vars [ns-sym]
(->> (ns-publics ns-sym)
(filter (fn [[_ v]]
(let [doc (-> v meta :doc)]
(not (or (nil? doc) (string? doc))))))
(into {})))