I don't know how hard or easy it might be to implement a check like this in
a lint tool like Eastwood, but I've created a Github issue for it with the
idea, linking to this discussion, in case someone thinks of a way.

    https://github.com/jonase/eastwood/issues/83

Andy


On Fri, Aug 15, 2014 at 10:12 AM, Reid McKenzie <rmckenzi...@gmail.com>
wrote:

>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Comments inline
> On 08/15/2014 06:47 AM, Dave Tenny wrote:
> > This is getting old.   Any suggestions or plans to fix it?  Do I need to
> use some other common
> declaration style for functions?
> >
> > ; CIDER 0.5.0 (Clojure 1.6.0, nREPL 0.2.3)
> > user> (defn foo [& {:keys [bar]}] bar)
> > #'user/foo
> > user> (foo :baz 1)
> > nil
> >
> > In my opinion the compilation of the call to foo should have
> complained about :baz not matching a known parameter.
>
> At the implementation level, there is no "formal parameter" here. You've
> defined a variadic function, who's varargs are to be treated as a map
> key/value sequence, and the key ":bar" of which you wish to extract and
> bind to a local. "bar" here is _not_ a formal parameter of foo, it's
> simply a local destructured from the map converted varargs.
>
> > Failure to do this leads to lots of extra debugging because someone had
> a typo in a keyword name,
> > e.g. ":Name" instead of ":name" or :product instead of :project, or
> whatever.
> >
> > This is probably the leading cause of unexpected program operation in
> clojure for me.
>
> For a number of implementation reasons, this is not something that
> clojure/core is ever likely to provide better support for. Prismatic's
> Schema, core.typed and aggressive use of preconditions are the best
> tools available for you to guard against these errors. For exactly this
> reason I have personally adopted the practice of asserting what equates
> to a full typecheck of all arguments in function preconditions.
> Clojure/core doesn't do this in the name of "performance", but for user
> code it's easy enough to remove typechecks if the overhead becomes
> significant.
>
> Reid
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2
>
> iQIcBAEBAgAGBQJT7j+QAAoJELjHpJOzPfTl2pAP/3IbqqxDayp5Vz7I2l3D1dE5
> Eq4mFz3bjLrsR+th69xd6VWY4szTeeg09ub1NKUPQ2Uhm8EIMj1lFeZIHi9VmxNN
> zKASZ+l29ntDolChSLBM7JqQBWNYaLcPQQl4BTXi6BFy97TUFUq5IxKhIpvhgjQ+
> HV9Csg7rGhvz3sQU55W/K3YwoIgf1Kjd18Ewa3KytbKgKbGiwYDAqfqPtaQn0V+K
> 709lPTDe/WNMCjW8AcKsCqQAOhRObxfLwdL9iBRrdJNSaj17Vy0p+0xXA8RXuiGk
> tdEF6MADOmquFxZko3tvkaJfizA/2wRwIzbvqByuGqfgVQgsDdUEbsC04tB5pMqi
> 8H/O7HZ5DnExeOmL6TcSuBW+wWwqptBvqI1QuplZX2BOfbu1/whozUXU9Jq0SQLp
> V+bB2nM9qO+c6lxF9o8Fep3UaGxU4eKwwviJ6i3e5+uEvZ0N6p6vY4+wJO8ezJnN
> s4UOiEEMjtfBo4CyBZGxcNW3XzLoM6/5kAt25nKRQHDSChqsH5vjFbvrP6oq7S1d
> 4HEcGKHdA2D8wrE5b3XkLwsRjpNmXXn1h5TdE5RB3DYqSmU56Dwrt08aew7gC7We
> OvFQpIX9F/gW6dFJzVxQka4MV1IkYT0JiNypKFyHXz3l3PkFMYR//W0ehsSlAkjT
> +E0U1+KjplF9RPZ98myw
> =sqVb
> -----END PGP SIGNATURE-----
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to