rubocopで、gitのdiffがあったファイルについて、ファイル全体をファイル指定で解析したい

追記(2015-02-16 23:55)
rubocop-select 作ったが、 --force-exclusion force exclusion optionがあった!! https://github.com/bbatsov/rubocop/issues/893

rubocop-select だと、exclude: .jsonとか.xmlとか、明示的に書かなくていいメリットはいちおう有る

rubocopで、gitのdiffがあったファイルについて、ファイル全体をファイル指定で解析したい。が、詰まった。

$ git diff --name-only origin/master..HEAD
.rubocop.yml
app/jobs/repo_synchronization_job.rb

diffがあるファイルがこんなときに、それをrubocopに渡したい。

ただ、git diff --name-only origin/master..HEAD |xargs rubocop -- だとyamlがわたってしまって、エラー出てしまう。エントリ下部に結果あり。パラメーターとして渡しつつ、AllCops/Include対象のものだけ, AllCops/Excludeは除く、としたいときどうするといいんだろう。

rubocopのオプションで何とかできる or その手前で grep -vとかでファイル絞れないかなあ。IncludeとExclude尊重して要らないファイル削るrubocop-select みたいなコマンド作ればいいのかな。
git diff --name-only origin/master..HEAD | rubocop-select |xargs rubocop --
というイメージ。

RuboCop::TargetFinder#target_files_in_dir と積集合取れば良さそう?

m4i/rubocop-git これはどこまでやってるんだろうな。

$ git diff --name-only origin/master..HEAD |xargs rubocop --
Inspecting 2 files
EC

Offenses:

.rubocop.yml:1:8: E: unexpected token tCOLON
AllCops:
       ^
.rubocop.yml:6:10: E: unexpected token tCOLON
  Exclude:
         ^
.rubocop.yml:9:15: E: unexpected token tCOLON
  RunRailsCops: true
              ^
.rubocop.yml:11:14: E: unexpected token tCOLON
Documentation:
             ^
.rubocop.yml:14:11: E: unexpected token tCOLON
LineLength:
          ^
app/jobs/repo_synchronization_job.rb:4:3: C: Method has too many lines. [16/10]
  def run(options)
  ^^^
app/jobs/repo_synchronization_job.rb:25:1: C: Extra empty line detected at method body beginning.

2 files inspected, 7 offenses detected
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中