Mercurial > rlm
annotate src/rlm/ns_rlm.clj @ 0:78a630e650d2
initial import
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Tue, 18 Oct 2011 00:57:08 -0700 |
parents | |
children | 8565803376a4 |
rev | line source |
---|---|
rlm@0 | 1 (ns rlm.ns-rlm |
rlm@0 | 2 "A few convienence functions for namespaces." |
rlm@0 | 3 (:use [clojure.contrib [ns-utils :only [get-ns]]])) |
rlm@0 | 4 |
rlm@0 | 5 (defn ns-clear |
rlm@0 | 6 "completely removes all aliases, interns, and references from the namespace |
rlm@0 | 7 works on *ns* if called with no arguments" |
rlm@0 | 8 ([ns] |
rlm@0 | 9 (let [ns (the-ns ns)] |
rlm@0 | 10 (doall (map (partial ns-unmap ns) (keys (ns-map ns)))) |
rlm@0 | 11 (doall (map (partial ns-unalias ns) (keys (ns-aliases ns)))) nil)) |
rlm@0 | 12 ([] (ns-clear *ns*))) |
rlm@0 | 13 |
rlm@0 | 14 (defn ns-clone-fn |
rlm@0 | 15 "the calling namespace (*ns*) gets all the referenced vars as the target namespace |
rlm@0 | 16 anything that the target namespace doesn't have, ns won't have. Anything it does |
rlm@0 | 17 have, *ns* will have." |
rlm@0 | 18 [target-ns] |
rlm@0 | 19 (ns-clear *ns*) |
rlm@0 | 20 (doall (map (fn [[ns-alias ns]] (alias ns-alias (.name ns))) (ns-aliases target-ns))) |
rlm@0 | 21 (doall (map (fn [[sym var]] |
rlm@0 | 22 (cond (var? var) |
rlm@0 | 23 (. *ns* (refer sym var)) |
rlm@0 | 24 (class? var) |
rlm@0 | 25 (. *ns* (importClass var)))) |
rlm@0 | 26 ;;(eval `(clojure.core/import* ~(.getName var))))) |
rlm@0 | 27 (ns-map target-ns))) nil) |
rlm@0 | 28 |
rlm@0 | 29 (defmacro ns-clone |
rlm@0 | 30 ([target-ns-name] |
rlm@0 | 31 `(do |
rlm@0 | 32 (require '~target-ns-name) |
rlm@0 | 33 (ns-clone-fn (get-ns '~target-ns-name))))) |
rlm@0 | 34 |
rlm@0 | 35 (defn ls |
rlm@0 | 36 "lists all the vars defined in the namespace" |
rlm@0 | 37 ([ns] (doall (map println (keys (ns-map ns)))) nil) |
rlm@0 | 38 ([] (ls *ns*))) |
rlm@0 | 39 |
rlm@0 | 40 |