@@ -142,7 +142,79 @@ Display TITLE at the top and SPECS are indented underneath."
142
142
143
143
(defun cider--spec-fn-p (value fn-name )
144
144
" Return non nil if VALUE is clojure.spec.[alpha]/FN-NAME."
145
- (string-match-p (concat " ^\\ (clojure.spec\\ |clojure.spec.alpha\\ )/" fn-name " $" ) value))
145
+ (string-match-p (concat " ^\\ (clojure.spec\\ |clojure.spec.alpha\\ |clojure.alpha.spec\\ )/" fn-name " $" ) value))
146
+
147
+ (defun cider-browse-spec--render-schema-map (spec-form )
148
+ " Render the s/schema map declaration SPEC-FORM."
149
+ (let ((name-spec-pairs (seq-partition (cdaadr spec-form) 2 )))
150
+ (format " (s/schema\n {%s }) "
151
+ (string-join
152
+ (thread-last
153
+ (seq-sort-by #'car #'string< name-spec-pairs)
154
+ (mapcar (lambda (s ) (concat (cl-first s) " " (cider-browse-spec--pprint (cl-second s))))))
155
+ " \n " ))))
156
+
157
+ (defun cider-browse-spec--render-schema-vector (spec-form )
158
+ " Render the s/schema vector declaration SPEC-FORM."
159
+ (format " (s/schema\n [%s ]) "
160
+ (string-join
161
+ (thread-last
162
+ (cl-second spec-form)
163
+ (mapcar (lambda (s ) (cider-browse-spec--pprint s))))
164
+ " \n " )))
165
+
166
+ (defun cider-browse-spec--render-schema (spec-form )
167
+ " Render the s/schema SPEC-FORM."
168
+ (let ((schema-args (cl-second spec-form)))
169
+ (if (and (listp schema-args)
170
+ (nrepl-dict-p (cl-first schema-args)))
171
+ (cider-browse-spec--render-schema-map spec-form)
172
+ (cider-browse-spec--render-schema-vector spec-form))))
173
+
174
+ (defun cider-browse-spec--render-select (spec-form )
175
+ " Render the s/select SPEC-FORM."
176
+ (let ((keyset (cl-second spec-form))
177
+ (selection (cl-third spec-form)))
178
+ (format " (s/select\n %s \n [%s ]) "
179
+ (cider-browse-spec--pprint keyset)
180
+ (string-join
181
+ (thread-last
182
+ selection
183
+ (mapcar (lambda (s ) (cider-browse-spec--pprint s))))
184
+ " \n " ))))
185
+
186
+ (defun cider-browse-spec--render-union (spec-form )
187
+ " Render the s/union SPEC-FORM."
188
+ (let ((keyset (cl-second spec-form))
189
+ (selection (cl-third spec-form)))
190
+ (format " (s/union\n %s \n [%s ]) "
191
+ (cider-browse-spec--pprint keyset)
192
+ (string-join
193
+ (thread-last
194
+ selection
195
+ (mapcar (lambda (s ) (cider-browse-spec--pprint s))))
196
+ " \n " ))))
197
+
198
+ (defun cider-browse-spec--render-vector (spec-form )
199
+ " Render SPEC-FORM as a vector."
200
+ (format " [%s ] " (string-join (mapcar #'cider-browse-spec--pprint spec-form))))
201
+
202
+ (defun cider-browse-spec--render-map-entry (spec-form )
203
+ " Render SPEC-FORM as a map entry."
204
+ (let ((key (cl-first spec-form))
205
+ (value (cl-second spec-form)))
206
+ (format " %s %s " (cider-browse-spec--pprint key)
207
+ (if (listp value)
208
+ (cider-browse-spec--render-vector value)
209
+ (cider-browse-spec--pprint value)))))
210
+
211
+ (defun cider-browse-spec--render-map (spec-form )
212
+ " Render SPEC-FORM as a map."
213
+ (let ((map-entries (cl-rest spec-form)))
214
+ (format " {%s } " (thread-last
215
+ (seq-partition map-entries 2 )
216
+ (seq-map #'cider-browse-spec--render-map-entry )
217
+ (string-join )))))
146
218
147
219
(defun cider-browse-spec--pprint (form )
148
220
" Given a spec FORM builds a multi line string with a pretty render of that FORM."
@@ -158,7 +230,7 @@ Display TITLE at the top and SPECS are indented underneath."
158
230
; ; and remove all clojure.core ns
159
231
(thread-last
160
232
form
161
- (replace-regexp-in-string " ^\\ (clojure.spec\\ |clojure.spec.alpha\\ )/" " s/" )
233
+ (replace-regexp-in-string " ^\\ (clojure.spec\\ |clojure.spec.alpha\\ |clojure.alpha.spec \\ )/" " s/" )
162
234
(replace-regexp-in-string " ^\\ (clojure.core\\ )/" " " ))))
163
235
164
236
((and (listp form) (stringp (cl-first form)))
@@ -254,10 +326,21 @@ Display TITLE at the top and SPECS are indented underneath."
254
326
(cider-browse-spec--pprint (cl-second s)))))
255
327
(cl-reduce #'concat )
256
328
(format " %s " )))
329
+ ; ; prettier (s/schema )
330
+ ((cider--spec-fn-p form-tag " schema" )
331
+ (cider-browse-spec--render-schema form))
332
+ ; ; prettier (s/select )
333
+ ((cider--spec-fn-p form-tag " select" )
334
+ (cider-browse-spec--render-select form))
335
+ ; ; prettier (s/union )
336
+ ((cider--spec-fn-p form-tag " union" )
337
+ (cider-browse-spec--render-union form))
257
338
; ; every other with no special management
258
339
(t (format " (%s %s ) "
259
340
(cider-browse-spec--pprint form-tag)
260
341
(string-join (mapcar #'cider-browse-spec--pprint (cl-rest form)) " " ))))))
342
+ ((nrepl-dict-p form)
343
+ (cider-browse-spec--render-map form))
261
344
(t (format " %s " form))))
262
345
263
346
(defun cider-browse-spec--pprint-indented (spec-form )
0 commit comments