Parsing Ruby to get info about method signatures?

L

Lyle Johnson

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.
 
M

Mauricio Fernandez

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.)
[...]

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)
...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,019
Latest member
RoxannaSta

Latest Threads

Top