Skip to main content

Rubocop - Ruby static code analyzer

· 2 min read

Rubocop 是一個 Ruby static code analyzer 主要用來 format coding style

Installation

Add following line to Gemfile.rb

gem 'rubocop', require: false

Configuration

Config 可以參考 github 上的 Config 資料夾

裡面有三個檔案

  • default.yml(主要的)
  • enabled.yml(預設開啟的)
  • disabled.yml(預設關掉的)

改好後命名為 .rubocop.yml 放在 repo 裡,當你執行 rubocop 指令的時候就會讀取這個檔案的設定開始檢查語法

以下是我自己用的 Rules

把一些比較麻煩的 rules disable 掉了

AllCops:
Exclude:
- 'db/migrate/*'
- 'vendor/**/*'
Rails:
Enabled: true

Rails/HasAndBelongsToMany:
Enabled: false

Bundler/OrderedGems:
Enabled: false

Style/ClassAndModuleChildren:
Enabled: false

Style/ConditionalAssignment:
Enabled: false

Style/Documentation:
Enabled: false

Style/FrozenStringLiteralComment:
Enabled: false

Style/Next:
Enabled: false

Style/GuardClause:
Enabled: false

Metrics/LineLength:
Enabled: false

Metrics/BlockLength:
Enabled: false

Metrics/MethodLength:
Enabled: false

Metrics/AbcSize:
Enabled: false

rubocop 可以幫你自動修正一些語法,只要加上 --auto-correct 參數

rubocop --auto-correct

但是有時候想要一步一步修語法,我只想修正有關 Style 的語法,就要加上 --only 參數,其他以此類推

rubocop --auto-correct --only Style
rubocop --auto-correct --only HashSyntax
rubocop --auto-correct --only StringLiterals

Rake task

如果要整合 travis ci 在每次 code push 的時候檢查語法的話,就要把 rubocop 寫成 rake task,然後寫成 rake default 會跑的 task

lib/tasks/rubocop.rake 加上這幾行

begin
require 'rubocop/rake_task'

RuboCop::RakeTask.new

rescue LoadError # rubocop:disable Lint/HandleExceptions
end

然後修改一下 Rakefile

require_relative 'config/application'

Rails.application.load_tasks
task default: [:rubocop]

這樣當你打 rake 的時候就會自動幫你檢查語法了

要是有不懂的名詞可以查 Official document