|
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