defn is a macro, and thus macro-expanded during Eastwood analysis, I
believe ignoring the :arglists.  I think it is really only the :arglists of
functions that matter for Eastwood :wrong-arity warnings

Andy


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

> Interesting - but there must be some sort of magic there since otherwise
> every call to defn would be flagged, since its :arglists implies it has 6
> arguments. And in fact, there's nothing there indicating that the body is
> in fact the body.
>
>
> On 14 January 2014 18:56, Andy Fingerhut <andy.finger...@gmail.com> wrote:
>
>> 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.
>>
>
>  --
> --
> 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