Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

Ruby: RubocopとRufoを最小限に共存させてみた

しばらく使っていなかったrufoフォーマッタを久しぶりに設定してみました。

しかしrufoはデフォルトで引用符をダブルクォート"に揃える方針で、RuboCopはデフォルトではシングルクォート'に揃える方針になっている部分が真っ向からぶつかっています。

以下のCHANGELOGを見ると、Rufo 0.3.0からダブルクォートがデフォルトになっています。

最小限の共存

プロジェクトの現状に応じて、以下のいずれかの設定にすることで、引用符に関してはぶつからなくなります(他の設定の共存についてはここでは考えません)。なお自分はRufoに寄せました。

1. RuboCopに寄せる場合

# .rufo
quote_style :single

この場合式展開#{}を含む引用符はダブルクォート"が保たれます。また、%q()%Q()、エスケープされた引用符を含む文字列リテラル、ヒアドキュメントの中の引用符はquote_styleの影響を受けません。

2. Rufoに寄せる場合

# .rubocop.yml
Style/StringLiterals:
  EnforcedStyle: double_quotes

なお、以下のrubocop-config-rufo gemを使う手もあるようですが、試していません。

おまけ: Rufo 0.7.0の設定一覧

Rufoのsettings.mdが2年前から更新されておらず、不便です😢。

現在のmasterブランチで用意されている設定をlib/rufo/settings.rbから拾いました。0.7.0ではどれも効くことを確認しました。後でsettings.mdを更新するプルリク投げてみようかと思います(投げました: #189)。

# rufo/lib/rufo/settings.rb より
    parens_in_def: [:yes, :dynamic],
    align_case_when: [false, true],
    align_chained_calls: [false, true],
    trailing_commas: [true, false],
    quote_style: [:double, :single],

おまけ: Rufoはどこを目指すか

settings.mdの冒頭には「この設定オプションはいずれ消える」という記述があります。今もそのつもりなのかどうかはよくわかりませんが、RufoのReadmeにも、Go言語のgofmtなどのような「唯一の正しいスタイル」に揃えたいという意向も示されていますし、CHANGELOGでも早い段階で多くのオプション設定が削除されているので、いつになるかはわかりませんが、いずれ設定オプションはなくなってデフォルト設定のみになるだろうと推測しています。

議論の流れ次第ですが、Rufoの引用符はこのままダブルクォートに統一されそうな予感がします。個人的には、シングルクォートにはアポストロフィとしての用途もあるので、ダブルクォート統一に賛成したいです。

Rufoのごく初期からあるissue #2↑を見ると、RuboCop作者の@bbatsovさんも議論に参加していますね。

関連記事

RuboCop作者がRubyコードフォーマッタを比較してみた: 前編(翻訳)


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。