spec-tools
spec-tools copied to clipboard
Thoughts about fdef utils?
Just wanted to stir up a conversation about this. I personally find specing functions to be tedious for most, simple functions.
Assume we had this spec:
(ds/spec ::user {::id spec/uuid?
::age spec/pos-int?
::name spec/string?})
Assume we want to spec this function:
(defn teenager?
[user]
(<= 13 (::age user) 19))
It would be neat if we could somehow spec this function easier
(ds/specf teenager?
[::user] ; args
spec/boolean? ; ret
nil ; fn
)
Or even with a Schema like macro:
(ds/defn teenager? :- spec/boolean?
[user :- ::user]
(<= 13 (::age user) 19))
I haven't actually fleshed out any of my thoughts, just wanted to see what you thought about some function specing utilities.
Hi. There is a similar discussion in the Schema repo: https://github.com/plumatic/schema/issues/366 I think the schema-syntax would be great for spec too.
I personally like the macro approach as it makes it easier to look at one place and see the semantics of the function. I'd rather just cover the simple/common cases and if the user needs something more advanced they should just use fdef or something more low-level directly.
+1 !!!!!!!!!
Related: https://groups.google.com/forum/m/#!topic/clojure/0wqvG2sef8I
The goal is to add the macro to orchestra, as a tool to help encourage spec'ing all functions.
Also see https://github.com/Provisdom/defn-spec
Related: https://github.com/plumatic/schema/issues/366#issuecomment-1008284317