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.

Reply via email to