The "% coverage" part is done. You can see the documentation at https://github.com/astrieanna/TypeCheck.jl#methodswithdescendantstdatatypeonlyleavesboolfalselimint10(anchor in the README). Please try it out and let me know whether it's helpful. (Note that abstract types are included by default; using onlyleaves=true to get your requested behavior.)
Usage statistics are definitely harder, but only because finding uses of a function in general is harder. I'll think about that a bit more; check_method_calls might have some of the needed infrastructure of that. Comparing types could be accomplished with a wrapper on the new methodswithdescendants function; I can add that. -- Leah On Tue, Feb 25, 2014 at 4:26 PM, andrew cooke <[email protected]> wrote: > > sweet. i'd like to see something like "% coverage". for Number, for > example, what % of concrete types have abs() defined? > > another useful statistic, which might not be possible, is across how many > modules is a function used - for example, which operation on Number occurs > in most modules? which are used only in one module? > > it would also be nice if you could compare types - what functions does > Integer (or sub types) have, that my type does not? > > and ponies! > > cheers, andrew > > ps i just looked at TypeCheck. check_loop_types is going to be sooo > useful.... > > > > On Tuesday, 25 February 2014 20:13:07 UTC-3, Leah Hanson wrote: > >> I'm planning to add a "which methods are defined for subtypes of this >> type" function to TypeCheck.jl this week. If there's any specific behavior >> you want it to have, let me know. :) >> >> -- Leah >> >> >> On Tue, Feb 25, 2014 at 2:52 PM, David Moon <[email protected]> wrote: >> >>> On Tuesday, February 25, 2014 7:14:37 AM UTC-5, David Moon wrote: >>>> >>>> >>>> The advantage of making it an explicit concept in the language, rather >>>> than just defining a method that signals an error, is that it can be >>>> checked at compile time. >>>> >>> >>> In Julia, compile time is load time. Specifically, after evaluating a >>> top-level expression (which may have loaded a whole lot of files) check >>> each newly defined datatype or bitstype to see if there are any required >>> methods that involve that type or its supertypes. If so, check if an >>> instance of the newly defined type would have all the required methods >>> applicable to it in the appropriate argument position. >>> >> >>
