RuboCop

2015-02-04  本文已影响0人  foxzool

什么是RuboCop

Rubocop 是基于 ruby-style-guide / Ruby 风格指导 实现的一个代码风格检查器。

如何安装

$ gem install rubocop

或使用bundle安装

gem 'rubocop', require: false

如何使用

$ rubocop

或指定目录或文件

$ rubocop app spec lib/tasks/something.rb

ruby-china为例

$ rubocop app/models/user.rb
app/models/user.rb:364:25: C: Prefer single-quoted strings when you don't need string interpolation or special symbols.
        description: a1["description"]
                        ^^^^^^^^^^^^^
app/models/user.rb:367:29: C: Space missing after comma.
    items = items.sort { |a1,a2| a2[:watchers] <=> a1[:watchers] }.take(14)
                            ^
app/models/user.rb:368:81: C: Line is too long. [85/80]
    Rails.cache.write(user.github_repositories_cache_key, items, expires_in: 15.days)
                                                                                ^^^^^
app/models/user.rb:371:3: C: Use only ascii symbols in comments.
  # 重新生成 Private Token
  ^^^^^^^^^^^^^^^^^^^^

1 file inspected, 181 offenses detected

竟然有181个地方需要修改!
先自动化修复一部分

$ rubocop -a app/models/user.rb

1 file inspected, 206 offenses detected, 149 offenses corrected

跑测试确认一下

rspec spec/models/user_spec.rb

✌️,继续修改

app/models/user.rb:368:81: C: Line is too long. [85/80]
    Rails.cache.write(user.github_repositories_cache_key, items, expires_in: 15.days)
                                                                                ^^^^^
app/models/user.rb:371:3: C: Use only ascii symbols in comments.
  # 重新生成 Private Token
  ^^^^^^^^^^^^^^^^^^^^

又是警告, 但我想写中文注释,一行80个字太短了,我们加一下配置。

.rubocop.yml
AllCops:
  RunRailsCops: true
  Include:
    - '**/Gemfile'
    - '**/Rakefile'
  Exclude:
   - 'bin/*'
   - 'db/migrate/*'
   - 'db/seeds.rb'
   - 'db/schema.rb'
   - 'vendor/bundle/**/*'

Metrics/LineLength:
  Max: 120

Style/AsciiComments:
  Enabled: false

再看一下

$ rubocop app/model/user.rb

app/models/user.rb:343:3: C: Assignment Branch Condition size for fetch_github_repositories is too high. [29.9/15]
  def self.fetch_github_repositories(user_id)
  ^^^
app/models/user.rb:343:3: C: Method has too many lines. [23/10]
  def self.fetch_github_repositories(user_id)
  ^^^

1 file inspected, 23 offenses detected

这样, 要修复的就少多了。

上一篇下一篇

猜你喜欢

热点阅读