Function: cider-browse-spec--pprint
cider-browse-spec--pprint is a byte-compiled function defined in
cider-browse-spec.el.
Signature
(cider-browse-spec--pprint FORM)
Documentation
Given a spec FORM builds a multi line string with a pretty render of that FORM.
Source Code
;; Defined in ~/.emacs.d/elpa/cider-20260414.1619/cider-browse-spec.el
(defun cider-browse-spec--pprint (form)
"Given a spec FORM builds a multi line string with a pretty render of that FORM."
(cond ((stringp form)
(if (cider--qualified-keyword-p form)
(with-temp-buffer
(thread-first
form
(insert-text-button 'type 'cider-browse-spec--spec)
(button-put 'spec-name form))
(buffer-string))
;; to make it easier to read replace all clojure.spec ns with s/
;; and remove all clojure.core ns
(thread-last
form
(replace-regexp-in-string "^\\(clojure.spec\\|clojure.spec.alpha\\|clojure.alpha.spec\\)/" "s/")
(replace-regexp-in-string "^\\(clojure.core\\)/" ""))))
((and (listp form) (stringp (car form)))
(let ((form-tag (car form)))
(cond
;; prettier fns #()
((string-equal form-tag "clojure.core/fn")
(if (equal (cadr form) '("%"))
(format "#%s" (string-join (mapcar #'cider-browse-spec--pprint (cddr form))))
(format "(fn [%%] %s)" (string-join (mapcar #'cider-browse-spec--pprint (cddr form))))))
;; prettier (s/and )
((cider--spec-fn-p form-tag "and")
(format "(s/and\n%s)" (string-join (thread-last
(cdr form)
(mapcar #'cider-browse-spec--pprint)
(mapcar (lambda (x) (format "%s" x))))
"\n")))
;; prettier (s/or )
((cider--spec-fn-p form-tag "or")
(let ((name-spec-pair (seq-partition (cdr form) 2)))
(format "(s/or\n%s)" (string-join
(thread-last
name-spec-pair
(mapcar (lambda (s) (format "%s %s" (car s) (cider-browse-spec--pprint (cadr s))))))
"\n"))))
;; prettier (s/merge )
((cider--spec-fn-p form-tag "merge")
(format "(s/merge\n%s)" (string-join (thread-last
(cdr form)
(mapcar #'cider-browse-spec--pprint)
(mapcar (lambda (x) (format "%s" x))))
"\n")))
;; prettier (s/keys )
((cider--spec-fn-p form-tag "keys")
(let ((keys-args (seq-partition (cdr form) 2)))
(format "(s/keys%s)" (thread-last
keys-args
(mapcar (lambda (s)
(let ((key-type (car s))
(specs-vec (cadr s)))
(concat "\n" key-type
" ["
(string-join (thread-last
specs-vec
(mapcar #'cider-browse-spec--pprint)
(mapcar (lambda (x) (format "%s" x))))
"\n")
"]"))))
(string-join)))))
;; prettier (s/multi-spec)
((cider--spec-fn-p form-tag "multi-spec")
(let ((multi-method (cadr form))
(retag (caddr form))
(sub-specs (cdddr form)))
(format "(s/multi-spec %s %s\n%s)"
multi-method
retag
(string-join
(thread-last
sub-specs
(mapcar (lambda (s)
(concat "\n\n" (car s) " " (cider-browse-spec--pprint (cadr s))))))
"\n"))))
;; prettier (s/cat )
((cider--spec-fn-p form-tag "cat")
(let ((name-spec-pairs (seq-partition (cdr form) 2)))
(format "(s/cat %s)"
(thread-last
name-spec-pairs
(mapcar (lambda (s)
(concat "\n" (car s) " " (cider-browse-spec--pprint (cadr s)))))
(string-join)))))
;; prettier (s/alt )
((cider--spec-fn-p form-tag "alt")
(let ((name-spec-pairs (seq-partition (cdr form) 2)))
(format "(s/alt %s)"
(thread-last
name-spec-pairs
(mapcar (lambda (s)
(concat "\n" (car s) " " (cider-browse-spec--pprint (cadr s)))))
(string-join)))))
;; prettier (s/fspec )
((cider--spec-fn-p form-tag "fspec")
(thread-last
(seq-partition (cdr form) 2)
(seq-remove (lambda (s) (and (stringp (cadr s))
(string-empty-p (cadr s)))))
(mapcar (lambda (s)
(format "\n%-11s: %s" (pcase (car s)
(":args" "arguments")
(":ret" "returns")
(":fn" "invariants"))
(cider-browse-spec--pprint (cadr s)))))
(string-join)
(format "%s")))
;; prettier (s/schema )
((cider--spec-fn-p form-tag "schema")
(cider-browse-spec--render-schema form))
;; prettier (s/select )
((cider--spec-fn-p form-tag "select")
(cider-browse-spec--render-select form))
;; prettier (s/union )
((cider--spec-fn-p form-tag "union")
(cider-browse-spec--render-union form))
;; every other with no special management
(t (format "(%s %s)"
(cider-browse-spec--pprint form-tag)
(string-join (mapcar #'cider-browse-spec--pprint (cdr form)) " "))))))
((nrepl-dict-p form)
(cider-browse-spec--render-map form))
(t (format "%s" form))))