RuboCopの--onlyオプションの改善

平野さんのパッチが元ネタのここ数日前の話。

github.com

RuboCop で特定の department や cop のみ適用する場合に使える --only やその逆の --except での Cop 名の指定にタイプミスがあった場合に、本来入力しようとしていたと思われる Cop の候補が補完表示される EoD なパッチ。次の RuboCop のリリース (0.53.0 かな?) から適用されると思う。

bbatsov/rubocop#5300 では候補の探索が正規表現の前方一致だったのを、pocke さんのコメントにあったようなレーベンシュタイン距離か何かでやれると良さそうだったので、以下のように DidYouMean でのモジュールで解決しようとしたけれど、このインタフェースだと Ruby のバージョン縛りがあるので断念 (あと後方互換が担保されるインタフェースか判断できなかったのも理由のひとつ) 。

DidYouMean::SpellChecker.new(dictionary: cop_names).correct(name)

PR としては、pocke さんに教えてもらった StringUtil.similarity を使った類似文字列の探索という実装にしたのだった。

そのあたりの経緯は PR のコミットメッセージ (と Description) に記してあるので詳細はそちらにて。

github.com