File tree Expand file tree Collapse file tree 2 files changed +19
-5
lines changed Expand file tree Collapse file tree 2 files changed +19
-5
lines changed Original file line number Diff line number Diff line change 2
2
" Provides a pretty document serializer and pprint fn for Clojure/EDN forms.
3
3
See fipp.clojure for pretty printing Clojure code."
4
4
(:require [clojure.string :as str]
5
- [fipp.ednize :refer [edn record->tagged]]
5
+ [fipp.ednize :refer [edn record->tagged IOverride ]]
6
6
[fipp.visit :refer [visit visit*]]
7
7
[fipp.engine :refer (pprint-document )]))
8
8
19
19
[:span sep " ..." ])]
20
20
[:group open [:align ys ellipsis] close]))
21
21
22
- (defrecord EdnPrinter [symbols print-meta print-length print-level]
22
+ (defn- cached-override?
23
+ [cache x]
24
+ (let [clazz (type x)
25
+ ret (get @cache clazz ::not-found )]
26
+ (if (identical? ::not-found ret)
27
+ (let [ret (satisfies? IOverride x)]
28
+ (vswap! cache assoc clazz ret)
29
+ ret)
30
+ ret)))
31
+
32
+ (defrecord EdnPrinter [symbols print-meta print-length print-level cache]
23
33
24
34
fipp.visit /IVisitor
25
35
36
+ (visit-override? [_ x]
37
+ (cached-override? cache x))
26
38
27
39
(visit-unknown [this x]
28
40
(visit this (edn x)))
96
108
([x] (pretty x {}))
97
109
([x options]
98
110
(let [defaults {:symbols {}
111
+ :cache (volatile! {})
99
112
:print-length *print-length*
100
113
:print-level *print-level*
101
114
:print-meta *print-meta*}
Original file line number Diff line number Diff line change 1
1
(ns fipp.visit
2
2
" Convert to and visit edn structures."
3
- (:require [fipp.util :as util]
4
- [fipp.ednize :refer [override?]]))
3
+ (:require [fipp.util :as util]))
5
4
6
5
; ;;TODO Stablize public interface
7
6
27
26
(visit-var [this x])
28
27
(visit-pattern [this x])
29
28
(visit-record [this x])
29
+
30
+ (visit-override? [this x])
30
31
)
31
32
32
33
(defn visit*
33
34
" Visits objects, ignoring metadata."
34
35
[visitor x]
35
36
(cond
36
37
(nil? x) (visit-nil visitor)
37
- (override? x) (visit-unknown visitor x)
38
+ (visit- override? visitor x) (visit-unknown visitor x)
38
39
(util/boolean? x) (visit-boolean visitor x)
39
40
(string? x) (visit-string visitor x)
40
41
(util/char? x) (visit-character visitor x)
You can’t perform that action at this time.
0 commit comments