Getting Started

If you'd rather install RubyCritic using Bundler, add this line to your
application's Gemfile:

gem"rubycritic",:require=>false

And then execute:

$ bundle

Usage

Running rubycritic with no arguments will analyse all the Ruby files in the
current directory:

$ rubycritic

Alternatively you can pass rubycritic a list of files and directories to check:

$ rubycritic app lib/foo.rb

For a full list of the command-line options run:

$ rubycritic --help

Command flag

Description

-v / --version

Displays the current version and exits

-p / --path

Set path where report will be saved (tmp/rubycritic by default)

-f / --format

Report smells in the given format: html (default; will open in a browser), json, console.

-s / --minimum-score

Set a minimum score

--mode-ci

Use CI mode (faster, but only analyses last commit)

--deduplicate-symlinks

De-duplicate symlinks based on their final target

--suppress-ratings

Suppress letter ratings

--no-browser

Do not open html report with browser

Analyzer Configuration

Reek: RubyCritic utilizes Reek's default configuration loading mechanism.
This means that if you have an existing Reek configuration file, you can just put this into your
project root and RubyCritic will respect this configuration.

all: Forces flog to report scores on all classes and methods. Without this option flog will only give results up to a certain threshold.

continue: Makes it so that flog does not abort when a ruby file cannot be parsed.

methods: Configures flog to skip code outside of methods. It prevents flog from reporting on the "methods" private and protected. It also prevents flog from reporting on Rails methods like before_action and has_many.

Alternative Usage Methods

If you're fond of Guard you might like guard-rubycritic. It automatically analyses your Ruby files as they are modified.

Rake Task

You can use RubyCritic as Rake command in its most simple form like this:

require"rubycritic/rake_task"RubyCritic::RakeTask.new

A more sophisticated Rake task that would make use of all available configuration options could look like this:

RubyCritic::RakeTask.newdo|task|# Name of RubyCritic task. Defaults to :rubycritic.task.name='something_special'# Glob pattern to match source files. Defaults to FileList['.'].task.paths=FileList['vendor/**/*.rb']# You can pass all the options here in that are shown by "rubycritic -h" except for# "-p / --path" since that is set separately. Defaults to ''.task.options='--mode-ci --format json'# Defaults to falsetask.verbose=trueend

RubyCritic will try to open the generated report with a browser by default. If you don't want this
you can prevent this behaviour by setting the options correspondingly:

RubyCritic::RakeTask.newdo|task|task.options='--no-browser'end

Compatibility

RubyCritic is supporting:

2.1

2.2

2.3

Improving RubyCritic

RubyCritic doesn't have to remain a second choice to other code quality analysis services. Together, we can improve it and continue to build on the great code metric tools that are available in the Ruby ecosystem.

Similarly, Pull Requests that improve the look and feel of the gem, that tweak the calculation of ratings or that fix existing issues will be most welcome. Just commenting on an issue and giving some insight into how something should work will be appreciated. No contribution is too small.