summaryrefslogtreecommitdiff
path: root/vim/bundle/slimv/swank-clojure/swank/clj_contrib/pprint.clj
blob: b10df5ff143b24ffe1175a2c6801180375a39f42 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
(ns swank.clj-contrib.pprint)

(def #^{:private true} pprint-enabled?
  (try ;; 1.2+
    (.getResource (clojure.lang.RT/baseLoader) "clojure/pprint")
    (require '[clojure.pprint :as pp])
    (defmacro #^{:private true} pretty-pr-code*
      ([code]
         (if pprint-enabled?
           `(binding [pp/*print-suppress-namespaces* true]
              (pp/with-pprint-dispatch pp/code-dispatch
                (pp/write ~code :pretty true :stream nil)))
           `(pr-str ~code))))
    true
    (catch Exception e
      (try ;; 1.0, 1.1
        (.loadClass (clojure.lang.RT/baseLoader)
                    "clojure.contrib.pprint.PrettyWriter")
        (require '[clojure.contrib.pprint :as pp])
        (defmacro #^{:private true} pretty-pr-code*
          ([code]
             (if pprint-enabled?
               `(binding [pp/*print-suppress-namespaces* true]
                  (pp/with-pprint-dispatch pp/*code-dispatch*
                    (pp/write ~code :pretty true :stream nil)))
               `(pr-str ~code))))
        true
        ;; if you just don't have contrib, be silent.
        (catch ClassNotFoundException _)
        (catch Exception e
          (println e))))))

(defn pretty-pr-code [code]
  (pretty-pr-code* code))