From: Ryan Davis Date: 2007-12-23T07:51:45+09:00 Subject: [ANN] ParseTree 2.1.0 Released ParseTree version 2.1.0 has been released! * 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]]]]] * Uses RubyInline, so it just drops in. * Includes SexpProcessor and CompositeSexpProcessor. * Allows you to write very clean filters. * Includes UnifiedRuby, allowing you to automatically rewrite ruby quirks. * ParseTree#parse_tree_for_string lets you parse arbitrary strings of ruby. * 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. * Does not work on the core classes, as they are not ruby (yet). Changes: * 13 minor enhancements: * Added (partial) regexp flag support, currently numerical. ugh. * Added -a flag to parse_tree_show to turn on newline (all) nodes. * Added -r to parse_tree_show for raw arrays instead of sexps. * Added Unifier (SexpProcessor) class to unified_ruby.rb. * Added a ton of tests while working on ruby_parser. * Added ability to tell proc {} (nil arg slot) from proc {||} (0 arg slot) * Added context tracking to rewriting phase... slightly broken. * Added evstr support. (I hate evan) * Added usage for parse_tree_show. * Changed verbose to be true all the time in parse_tree_for_string. * Removed process_level from SexpProcessor... just look at context size instead. * Revamped ParseTree. No more passing around newline. Pass around self instead. * I'm starting to dislike ruby's AST. It is REALLY inconsistent. * 6 bug fix: * SexpProcessor#assert_type now a bit safer with bad values. * Uncovered a bug in ruby (AST changes when -v used), added handler code. * Fixed NODE_BLOCK and massively simplified in the process. * Fixed rewrite_defs to deal with non-block asts. * Fixed test/unit hack so it does not die under miniunit. * Found a bug in PT where parse_tree_for_string had some shadowed variables. *