# ParseTree 1.6.4 Released

**URL:** <https://www.ruby-forum.com/t/parsetree-1-6-4-released/85474>\
**Category:** Ruby\
**Created:** [February 13, 2007, 11:28pm UTC](https://www.ruby-forum.com/t/parsetree-1-6-4-released/85474 "2007-02-13T23:28:06Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![aguynamedryan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/43a26b/32.png) [@aguynamedryan](https://www.ruby-forum.com/u/aguynamedryan)\
**Post date:** [February 13, 2007, 11:28pm UTC](https://www.ruby-forum.com/t/parsetree-1-6-4-released/85474/1 "2007-02-13T23:28:06Z")

</div>

ParseTree version 1.6.4 has been released!

[zenspider projects | software projects | by ryan davis](http://www.zenspider.com/ZSS/Products/ParseTree/)

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 parse\_tree\_show, which lets you quickly snoop code.
  - echo “1+1” | parse\_tree\_show -f for quick snippet output.

- Includes parse\_tree\_abc, which lets you get abc metrics on code.
  - abc metrics = numbers of assignments, branches, and calls.
  - whitespace independent metric for method complexity.

- Includes parse\_tree\_deps, which shows you basic class level  
dependencies.
- Only works on methods in classes/modules, not arbitrary code.
- Does not work on the core classes, as they are not ruby (yet).

\*\* SYNOPSYS:

sexp\_array = ParseTree.new.parse\_tree(klass)

or:

class MyProcessor \< SexpProcessor  
def initialize  
super  
self.strict = false  
end  
def process\_lit(exp)  
val = exp.shift  
return val  
end  
end

or:

% ./parse\_tree\_show myfile.rb

or:

% echo “1+1” | ./parse\_tree\_show -f

or:

% ./parse\_tree\_abc myfile.rb

\*\* CHANGES:

- 2 major enhancements:

- 1 minor enhancement:

- 1 bug fix:

---

<div class="post-metadata">

**Author:** ![aguynamedryan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/43a26b/32.png) [@aguynamedryan](https://www.ruby-forum.com/u/aguynamedryan)\
**Post date:** [February 14, 2007, 3:45am UTC](https://www.ruby-forum.com/t/parsetree-1-6-4-released/85474/2 "2007-02-14T03:45:28Z")

</div>

OK… I suck… there was a bug in my release script with the new  
changes to hoe (updating online rdoc does a clean, which nuked the  
email text file).

ParseTree version 1.7.0 has been released!

[zenspider projects | software projects | by ryan davis](http://www.zenspider.com/ZSS/Products/ParseTree/)

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.

Changes:

- 2 major enhancements:

- 1 minor enhancement:

- 1 bug fix:
