metosin / spec-tools

Clojure(Script) tools for clojure.spec
Eclipse Public License 2.0
593 stars 94 forks source link

Thoughts about fdef utils? #72

Open vincentjames501 opened 7 years ago

vincentjames501 commented 7 years ago

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.

ikitommi commented 7 years ago

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.

vincentjames501 commented 7 years ago

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.

pablobcb commented 7 years ago

+1 !!!!!!!!!

ikitommi commented 7 years ago

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.

metametadata commented 6 years ago

Also see https://github.com/Provisdom/defn-spec

ikitommi commented 2 years ago

Related: https://github.com/plumatic/schema/issues/366#issuecomment-1008284317