diff options
author | scgilardi <scgilardi@gmail.com> | 2008-08-16 22:48:23 +0000 |
---|---|---|
committer | scgilardi <scgilardi@gmail.com> | 2008-08-16 22:48:23 +0000 |
commit | 3dcb49711054c8f63313a6296cc23404d9e27294 (patch) | |
tree | e47ed2f55bceda2cb638f857aaa5188809e7aac4 /src/clojure/contrib/ns_utils/ns_utils.clj | |
parent | 1341206e051b4ad9473e8a2a3968f58510c628d7 (diff) |
move namespace-directory-aware libs into src/clojure/contrib
Diffstat (limited to 'src/clojure/contrib/ns_utils/ns_utils.clj')
-rw-r--r-- | src/clojure/contrib/ns_utils/ns_utils.clj | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/clojure/contrib/ns_utils/ns_utils.clj b/src/clojure/contrib/ns_utils/ns_utils.clj new file mode 100644 index 00000000..a165b1f8 --- /dev/null +++ b/src/clojure/contrib/ns_utils/ns_utils.clj @@ -0,0 +1,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 +;; +;; 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 'clojure.contrib.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))) |