Ruby Forum Ruby > Parsing Ruby to get info about method signatures?

Posted by Lyle Johnson (Guest)
on 19.10.2006 23:17
(Received via mailing list)
I'm interested in parsing some Ruby code for the purpose of extracting
information about the method signatures (including argument names and
default argument values). For example, if I had a method like:

    def foo(a, b=2, c=3)
      ...
    end

I'd like to be able to programmatically determine that I have a method
named "foo", with arguments "a", "b" and "c", with defaults of 2 and 3
for the latter two arguments. (I will use that information about the
method signatures to generate some additional code.)

Does anyone have any experience with this? I looked at the XML
generator for RDoc, but its output doesn't appear to provide this kind
of information. Ryan's ParseTree library may do the trick, or worst
case, I could write some kind of custom parsing tool myself. Just
wanted to see if anyone has any thoughts on this.
Posted by Mauricio Fernandez (Guest)
on 20.10.2006 00:31
(Received via mailing list)
On Fri, Oct 20, 2006 at 06:16:54AM +0900, Lyle Johnson wrote:
> for the latter two arguments. (I will use that information about the
> method signatures to generate some additional code.)
[...]

http://eigenclass.org/hiki.rb?method+arguments+via+introspection

$ ruby method_args.rb csv
CSV::Cell#initialize (data = "", is_null = false)
CSV::Cell#data ()
CSV.open (path, mode, fs = nil, rs = nil)
CSV.foreach (path, rs = nil)
CSV.read (path, length = nil, offset = nil)
CSV.readlines (path, rs = nil)
CSV.generate (path, fs = nil, rs = nil)
CSV.parse (str_or_readable, fs = nil, rs = nil)
CSV.parse_line (src, fs = nil, rs = nil)
CSV.generate_line (row, fs = nil, rs = nil)
CSV.parse_row (src, idx, out_dev, fs = nil, rs = nil)
CSV.generate_row (src, cells, out_dev, fs = nil, rs = nil)
CSV::Reader.parse (str_or_readable, fs = ",", rs = nil)
CSV::Reader.create (str_or_readable, fs = ",", rs = nil)
CSV::Reader#each ()
CSV::Reader#shift ()
CSV::Reader#close ()
CSV::Reader#initialize (dev)
CSV::StringReader#initialize (string, fs = ",", rs = nil)
...
Posted by Lyle Johnson (Guest)
on 20.10.2006 19:26
(Received via mailing list)
On 10/19/06, Mauricio Fernandez <mfp@acm.org> wrote:

> http://eigenclass.org/hiki.rb?method+arguments+via+introspection

Thanks, Mauricio! I will check this out too.