diff options
author | scgilardi <scgilardi@gmail.com> | 2008-11-12 22:31:20 +0000 |
---|---|---|
committer | scgilardi <scgilardi@gmail.com> | 2008-11-12 22:31:20 +0000 |
commit | 6f7a77e9cdc8df4f58fd86eed0dcd0dd6fc2d6fd (patch) | |
tree | 84939b269427bb8213c7db3e002628aa13816bd3 /src/clojure/contrib/ns_utils.clj | |
parent | db748f4c8b6f37da894b3c8f7a3bb683eea3f0aa (diff) |
first cut at changes for Clojure SVN 1094+, my contribs and ones they depend on now load again
Diffstat (limited to 'src/clojure/contrib/ns_utils.clj')
-rw-r--r-- | src/clojure/contrib/ns_utils.clj | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/src/clojure/contrib/ns_utils.clj b/src/clojure/contrib/ns_utils.clj new file mode 100644 index 00000000..5a3d033c --- /dev/null +++ b/src/clojure/contrib/ns_utils.clj @@ -0,0 +1,86 @@ +;; 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 +;; +;; 'get-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 + +(ns clojure.contrib.ns-utils + (:use clojure.contrib.except)) + +;; Namespace Utilities + +(defn get-ns + "Returns the namespace named by ns-sym or throws if the + namespace does not exist" + [ns-sym] + (let [ns (find-ns ns-sym)] + (throw-if (not ns) "Unable to find namespace: %s" 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 (get-ns '~nsname))) + +(defmacro dir + "Prints a sorted directory of public vars in a namespace" + [nsname] + `(print-dir (get-ns '~nsname))) + +(defmacro docs + "Prints documentation for the public vars in a namespace" + [nsname] + `(print-docs (get-ns '~nsname))) |