Posted
about 1 month
ago
by
Ryan Davis
ParseTree version 2.2.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
... [More]
, 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]]]]]
Changes:
### 2.2.0 / 2008-06-09
* 18 minor enhancements:
* Added 1.9 and rubinius to multiruby skip list.
* Added 1.9 fixes for SexpProcessor.
* Added compatibility changes for regexp option values.
* Added custom compact since Array#compact is hostile to subclasses.
* Added some tests for wonky index edge cases. some commented out.
* Added test changes for 1.9 and r2r changes. Esp fixed regexp differences.
* Added tests for dasgn, proc arities,
* Added/updated some tests for ruby_parser.
* Changed tests to default to nil for verbose.
* Fixed all assertions deprecated in miniunit.
* Raises LoadError if incompatible ruby, allows fallback to ruby_parser.
* Removed Unified's rewrite_fbody and moved up into defn... not sure about that.
* Removed argscat rewriter from unified_ruby.rb
* Renamed shadowed variable name.
* Reworked parse_tree_for_(method|string) to take optional verbose arg.
* Started removing ending newlines from pt_testcase.rb.
* Uncommented all commented out tests. ruby_parser must not be a pansy.
* Updated rakefile for new hoe abilities.
* 3 bug fixes:
* Fixed 1.8.[45] wrt dasgn_curr declaration removal.
* Fixed pt_testcase bug.
* Fixes for colon2/3 in class/module/cdecls. [Less]
Posted
7 months
ago
by
Ryan Davis
Thanks to Luis Lavena ParseTree now has gems precompiled for windows! This makes things like ruby2ruby, heckle, and much more that much more accessible to the OS-challenged!
Posted
7 months
ago
by
Ryan Davis
ParseTree version 2.1.1 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
... [More]
, 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:
### 2.1.1 / 2007-12-22
* 1 bug fix:
* _sigh_ apparently I've been running w/o all my anal compiler flags on. [Less]
Posted
7 months
ago
by
Ryan Davis
ruby_parser version 1.0.0 has been released!
ruby_parser (RP) is a ruby parser written in pure ruby (utilizing
racc--which does by default use a C extension). RP's output is
the same as ParseTree's output: s-expressions using ruby's
... [More]
arrays and
base types.
## FEATURES/PROBLEMS:
* Pure ruby, no compiles.
* Incredibly simple interface.
* Output is 100% equivalent to ParseTree.
* Can utilize PT's SexpProcessor and UnifiedRuby for language processing.
* Known Issue: Speed sucks currently. 5500 tests currently run in 21 min.
* Known Issue: Code is waaay ugly. Port of a port. Not my fault. Will fix RSN.
* Known Issue: I don't currently support newline nodes.
* Known Issue: Totally awesome.
* Known Issue: dasgn_curr decls can be out of order from ParseTree's.
* TODO: Add comment nodes.
## SYNOPSIS:
RubyParser.new.parse "1 1"
# => s(:call, s(:lit, 1), : , s(:array, s(:lit, 1)))
Changes:
## 1.0.0 / 2007-12-20
* 1 major enhancement
* Birthday! [Less]
Posted
7 months
ago
by
Ryan Davis
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
... [More]
, 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. [Less]