57 lines
2.1 KiB
Clojure
57 lines
2.1 KiB
Clojure
;; Copyright (c) Rich Hickey. All rights reserved.
|
|
;; The use and distribution terms for this software are covered by the
|
|
;; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
|
|
;; which can be found in the file epl-v10.html 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 cljs.repl
|
|
(:require-macros cljs.repl)
|
|
(:require [cljs.spec :as spec]))
|
|
|
|
(defn print-doc [{n :ns nm :name :as m}]
|
|
(println "-------------------------")
|
|
(println (str (when-let [ns (:ns m)] (str ns "/")) (:name m)))
|
|
(when (:protocol m)
|
|
(println "Protocol"))
|
|
(cond
|
|
(:forms m) (doseq [f (:forms m)]
|
|
(println " " f))
|
|
(:arglists m) (let [arglists (:arglists m)]
|
|
(if (or (:macro m)
|
|
(:repl-special-function m))
|
|
(prn arglists)
|
|
(prn
|
|
(if (= 'quote (first arglists))
|
|
(second arglists)
|
|
arglists)))))
|
|
(if (:special-form m)
|
|
(do
|
|
(println "Special Form")
|
|
(println " " (:doc m))
|
|
(if (contains? m :url)
|
|
(when (:url m)
|
|
(println (str "\n Please see http://clojure.org/" (:url m))))
|
|
(println (str "\n Please see http://clojure.org/special_forms#"
|
|
(:name m)))))
|
|
(do
|
|
(when (:macro m)
|
|
(println "Macro"))
|
|
(when (:repl-special-function m)
|
|
(println "REPL Special Function"))
|
|
(println " " (:doc m))
|
|
(when (:protocol m)
|
|
(doseq [[name {:keys [doc arglists]}] (:methods m)]
|
|
(println)
|
|
(println " " name)
|
|
(println " " arglists)
|
|
(when doc
|
|
(println " " doc))))
|
|
(when n
|
|
(when-let [fnspec (spec/get-spec (symbol (str (ns-name n)) (name nm)))]
|
|
(print "Spec")
|
|
(doseq [role [:args :ret :fn]]
|
|
(when-let [spec (get fnspec role)]
|
|
(print (str "\n " (name role) ":") (spec/describe spec)))))))))
|