rubycritic

whitesmithMIT活跃维护

Ruby 代码质量静态分析工具,扫描项目后给出可读性、复杂度、重复代码等评分报告,帮团队定位需要重构的坏味道。

A Ruby code quality reporter

暂无版本3,508star234fork同步于 2026-11-10 05:39 UTC

怎么上手

README 里没有找到可直接复制的安装命令

README 里没有找到可直接复制的安装命令,请到 README 或官方文档查看安装方式。

硬件要求

README 没有说明硬件要求。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

这个项目的说明还在生成中,先参考下面「最近发版」和 README。

最近发版

0 个版本

暂无 release 数据(可能没有发版,或尚未同步)。

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    RubyCritic

    Gem Version Continuous Integration Code Climate

    RubyCritic is a gem that wraps around static analysis gems such as Reek, Flay and Flog to provide a quality report of your Ruby code.

    Table of Contents

    Overview

    This gem provides features such as:

    1. An overview of your project: RubyCritic overview screenshot

    2. An index of the project files with their respective number of smells: RubyCritic code index screenshot

    3. An index of the smells detected: RubyCritic smells index screenshot

    4. When analysing code like the following:

    class Dirty
      def awful(x, y)
        if y
          @screen = widgets.map {|w| w.each {|key| key += 3}}
        end
      end
    end
    

    It basically turns something like this:

    Reek output screenshot

    Into something like this:

    RubyCritic file code screenshot

    1. It uses your source control system (only Git, Mercurial and Perforce are currently supported) to compare your currently uncommitted changes with your last commit.

      Warning: If your code is not as you expect it to be after running RubyCritic, please check your source control system stash.

    Checkout the /docs if you want to read more about our core metrics.

    Getting Started

    RubyCritic can be installed with the following command:

    $ gem install rubycritic
    

    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. The analysis will be scoped to the provided files and directories:

    $ rubycritic app lib/foo.rb
    

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

    $ rubycritic --help
    
    Command flagDescription
    -v / --versionDisplays the current version and exits
    -p / --pathSet path where report will be saved (tmp/rubycritic by default)
    --coverage-pathSet path where SimpleCov will be saved (./coverage by default)
    -f / --formatReport smells in the given format(s)1
    --custom-format path:classnameLoad and instantiate custom formatter(s)2
    -s / --minimum-scoreSet a minimum score (FLOAT: ex: 96.28), default: 0
    -m / --mode-ciUse CI mode3
    -b / --branchSet branch to compare
    -t / --maximum-decreaseThreshold for score difference between two branches4
    --deduplicate-symlinksDe-duplicate symlinks based on their final target
    --suppress-ratingsSuppress letter ratings
    --no-browserDo not open html report with browser
    1. Available output formats:
    • html (default; will open in a browser)
    • json
    • console
    • lint
    1. See custom formatters docs
    2. Faster, analyses diffs w.r.t base_branch (default: main), see -b
    3. Works only with -b. Accepts a FLOAT (ex: 0.5), default: 0

    You also can use a config file. Just create a .rubycritic.yml on your project root path.

    Here are one example:

    mode_ci:
      enabled: true # default is false
      branch: 'production' # default is main
    branch: 'production' # default is main
    path: '/tmp/mycustompath' # Set path where report will be saved (tmp/rubycritic by default)
    coverage_path: '/tmp/coverage' # Set path where SimpleCov coverage will be saved (./coverage by default)
    maximum_decrease: 0.5 # FLOAT, default is 0.0
    deduplicate_symlinks: true # default is false
    suppress_ratings: true # default is false
    no_browser: true # default is false
    formats: # Available values are: html, json, console, lint. Default value is html.
      - console
    minimum_score: 95 # default is 0
    paths: # Files to analyse. Churn calculation is scoped to these files when using Git SCM.
      - 'app/controllers/'
      - 'app/models/'
      - 'lib/**'  # Wildcard patterns are supported (excludes tmp directories automatically)
    

    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.
    • flay: We use flay's default configuration.
    • flog: We use flog's default configuration with a couple of smaller tweaks:
      • 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.

    For continuous integration, you can give Jenkins CI a spin. With it, you can easily build your own (poor-man's) Code Climate!

    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.new do |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 false
      task.verbose = true
    
      # Fail the Rake task if RubyCritic doesn't pass. Defaults to true
      task.fail_on_error = true
    end
    

    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.new do |task|
      task.options = '--no-browser'
    end
    

    If you wish to create multiple Rake tasks (e.g., for local & for ci-specific configuration), you can do so! If you decide to do this, you should provide a clearer description for each task:

    # for local
    RubyCritic::RakeTask.new("local", "Run RubyCritic (local configuration)" do |task|
      # ...
    end
    
    # for CI
    RubyCritic::RakeTask.new("ci", "Run RubyCritic (CI configuration)" do |task|
      task.options = "--mode-ci"
      # ...
    end
    

    Formatters

    See formatters

    Compatibility

    RubyCritic is supporting Ruby versions:

    Ruby versionLatest RubyCritic version
    2.4v4.7.0
    2.5v4.7.0
    2.6v4.7.0
    2.7v4.9.1
    3.0v4.9.2
    3.1v4.12.0
    3.2latest
    3.3latest
    3.4latest
    4.0latest

    RubyCritic also runs on JRuby and is tested against it in CI:

    JRuby versionTargeted Ruby compatibility
    10.03.4
    10.14.0

    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.

    Arguably, the better_errors gem only got popular after receiving a (pretty awesome) Pull Request that changed its page design.

    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.

    See RubyCritic's contributing guidelines about how to proceed.

    Contributors

    RubyCritics initial author was Guilherme Simões.

    The current core team consists of:

    Credits

    Whitesmith

    RubyCritic is maintained and funded by Whitesmith. Tweet your questions or suggestions to @Whitesmithco.