|
5 | 5 | {:added "0.20"}
|
6 | 6 | (:refer-clojure :exclude [pr])
|
7 | 7 | (:require
|
8 |
| - [clojure.pprint :as pp])) |
| 8 | + [clojure.pprint :as pp] |
| 9 | + [orchard.misc :as misc])) |
9 | 10 |
|
10 | 11 | (def ^:private pr-options
|
11 | 12 | [:print-dup
|
|
19 | 20 | [option]
|
20 | 21 | (resolve (symbol "clojure.core" (str "*" (name option) "*"))))
|
21 | 22 |
|
| 23 | +(defn- try-resolve [var-symbol pprinter-name] |
| 24 | + (or (misc/require-and-resolve var-symbol) |
| 25 | + (binding [*out* *err*] |
| 26 | + (println (format "Could not load %s namespace. To use %s pretty-printing with CIDER, add it to dependencies explicitly." |
| 27 | + (namespace var-symbol) pprinter-name)) |
| 28 | + nil))) |
| 29 | + |
22 | 30 | (defn- pr-bindings
|
23 | 31 | [options]
|
24 | 32 | (->> (select-keys options pr-options)
|
|
57 | 65 | (@fipp-printer value options))))
|
58 | 66 |
|
59 | 67 | (def ^:private puget-printer
|
60 |
| - (delay (requiring-resolve 'puget.printer/pprint))) |
| 68 | + (delay (try-resolve 'puget.printer/pprint "Puget"))) |
61 | 69 |
|
62 | 70 | (defn puget-pprint
|
63 | 71 | ([value writer]
|
64 | 72 | (puget-pprint value writer {}))
|
65 | 73 | ([value writer options]
|
66 |
| - (binding [*out* writer] |
67 |
| - (@puget-printer value options)))) |
| 74 | + (if-some [puget @puget-printer] |
| 75 | + (binding [*out* writer] |
| 76 | + (puget value options)) |
| 77 | + ;; Default ot clojure.pprint/pprint if Puget could not be loaded. |
| 78 | + (pprint value writer options)))) |
68 | 79 |
|
69 | 80 | (def ^:private zprint-printer
|
70 |
| - (delay (requiring-resolve 'zprint.core/zprint))) |
| 81 | + (delay (try-resolve 'zprint.core/zprint "zprint"))) |
71 | 82 |
|
72 | 83 | (defn zprint-pprint
|
73 | 84 | ([value writer]
|
74 | 85 | (zprint-pprint value writer {}))
|
75 | 86 | ([value writer options]
|
76 |
| - (binding [*out* writer] |
77 |
| - (@zprint-printer value options)))) |
| 87 | + (if-some [zprint @zprint-printer] |
| 88 | + (binding [*out* writer] |
| 89 | + (zprint value options)) |
| 90 | + ;; Default ot clojure.pprint/pprint if Zprint could not be loaded. |
| 91 | + (pprint value writer options)))) |
0 commit comments