blob: ca2395e7fa9508be72b3329b14f01f15d4677589 (
plain)
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
;; Copyright (c) Stephen C. Gilardi. All rights reserved.
;; The use and distribution terms for this software are covered by the
;; Common Public License 1.0 (http://opensource.org/licenses/cpl.php)
;; which can be found in the file CPL.TXT at the root of this distribution.
;; By using this software in any fashion, you are agreeing to be bound by
;; the terms of this license.
;; You must not remove this notice, or any other, from this software.
;;
;; ns-utils.clj
;;
;; Namespace Utilities
;;
;; 'ns' returns the namespace named by a symbol or throws
;; if the namespace does not exist
;;
;; 'ns-vars' returns a sorted seq of symbols naming public vars
;; in a namespace
;;
;; 'print-dir' prints a sorted directory of public vars in a
;; namespace
;;
;; 'print-docs' prints documentation for the public vars in a
;; namespace
;;
;; Convenience
;;
;; 'vars' returns a sorted seq of symbols naming public vars
;; in a namespace (macro)
;;
;; 'dir' prints a sorted directory of public vars in a
;; namespace (macro)
;;
;; 'docs' prints documentation for the public vars in a
;; namespace (macro)
;;
;; scgilardi (gmail)
;; 23 April 2008
(clojure/in-ns 'ns-utils)
(clojure/refer 'clojure)
;; Namespace Utilities
(defn ns
"Returns the namespace named by ns-sym or throws if the
namespace does not exist"
[ns-sym]
(let [ns (find-ns ns-sym)]
(when-not ns
(throw (new Exception (str "Unable to find namespace: "
ns-sym))))
ns))
(defn ns-vars
"Returns a sorted seq of symbols naming public vars in
a namespace"
[ns]
(sort (map first (ns-publics ns))))
(defn print-dir
"Prints a sorted directory of public vars in a namespace"
[ns]
(doseq item (ns-vars ns)
(println item)))
(defn print-docs
"Prints documentation for the public vars in a namespace"
[ns]
(doseq item (ns-vars ns)
(print-doc (ns-resolve ns item))))
;; Convenience
(defmacro vars
"Returns a sorted seq of symbols naming public vars in
a namespace"
[nsname]
`(ns-vars (ns '~nsname)))
(defmacro dir
"Prints a sorted directory of public vars in a namespace"
[nsname]
`(print-dir (ns '~nsname)))
(defmacro docs
"Prints documentation for the public vars in a namespace"
[nsname]
`(print-docs (ns '~nsname)))
|