Flay analyzes code for structural similarities. Differences in literal
values, variable, class, method names, whitespace, programming style,
braces vs do/end, etc are all ignored. Making this totally rad.
Changes:
1.4.1 / 2010-09-01
2 minor enhancements:
- Added extra error handling for ERB flay to deal with tons of bad ERB
- Skip plugin if another version already loaded (eg local vs gem).
1 bug fix:
- Fixed all tests that were having problems on 1.9 due to unstable hashes
http://ruby.sadi.st/
- http://rubyforge.org/projects/seattlerb
Flog reports the most tortured code in an easy to read pain
report. The higher the score, the more pain the code is in.
Changes:
2.5.0 / 2010-09-01
1 major enhancement:
- Added plugin system. Define a module under Flog to extend it.
3 minor enhancements:
- Added special case penalty for wtf to_proc: blah(&b = proc {...}) (benjaminb)
- Improved tests and test coverage.
- Unfactored & refactored report code. Much cleaner and more maintainable now.
2 bug fixes:
- Fixed API change for FlogTask (andreacampi)
- Fixed bad edgecase handler for block_pass (benjaminb)
http://ruby.sadi.st/
- http://rubyforge.org/projects/seattlerb
ruby2ruby provides a means of generating pure ruby code easily from
RubyParser compatible Sexps. This makes making dynamic language
processors in ruby easier than ever!
Changes:
1.2.5 / 2010-09-01
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 arrays and
base types.
As an example:
def conditional1(arg1)
if arg1 == 0 then
return 1
end
return 0
end
becomes:
s(:defn, :conditional1,
s(:args, :arg1),
s(:scope,
s(:block,
s(:if,
s(:call, s(:lvar, :arg1), :==, s(:arglist, s(:lit, 0))),
s(:return, s(:lit, 1)),
nil),
s(:return, s(:lit, 0)))))
Changes:
2.0.5 / 2010-09-01
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]]]]]
Changes:
3.0.6 / 2010-09-01
sexp_processor branches from ParseTree bringing all the generic sexp
processing tools with it. Sexp, SexpProcessor, Environment, etc... all
for your language processing pleasure.
Changes:
3.0.5 / 2010-09-01
Inline allows you to write foreign code within your ruby code. It
automatically determines if the code in question has changed and
builds it only when necessary. The extensions are then automatically
loaded into the class/module that defines it.
You can even write extra builders that will allow you to write inlined
code in any language. Use Inline::C as a template and look at
Module#inline for the required API.
Changes:
3.8.5 / 2010-09-01