cljs.repl/source-fn
(source-fn env x)
Source docstring:
Returns a string of the source code for the given symbol, if it can
find it. This requires that the symbol resolve to a Var defined in
a namespace for which the .clj is in the classpath. Returns nil if
it can't find the source. For most REPL usage, 'source' is more
convenient.
Example: (source-fn 'filter)
(defn source-fn
[env x]
(when-let [v (ana-api/resolve env x)]
(when-let [filepath (:file v)]
(let [f (io/file filepath)
f (if (.exists f)
f
(io/resource filepath))]
(when f
(with-open [pbr (PushbackReader. (io/reader f))]
(let [rdr (readers/source-logging-push-back-reader pbr)]
(dotimes [_ (dec (:line v))] (readers/read-line rdr))
(binding [reader/*alias-map* identity
reader/*data-readers* (merge tags/*cljs-data-readers*
(ana/load-data-readers))]
(-> (reader/read {:read-cond :allow :features #{:cljs}} rdr)
meta :source)))))))))