Doppelganger
by Brian Landau of Viget Labs [email protected]
[GitHub Project] http://github.com/brianjlandau/doppelganger [RubyForge Project] http://rubyforge.org/projects/doppelganger/ [RDoc] http://doppelganger.rubyforge.org/
DESCRIPTION:
Doppelganger helps you to find areas of your code that are good places to refactor.
It does this by finding methods and blocks that are duplicates or have less then a set threshold level of difference or be less then a specified percent different. This library can either be used with in another larger code metric/heuristic library, or called from the command line.
FEATURES:
- Find duplicate methods and blocks.
- Find methods and blocks similar by a threshold level of difference.
- Find methods and blocks similar by threshold percentage.
- Uses the Diff::LCS library for finding differences.
- Uses RubyParser to compare methods.
- Outputs the set of similar/duplicate nodes together and what files they are in and their line numbers.
CAVEATS:
Doing the Diff::LCS on all the flattened Sexps is a very time consuming and processor intense operation. This means doing the "diff" or "percent_diff" comparisons on large libraries can take a very long time.
REQUIREMENTS:
- ruby_parser
- sexp_processor
- Diff::LCS
- Ruby2Ruby
- HighLine
- Facets
USAGE:
Find duplicates and methods have 5 or less differences.
$ doppelganger -n 5 project_dir/lib
Find duplicates and methods that are 10 percent different or less.
$ doppelganger -p 10 project_dir/lib
INSTALL:
sudo gem install doppelganger
CREDITS:
Inspired and based off of Giles Bowkett's Towelie.
Parts also influenced or extracted by Ryan Davis' Flay.