|
129 | 129 | :page-size new-page-size
|
130 | 130 | :current-page 0)))
|
131 | 131 |
|
| 132 | +(defn set-max-atom-length |
| 133 | + "Set the maximum length of atomic collection members before they're truncated." |
| 134 | + [inspector max-atom-length] |
| 135 | + {:pre [(integer? max-atom-length)]} |
| 136 | + (inspect-render (assoc inspector :max-atom-length max-atom-length))) |
| 137 | + |
| 138 | +(defn set-max-coll-size |
| 139 | + "Set the maximum number of nested collection members to print before truncating." |
| 140 | + [inspector max-coll-size] |
| 141 | + {:pre [(integer? max-coll-size)]} |
| 142 | + (inspect-render (assoc inspector :max-coll-size max-coll-size))) |
| 143 | + |
132 | 144 | (defn eval-and-inspect
|
133 | 145 | "Evaluate the given expression where `v` is bound to the currently inspected
|
134 | 146 | value. Open the evaluation result in the inspector."
|
|
167 | 179 | (s/join sep)
|
168 | 180 | (format fmt))))
|
169 | 181 |
|
170 |
| -(defn- short? [coll] |
171 |
| - (<= (count coll) 5)) |
| 182 | +(def ^:private ^:dynamic *max-atom-length* 150) |
| 183 | +(def ^:private ^:dynamic *max-coll-size* 5) |
172 | 184 |
|
173 |
| -(def ^:private truncate-max-length 150) |
| 185 | +(defn- short? [coll] |
| 186 | + ;; Prefer `bounded-count` if available (clojure 1.9+) or fall back to `count`. |
| 187 | + (let [len (if-let [;; NOTE can't name this `bounded-count` because eastwood's |
| 188 | + ;; :local-shadows-var warning can't be suppressed. |
| 189 | + bounded-count-fn (some-> (resolve 'clojure.core/bounded-count) |
| 190 | + (var-get))] |
| 191 | + (bounded-count-fn (inc *max-coll-size*) coll) |
| 192 | + (count coll))] |
| 193 | + (<= len *max-coll-size*))) |
174 | 194 |
|
175 | 195 | (defn- truncate-string [s]
|
176 | 196 | (when s
|
177 | 197 | (let [len (count s)]
|
178 |
| - (if (> len truncate-max-length) |
179 |
| - (str (subs s 0 (- truncate-max-length 2)) "...") |
| 198 | + (if (> len *max-atom-length*) |
| 199 | + (str (subs s 0 (max (- *max-atom-length* 3) 0)) "...") |
180 | 200 | s))))
|
181 | 201 |
|
182 | 202 | (defn value-types [value]
|
|
228 | 248 | (safe-pr-seq value "[ %s ]"))
|
229 | 249 |
|
230 | 250 | (defmethod inspect-value :vector-long [value]
|
231 |
| - (safe-pr-seq (take 5 value) "[ %s ... ]")) |
| 251 | + (safe-pr-seq (take *max-coll-size* value) "[ %s ... ]")) |
232 | 252 |
|
233 | 253 | (defmethod inspect-value :lazy-seq [value]
|
234 |
| - (let [first-six (take 6 value)] |
235 |
| - (if (= (count first-six) 6) |
236 |
| - (safe-pr-seq (take 5 value) "( %s ... )") |
237 |
| - (safe-pr-seq first-six "( %s )")))) |
| 254 | + (let [prefix-length (inc *max-coll-size*) |
| 255 | + prefix (take prefix-length value)] |
| 256 | + (if (= (count prefix) prefix-length) |
| 257 | + (safe-pr-seq (take *max-coll-size* value) "( %s ... )") |
| 258 | + (safe-pr-seq prefix "( %s )")))) |
238 | 259 |
|
239 | 260 | (defmethod inspect-value :list [value]
|
240 | 261 | (safe-pr-seq value "( %s )"))
|
241 | 262 |
|
242 | 263 | (defmethod inspect-value :list-long [value]
|
243 |
| - (safe-pr-seq (take 5 value) "( %s ... )")) |
| 264 | + (safe-pr-seq (take *max-coll-size* value) "( %s ... )")) |
244 | 265 |
|
245 | 266 | (defmethod inspect-value :set [value]
|
246 | 267 | (safe-pr-seq value "#{ %s }"))
|
247 | 268 |
|
248 | 269 | (defmethod inspect-value :set-long [value]
|
249 |
| - (safe-pr-seq (take 5 value) "#{ %s ... }")) |
| 270 | + (safe-pr-seq (take *max-coll-size* value) "#{ %s ... }")) |
250 | 271 |
|
251 | 272 | (defmethod inspect-value :array [value]
|
252 | 273 | (let [ct (.getName (or (.getComponentType (class value)) Object))]
|
253 | 274 | (safe-pr-seq value ", " (str ct "[] { %s }"))))
|
254 | 275 |
|
255 | 276 | (defmethod inspect-value :array-long [value]
|
256 | 277 | (let [ct (.getName (or (.getComponentType (class value)) Object))]
|
257 |
| - (safe-pr-seq (take 5 value) ", " (str ct "[] { %s ... }")))) |
| 278 | + (safe-pr-seq (take *max-coll-size* value) ", " (str ct "[] { %s ... }")))) |
258 | 279 | (defmethod inspect-value java.lang.Class [value]
|
259 | 280 | (pr-str value))
|
260 | 281 |
|
|
523 | 544 |
|
524 | 545 | (defn inspect-render
|
525 | 546 | ([inspector] (inspect-render inspector (:value inspector)))
|
526 |
| - ([inspector value] (-> (reset-index inspector) |
527 |
| - (assoc :rendered []) |
528 |
| - (assoc :value value) |
529 |
| - (render-reference) |
530 |
| - (inspect value) |
531 |
| - (render-path)))) |
| 547 | + ([inspector value] |
| 548 | + (binding [*max-atom-length* (or (:max-atom-length inspector) *max-atom-length*) |
| 549 | + *max-coll-size* (or (:max-coll-size inspector) *max-coll-size*)] |
| 550 | + (-> (reset-index inspector) |
| 551 | + (assoc :rendered []) |
| 552 | + (assoc :value value) |
| 553 | + (render-reference) |
| 554 | + (inspect value) |
| 555 | + (render-path))))) |
532 | 556 |
|
533 | 557 | ;; Get a human readable printout of rendered sequence
|
534 | 558 | (defmulti inspect-print-component first)
|
|
0 commit comments