On Fri 4 Apr 2014 at 03:53:54PM -0800, Christopher Howard wrote: > Is there some trick Clojure command to list all functions defined in a > namespace?
I use these functions to create cheatsheets on the fly: (defn fn-var? [v] (let [f @v] (or (contains? (meta v) :arglists) (fn? f) (instance? clojure.lang.MultiFn f)))) (defn cheat-sheet [ns] (let [nsname (str ns) vars (vals (ns-publics ns)) {funs true defs false} (group-by fn-var? vars) fmeta (map meta funs) dmeta (map meta defs) flen (apply max 0 (map (comp count str :name) fmeta)) dnames (map #(str nsname \/ (:name %)) dmeta) fnames (map #(format (str "%s/%-" flen "s %s") nsname (:name %) (string/join \space (:arglists %))) fmeta) lines (concat (sort dnames) (sort fnames))] (str ";;; " nsname " {{{1\n\n" (string/join \newline lines)))) which produces output like this: user=> (println (cheat-sheet 'clojure.java.io)) ;;; clojure.java.io {{{1 clojure.java.io/Coercions clojure.java.io/IOFactory clojure.java.io/default-streams-impl clojure.java.io/as-file [x] clojure.java.io/as-relative-path [x] clojure.java.io/as-url [x] clojure.java.io/copy [input output & opts] clojure.java.io/delete-file [f & [silently]] clojure.java.io/file [arg] [parent child] [parent child & more] clojure.java.io/input-stream [x & opts] clojure.java.io/make-input-stream [x opts] clojure.java.io/make-output-stream [x opts] clojure.java.io/make-parents [f & more] clojure.java.io/make-reader [x opts] clojure.java.io/make-writer [x opts] clojure.java.io/output-stream [x & opts] clojure.java.io/reader [x & opts] clojure.java.io/resource [n] [n loader] clojure.java.io/writer [x & opts] Combine (cheat-sheet) with a regex filter on (all-ns), and presto, you have instant, up-to-date Clojure references on command. guns
pgpy9lPrkKL1Q.pgp
Description: PGP signature