[11 total ]
Posted
3 months
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
8 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
8 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
8 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
8 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]
Posted
12 months
ago
by
Ryan Davis
ParseTree version 2.0.2 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 minor enhancements:
* Deactivated gcc-specific compiler flags unless ENV['ANAL'] or on my domain.
* Minor code cleanup - happier with -pedantic and the like.
* 1 bug fix:
* FINALLY conquered the splat args bug on certain platforms/versions.
Special Thanks to Jonas Pfenniger for debugging this and providing
a patch. [Less]
Posted
about 1 year
ago
by
Ryan Davis
ParseTree version 2.0.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:
* 1 major enhancement:
* Rewrote parse_tree_show to use parse_tree_for_string.
* parse_tree_show adds -n=node filtering -u unifying, and -s structure-only.
* parse_tree_show no longer needs -f
* 4 minor enhancements:
* Added context stack to SexpProcessor! YAY!!!
* Enforce type to be symbol in SexpProcessor... just makes life easier.
* Processing style change mode to UnifiedRuby. Prefer no rescues.
* Sexp#structure is no longer destructive.
* 4 bug fixes:
* Added 1.8.4 compatibility fix.
* Added args lifting in :defs in UnifiedRuby.
* Fixed unifying argscat, splat, and a couple other oddities.
* Added process_call to UnifiedRuby *sigh* I'm a tard. [Less]
Posted
about 1 year
ago
by
Ryan Davis
ParseTree version 2.0.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:
* 2 major enhancements:
* Rewrite methods completely rewritten. Rewriters:
* are no longer recursive.
* are no longer required to empty the sexp coming in.
* are depth first, so rewriter gets passed everything already normalized.
* keep rewriting until type doesn't change.
* are magical goodness.
* Added UnifiedRuby module to aid others in writing clean SexpProcessors:
* bmethod/dmethod/fbody unified with defn
* fcall/vcall unified with call
* resbody unified with itself (lots of different forms)
* 5 minor enhancements:
* Add #modules to Module.
* Add Sexp::for shortcut for Sexp.from_array ParseTree.translate(...).
* Add parens for :block nodes as appropriate. May be overzealous.
* Made add_to_parse_tree global for reuse by other C extensions.
* Made test_ruby2ruby MUCH more rigorous with circular testing.
* 6 bug fixes:
* Added $TESTING = true to pt_testcase.rb. OOPS!
* Fixed some circular bugs, mostly by hacking them out, wrt operator precidence.
* Fixed splat arg processing when arg has no name.
* Fixed trinary operator.
* Fixed BMETHOD with no arguments.
* Removed hacky "self." thing for defs at top level PT use. [Less]
Posted
about 1 year
ago
by
Ryan Davis
ParseTree version 1.7.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.
Changes:
* 3 minor enhancements:
* Added begin/rescue/ensure test.
* Added block_pass_args_and_splat.
* Allow methods to be pulled from unparsed files.
* 1 bug fix:
* Compatibility fixed across 1.8. [Less]
Posted
about 1 year
ago
by
Ryan Davis
ParseTree version 1.7.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.
Changes:
2 major enhancements:
rewrite extracted and intended to be run before (or in front of) process.
rewrite is now recursive as well, so children rewritings should be done independently of their parents. This should make complex rewriting layers much cleaner and allow me to eventually collect and publish a single "standard" rewriting layer.
1 minor enhancement:
Iters are now {} if short and one line. YAY!
1 bug fix:
Added test cases brought out by ruby2ruby/heckle. [Less]