|
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 [bounded-count (some-> (resolve 'clojure.core/bounded-count) |
| 188 | + (var-get))] |
| 189 | + (bounded-count (inc *max-coll-size*) coll) |
| 190 | + (count coll))] |
| 191 | + (<= len *max-coll-size*))) |
174 | 192 |
|
175 | 193 | (defn- truncate-string [s]
|
176 | 194 | (when s
|
177 | 195 | (let [len (count s)]
|
178 |
| - (if (> len truncate-max-length) |
179 |
| - (str (subs s 0 (- truncate-max-length 2)) "...") |
| 196 | + (if (> len *max-atom-length*) |
| 197 | + (str (subs s 0 (max (- *max-atom-length* 3) 0)) "...") |
180 | 198 | s))))
|
181 | 199 |
|
182 | 200 | (defn value-types [value]
|
|
228 | 246 | (safe-pr-seq value "[ %s ]"))
|
229 | 247 |
|
230 | 248 | (defmethod inspect-value :vector-long [value]
|
231 |
| - (safe-pr-seq (take 5 value) "[ %s ... ]")) |
| 249 | + (safe-pr-seq (take *max-coll-size* value) "[ %s ... ]")) |
232 | 250 |
|
233 | 251 | (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 )")))) |
| 252 | + (let [prefix-length (inc *max-coll-size*) |
| 253 | + prefix (take prefix-length value)] |
| 254 | + (if (= (count prefix) prefix-length) |
| 255 | + (safe-pr-seq (take *max-coll-size* value) "( %s ... )") |
| 256 | + (safe-pr-seq prefix "( %s )")))) |
238 | 257 |
|
239 | 258 | (defmethod inspect-value :list [value]
|
240 | 259 | (safe-pr-seq value "( %s )"))
|
241 | 260 |
|
242 | 261 | (defmethod inspect-value :list-long [value]
|
243 |
| - (safe-pr-seq (take 5 value) "( %s ... )")) |
| 262 | + (safe-pr-seq (take *max-coll-size* value) "( %s ... )")) |
244 | 263 |
|
245 | 264 | (defmethod inspect-value :set [value]
|
246 | 265 | (safe-pr-seq value "#{ %s }"))
|
247 | 266 |
|
248 | 267 | (defmethod inspect-value :set-long [value]
|
249 |
| - (safe-pr-seq (take 5 value) "#{ %s ... }")) |
| 268 | + (safe-pr-seq (take *max-coll-size* value) "#{ %s ... }")) |
250 | 269 |
|
251 | 270 | (defmethod inspect-value :array [value]
|
252 | 271 | (let [ct (.getName (or (.getComponentType (class value)) Object))]
|
253 | 272 | (safe-pr-seq value ", " (str ct "[] { %s }"))))
|
254 | 273 |
|
255 | 274 | (defmethod inspect-value :array-long [value]
|
256 | 275 | (let [ct (.getName (or (.getComponentType (class value)) Object))]
|
257 |
| - (safe-pr-seq (take 5 value) ", " (str ct "[] { %s ... }")))) |
| 276 | + (safe-pr-seq (take *max-coll-size* value) ", " (str ct "[] { %s ... }")))) |
258 | 277 | (defmethod inspect-value java.lang.Class [value]
|
259 | 278 | (pr-str value))
|
260 | 279 |
|
|
531 | 550 |
|
532 | 551 | (defn inspect-render
|
533 | 552 | ([inspector] (inspect-render inspector (:value inspector)))
|
534 |
| - ([inspector value] (-> (reset-index inspector) |
535 |
| - (assoc :rendered []) |
536 |
| - (assoc :value value) |
537 |
| - (render-reference) |
538 |
| - (inspect value) |
539 |
| - (render-path)))) |
| 553 | + ([inspector value] |
| 554 | + (binding [*max-atom-length* (or (:max-atom-length inspector) *max-atom-length*) |
| 555 | + *max-coll-size* (or (:max-coll-size inspector) *max-coll-size*)] |
| 556 | + (-> (reset-index inspector) |
| 557 | + (assoc :rendered []) |
| 558 | + (assoc :value value) |
| 559 | + (render-reference) |
| 560 | + (inspect value) |
| 561 | + (render-path))))) |
540 | 562 |
|
541 | 563 | ;; Get a human readable printout of rendered sequence
|
542 | 564 | (defmulti inspect-print-component first)
|
|
0 commit comments