Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Clojure spec's missing piece
;; clojure.spec's missing piece, work in progress
;; this is only halfway done, somebody else will need to do the other 95%
(require
'[clojure.spec :as s]
'[clojure.spec.test :as test])
(defn naive-english-explain
"Copy and paste this into your app. Figure out what it does by
trying it in production."
([] (naive-english-explain (ex-data *e)))
([spec-explain-data]
(let [p1 (-> spec-explain-data ::s/problems first)]
(str "\nThis value looks wrong:"
"\n\n\t"
(pr-str (:val p1))
"\n\nIt should have matched the spec:\n\n\t"
(pr-str (:pred p1))
"\n"))))
(comment
(s/assert (s/coll-of int?) [1 2 :blah])
(println (naive-english-explain))
)

viebel commented Mar 31, 2017

It works fine for simple cases but the spec is more complex, it doesn't work.
See the live demo of a fork of this gist:
http://app.klipse.tech/?eval_only=1&cljs_in.gist=viebel/2ba85fd79a31172e41d8173748a2f161

This is the forked gist: https://gist.github.com/viebel/2ba85fd79a31172e41d8173748a2f161

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment