Nicola can answer more authoritatively, as I haven't checked that part of
tools.analyzer recently, but I am pretty sure that the :arglists with
things like doc-string? attr-map? are simply treated as if they were normal
positional arguments, with no 'guessing' that they are optional due their
symbols ending with a question mark.

A function with :arglists ([x & xs]) is checked that it takes 1 or more
args, so only warning if a call is made with 0 args.  That is why the
current release of Eastwood will give incorrect :wrong-arity warning
messages if one manually sets :arglists for a function to something other
than what defn would make it.

For macros, they are all expanded during Eastwood analysis, so any
incorrect number of arguments should cause an exception to be thrown during
analysis, much like it would if you attempted to compile such code.

Andy


On Mon, Jan 13, 2014 at 6:57 PM, Colin Fleming
<colin.mailingl...@gmail.com>wrote:

> This is an interesting discussion, I've been thinking about some of these
> problems as I move towards adding inspections in Cursive. arglist parsing
> is a real problem in Clojure. I'd like to be able to flag invocations of
> functions with bad arities in the editor, but it's very difficult. Even
> defn is complicated, given that its :arglists is:
>
> :arglists '([name doc-string? attr-map? [params*] prepost-map? body]
>             [name doc-string? attr-map? ([params*] prepost-map? body)+
> attr-map?])
>
> and its actual args declaration is:
>
> [&form &env name & fdecl]
>
> There's really no way to parse either of them automatically well. Does
> Eastwood use the actual fn declaration or :arglists for linting? What would
> it do in the case above? It's impossible to tell if doc-string? is a
> boolean or if it's an optional arg.
>
> Oh, and I agree that invalid :arglists as documentation is probably a bad
> idea, since it'll inevitably make this sort of tooling more difficult than
> it already is.
>
>
> On 14 January 2014 14:03, Sean Corfield <s...@corfield.org> wrote:
>
>> On Jan 13, 2014, at 3:09 PM, Nicola Mometto <brobro...@gmail.com> wrote:
>> > To be honest I don't like the idea of libraries attaching not-valid
>> > :arglists meta to Vars at all since the doc[1] for `def` says that
>> :arglists
>> > will be "a list of vector(s) of argument forms, as were supplied to
>> > defn" and the clojure Compiler uses :arglists for type-hints handling.
>>
>> I agree with you in principle - and I'm happy to change java.jdbc to
>> avoid the issue.
>>
>> Could Eastwood (or j.t.a) flag invalid :arglists? The "example" ones in
>> both java.jdbc and congomongo are clearly "invalid" according the special
>> forms page (but they silently "work"). Perhaps if Eastwood finds invalid /
>> suspicious metadata in :arglists, it could use a different linter warning?
>>
>> Sean Corfield -- (904) 302-SEAN
>> An Architect's View -- http://corfield.org/
>>
>> "Perfection is the enemy of the good."
>> -- Gustave Flaubert, French realist novelist (1821-1880)
>>
>>
>>
>>
>  --
> --
> 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/groups/opt_out.
>

-- 
-- 
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/groups/opt_out.

Reply via email to