This post originated from an RSS feed registered with Ruby Buzz
by Ryan Davis.
Original Post: Releasing ParseTree 1.3.3
Feed Title: Polishing Ruby
Feed URL: http://blog.zenspider.com/index.rdf
Feed Description: Musings on Ruby and the Ruby Community...
Latest Ruby Buzz Posts
Latest Ruby Buzz Posts by Ryan Davis
Latest Posts From Polishing Ruby
Advertisement
I am releasing ParseTree 1.3.3 today in preparation of our ruby2c release (also today). Changes in ParseTree are minor, but necessary for ruby2c.
ParseTree is a C extension (using RubyInline) that extracts the parse
tree for an entire class or a specific method and returns it as a
s-expression (aka sexp) using ruby's arrays, strings, symbols, and
integers.
As an example:
def conditional1(arg1)
if arg1 == 0 then
return 1
end
return 0
end
becomes:
[:defn,
:conditional1,
[:scope,
[:block,
[:args, :arg1],
[:if,
[:call, [:lvar, :arg1], :==, [:array, [:lit, 0]]],
[:return, [:lit, 1]],
nil],
[:return, [:lit, 0]]]]]
Features/Problems:
Uses RubyInline, so it just drops in.
Includes SexpProcessor and CompositeSexpProcessor.
Allows you to write very clean filters.
Includes show.rb, which lets you quickly snoop code.
Includes abc.rb, which lets you get abc metrics on code.
abc metrics = numbers of assignments, branches, and calls.
whitespace independent metric for method complexity.
Only works on methods in classes/modules, not arbitrary code.
Does not work on the core classes, as they are not ruby (yet).
Changes:
3 minor enhancement
Cleaned up parse_tree_abc output
Patched up null class names (delegate classes are weird!)
Added UnknownNodeError and switched SyntaxError over to it.
2 bug fixes
Fixed BEGIN node handling to recurse instead of going flat.
FINALLY fixed the weird compiler errors seen on some versions of gcc 3
.4.x related to type punned pointers.
Read: Releasing ParseTree 1.3.3