= Reek -- code smell detection for Ruby
Reek is a tool that examines Ruby classes, modules and methods and
reports any code smells it finds. Install it like this:
$ gem install reek
and run it like this:
$ reek [options] [dir_or_source_file]*
For a full list of command-line options see the Reek
wiki[http://wiki.github.com/kevinrutherford/reek/command-line-options]
or run
$ reek --help
== Example
Imagine a source file csv_writer.rb containing:
class CsvWriter
def write_line(fields)
if (fields.length == 0)
puts
else
write_field(fields[0])
1.upto(fields.length-1) do |i|
print ","
write_field(fields[i])
end
puts
end
end
#...
end
Reek will report the following code smells in this file:
$ reek csv_writer.rb
CsvWriter#write_line calls fields.length multiple times (Duplication)
CsvWriter#write_line has approx 6 statements (Long Method)
CsvWriter#write_line/block has the variable name 'i' (Uncommunicative Name)
== Features
Reek currently includes checks for some aspects of the following smells:
* {Control Couple}[http://wiki.github.com/kevinrutherford/reek/control-couple]
* {Data Clump}[http://wiki.github.com/kevinrutherford/reek/data-clump]
* {Feature Envy}[http://wiki.github.com/kevinrutherford/reek/feature-envy]
* {Large Class}[http://wiki.github.com/kevinrutherford/reek/large-class]
* {Long Method}[http://wiki.github.com/kevinrutherford/reek/long-method]
* {Long Parameter List}[http://wiki.github.com/kevinrutherford/reek/long-parameter-list]
* {Simulated Polymorphism}[http://wiki.github.com/kevinrutherford/reek/simulated-polymorphism]
* {Uncommunicative Name}[http://wiki.github.com/kevinrutherford/reek/uncommunicative-name]
...and more. See the Reek wiki[http://wiki.github.com/kevinrutherford/reek/code-smells]
for up to date details of exactly what Reek will check in your code.
=== Tool Integration
Reek integrates with many of your favourite tools:
* Use Reek::RakeTask to easily add Reek to your Rakefile
* Use Reek::Spec to add the should_not reek custom matcher to your Rspec examples
* Reek is fully compliant with Ruby 1.8.6, 1.8.7 and 1.9.1
=== Dependencies
Reek makes use of the following other gems:
* ruby_parser
* sexp_processor
* ruby2ruby
== Learn More
Find out more about Reek from any of the following sources:
* Browse the Reek documentation at http://wiki.github.com/kevinrutherford/reek
* Browse the code or install the latest cutting-edge beta version from http://github.com/kevinrutherford/reek/tree
* Read the code API at http://rdoc.info/projects/kevinrutherford/reek