| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- (ns frontend.namespaces
- #?(:cljs (:require-macros [frontend.namespaces])))
- ;; copy from https://github.com/clj-commons/potemkin/issues/31#issuecomment-110689951
- (defmacro import-def
- "import a single fn or var
- (import-def a b) => (def b a/b)
- "
- [from-ns def-name]
- (let [from-sym# (symbol (str from-ns) (str def-name))]
- `(def ~def-name ~from-sym#)))
- (defmacro import-vars
- "import multiple defs from multiple namespaces
- works for vars and fns. not macros.
- (same syntax as potemkin.namespaces/import-vars)
- (import-vars
- [m.n.ns1 a b]
- [x.y.ns2 d e f]) =>
- (def a m.n.ns1/a)
- (def b m.n.ns1/b)
- ...
- (def d m.n.ns2/d)
- ... etc
- "
- [& imports]
- (let [expanded-imports (for [[from-ns & defs] imports
- d defs]
- `(import-def ~from-ns ~d))]
- `(do ~@expanded-imports)))
- ;; FIXME:
- #_(defmacro import-ns
- "import all the public defs from multiple namespaces
- works for vars and fns. not macros.
- (import-ns
- m.n.ns1
- x.y.ns2) =>
- (def a m.n.ns1/a)
- (def b m.n.ns1/b)
- ...
- (def d m.n.ns2/d)
- ... etc
- "
- [& namespaces]
- (let [expanded-imports (for [from-ns namespaces
- d ((ns-resolve 'cljs.analyzer.api 'ns-publics) from-ns)]
- `(import-def ~from-ns ~d))]
- `(do ~@expanded-imports)))
|