はじめに
これはアドベントカレンダーとは全く関係ないいつもの技術エントリです
rubocop_auto_corrector (0.1.0): Run `rubocop --auto-correct && git commit` with each cop. https://t.co/cjs54lrl8X
— RubyGems (@rubygems) November 30, 2018
モチベーション
僕は普段rubocopでauto correctする時はコミットの可読性の観点から下記のように各cop単位でauto correctしてコミットするようにしています。
このスクリプトは非常に便利なのですが、個人dotfilesにあるため他の人に使ってもらいにくいという難点がありました。
先日のOSSパッチ会 でrubocopコミッタの id:koic に「こういうスクリプトってrubocop本体にあるとどうっすかね?」みたいな感じで雑に相談したら、「本体よりも別のツールとしてあった方がよさそう」という返事をもらったのでgem化したのが今回の rubocop_auto_corrector になります
使い方
bundle exec rubocop_auto_corrector
で実行するだけです
実行結果のサンプル
https://github.com/sue445/rubocop_auto_corrector/pull/3/commits
gem化するにあたって気をつけたこと
ユニット(?)テストの整備
gemの性質上実際にgit commitするところまでテストで検証する必要があったので、rspecの中で
- ダミーアプリをgit init
- rubocop_auto_correctorを動かして rubocop --auto-correct && git commit
- gitのコミットメッセージが意図通りか検証
のようなことを行っています
詳しくはこの辺のソースを読んでください
- https://github.com/sue445/rubocop_auto_corrector/blob/v0.1.0/spec/rubocop_auto_corrector/cli_spec.rb#L4-L37
- https://github.com/sue445/rubocop_auto_corrector/blob/v0.1.0/spec/support/contexts/setup_dummp_repo.rb
auto correctできないcopはスキップするようにした
今まではrubocopの実行結果に出てきたcop全部 rubocop --auto-correct
してたので割と無駄が多かったのですが、それは無駄なので実際にauto correctできるcopのみrubocop --auto-correct
するようにしました。
しかし「言うは易く行うは難し」というやつで、cop名からcopのクラス名とgem名(プラグインの場合)を取り出す方法が色々と面倒くさかったです。。。(特にrubocop-rspec)