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.