valid,invalid

関心を持てる事柄について

ag を使った複数行にわたる grep

既存コードで .all とかやっている場所を ag である程度まで*1洗い出そうと正規表現と格闘した。

ag 'users?(.where.+)?.all' みたいなので単一行のユースケースは良い感じに絞り込めたものの、メソッドチェーンしているやつ (multi line) が拾えないよと同僚から指摘を受けた。

全部まとめた表現は自分ではちょっと書けそうになかったので個別のケースに絞って書いてみたのがこんな感じ。

行頭に \. が来るケース

$ ag 'user(\s*\..*\n)+\s*(\..*)*\.all'

test.rb
11: active_users = User
12:                  .active
13:                  .all

行末に \. が来るケース

$ ag 'subscriptions.*\.\n(\s*.*\.\n)+\s*(\..*)*all'

test.rb
11: active_subscriptions = user.subscriptions.
12:                          active.
13:                          all

混在しているケース

無視


rubocop にもそういえばこのスタイルに関する cop があったようなと思ったらやっぱりあった

New cop DotPosition · bbatsov/rubocop@e41175f · GitHub

*1:Rubyで全ユースケースを洗い出すのは無理