RuboCopの出力をルールでグループ化 + 違反件数の多い順にソートするフィルタスクリプト

1 min read読了の目安(約800字

ファイルごとではなくルールごとにまとめて見たかったので適当なスクリプトを書いてみました。ついでに違反(offense)件数が多い順にソートしてみました。

# sort_rubocop.rb

map = {}

ARGF.each_line do |line|
  rule_name = line.sub(" [Correctable]", "").split(" ")[2]
  map[rule_name] ||= []
  map[rule_name] << line
end

# for Emacs
puts "# -*- mode: compilation -*-"

map.to_a
  .sort_by { |_, lines| -lines.size } # 件数が多い順
  .each do |rule_name, lines|
    puts ""
    puts "# #{rule_name}"
    lines.each { |line| puts line }
  end

使い方:

rubocop -f e | ruby sort_rubocop.rb

Emacs 向けの出力にするために -f e--format emacs )としましたが、そういう事情がなければ --format json で JSON を出力させた方が加工しやすくて良いと思います。

参考

Ruby関連で他に書いたもの

https://memo88.hatenablog.com/archive/category/Ruby