Skip to content

Instantly share code, notes, and snippets.

@rads

rads/expound.clj Secret

Created April 16, 2023 18:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rads/cad563ed2a14fd1d00be17310dfd6efb to your computer and use it in GitHub Desktop.
Save rads/cad563ed2a14fd1d00be17310dfd6efb to your computer and use it in GitHub Desktop.
(require '[babashka.deps :as deps]
'[clojure.spec.alpha :as s]
'[clojure.spec.test.alpha :as stest])
(deps/add-deps
'{:deps {expound/expound {:mvn/version "0.9.0"}}})
(require '[expound.alpha :as expound])
(defn foo [x]
x)
(s/fdef foo
:args (s/cat :x int?))
(alter-var-root #'s/*explain-out* (constantly expound/printer))
(stest/instrument (stest/instrumentable-syms *ns*))
(foo "bar")
----- Error --------------------------------------------------------------------
Type: clojure.lang.ExceptionInfo
Message: Call to user/foo did not conform to spec.
Data: {:clojure.spec.alpha/problems [{:path [:x], :pred clojure.core/int?, :val "bar", :via [], :in [0]}], :clojure.spec.alpha/spec #object[babashka.impl.reify2$reify_fn$reify__28000 0x7ba7306a "babashka.impl.reify2$reify_fn$reify__28000@7ba7306a"], :clojure.spec.alpha/value ("bar"), :clojure.spec.alpha/fn user/foo, :clojure.spec.alpha/args ("bar"), :clojure.spec.alpha/failure :instrument, :clojure.spec.test.alpha/caller {:file "interop.cljc", :line 56, :var-scope sci.impl.interop/invoke-instance-method}}
Location: resource:/src/babashka/clojure/spec/test/alpha.clj:143:26
----- Stack trace --------------------------------------------------------------
clojure.spec.test.alpha/foo - resource:/src/babashka/clojure/spec/test/alpha.clj:143:26
clojure.spec.test.alpha - resource:/src/babashka/clojure/spec/test/alpha.clj:151:32
user/foo - /Users/rads/src/bbin-site/expound.clj:10:1
user - /Users/rads/src/bbin-site/expound.clj:19:1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment