Parsing Ruby with Ruby

J

John Wells

Guys,

I'd like to write a code analysis tool that could read Ruby or Rails
projects (so both standard .rb files and also erb files) and do some
simple code analysis and metrics, like what methods are called (and how
many times), etc, etc.

What libraries or tools are out there that might help one accomplish this=
?

Thanks!

John
 
G

Gene Tani

John said:
Guys,

I'd like to write a code analysis tool that could read Ruby or Rails
projects (so both standard .rb files and also erb files) and do some
simple code analysis and metrics, like what methods are called (and how
many times), etc, etc.

What libraries or tools are out there that might help one accomplish this?

Thanks!

John

http://gems.rubyforge.org/gems/coverage-0.2.gem

http://rubyforge.org/projects/zentest/

http://alexpooley.com/articles/2006/01/01/ruby-on-rails-test-coverage
http://eigenclass.org/hiki.rb?rcov+0.1.0+prerelease
http://asplake.blogspot.com/2006/01/test-coverage-with-rcov-and-rake-962.html

http://blog.zenspider.com/archives/ruby/parsetree/index.html
 
G

Gene Tani

John said:
Guys,

I'd like to write a code analysis tool that could read Ruby or Rails
projects (so both standard .rb files and also erb files) and do some
simple code analysis and metrics, like what methods are called (and how
many times), etc, etc.

What libraries or tools are out there that might help one accomplish this?

Thanks!

John

Actually, I think you're looking for libs that expose language
services, so:

(best place to look)
http://rubyforge.org/softwaremap/trove_list.php?form_cat=45&discrim=306

also:
http://rubyforge.org/projects/input/

http://rubyforge.org/projects/rubygrammar/

http://www.zenspider.com/ZSS/Products/CocoR/index.html
http://rubyforge.org/projects/coco-ruby/
 
J

John Wells

Gene,

Thanks for the links. Perhaps I should describe what I'm trying to do a
bit better.

I'd like to write a program that could descend through a directory of Rub=
y
programs and generate summaries of what methods are called where. So,
optimal output for what I'd like to do is the file name parsed, the
methods found that are called within the file, and the classes those
methods are derived from.

So, I could point this program at a directory containing a Rails program
and find out, for example, how many times ActionController::Base#render
was called, and from what files.

Perhaps it's a bit more complicated that I'd hoped.

Thanks!
John
 
T

Timothy Goddard

Do you mean the number of times a method is references or do you mean
the number of times called while running? The former requires an
additional script while the latter requires using the ruby profiler
that ships with the standard distribution (just add the '-rprofile'
option when calling ruby. It will display metrics when your application
ends).
 
E

Eric Hodel

I'd like to write a code analysis tool that could read Ruby or Rails
projects (so both standard .rb files and also erb files) and do some
simple code analysis and metrics, like what methods are called (and
how
many times), etc, etc.

What libraries or tools are out there that might help one
accomplish this?

ParseTree is probably the best tool for this job, it returns the AST
for ruby methods as a tree of arrays and includes a class for
processing and rewriting the AST called SexpProcessor. It comes with
an ABC metrics tool (assignments, branches, calls) and is the
backbone of the ruby2c project.

http://rubyforge.org/projects/parsetree/
 
J

John Wells

Timothy said:
Do you mean the number of times a method is references or do you mean
the number of times called while running? The former requires an
additional script while the latter requires using the ruby profiler
that ships with the standard distribution (just add the '-rprofile'
option when calling ruby. It will display metrics when your application
ends).

The number of time a method is referenced in the code, not called while
running. My goal was to take every Rails OSS project I know of that has
a source repository, run the parser to determine method call counts,
sort and rank.

Why? The one thing I'm missing in Rails is idiomatic ways of doing
things, even after reading the PragProg book. The framework is big, and
some things just haven't "stuck" yet. Thought this would be an
interesting perspective of the projects currently out there.

Thanks!
John
 

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

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top