前から少し気になっていたrufoというRubyのフォーマッターを試してみました。チームやリポジトリのコード規約によっては結構使えそうな感じです。
- この記事は個人ブログでも掲載しています。 -> http://tackeyy.com/blog/tried-rufo-as-a-ruby-formatter
ruby-formatter/rufo
Ruby formatter
の短縮形で rufo
という名前になっています。
Rubocopのように文法などのチェック機能はなく純粋なフォーマッターです。
個人的には Unobtrusive by default
という思想が好きで、基本的に設定しないとフォーマットしないよというスタンスが良いと思ってます。
vimの保存時にrufoでフォーマットをかける
vimのプラグインはruby-formatter/rufo-vimを利用します。
$ gem install rufo
rufoをインストールした後にrufo-vimを導入します。
dein.vimを使って *.toml
でプラグインを管理している場合は、以下のような感じになります。
.dein.toml " dotfileとして管理したかったため、僕は ` .dein.toml ` という名前で管理しています
+# Formatter
+[[plugins]]
+repo = 'ruby-formatter/rufo-vim'
.vimrc
+" --------------------------------
+" ruby-formatter/rufo-vim
+" --------------------------------
+" Enable rufo (RUby FOrmat)
+let g:rufo_auto_formatting = 1
:w
すると以下のような感じでフォーマットされます。
上記のように =
の位置を合わせるのは場所によっては微妙なのですが、以下のようにハッシュの中は :
の後の位置を合わせたい派です。今のところ =
と :
の後の位置を合わせるオプションが同じなのでちょっと困っています。
{
- site: Settings.title,
- reverse: true,
- title: Settings.title,
+ site: Settings.title,
+ reverse: true,
+ title: Settings.title,
description: Settings.description,
- keywords: Settings.keywords,
- canonical: request.original_url,
+ keywords: Settings.keywords,
+ canonical: request.original_url
}
ちなみに最初にvimのプラグインを入れてみたところまったく動かず「動作確認してないやろ・・・」ってなりましたが、issueをあげたらちゃんと対応してくれました。(コードをforkしたのですが、vim script初心者でぐぬぬとなったので修正までは至りませんでした)
rufoでフォーマットするときの設定
.rufo
をプロジェクトを配置します。READMEを読むとどこのフォルダにあっても良いみたいですが、プロジェクトのルートフォルダにおくのが良いと思います。
rufoのリポジトリの .rufo
をベースにしてrubocopの設定をみながらひとまず以下のような設定で導入してみました。
https://github.com/ruby-formatter/rufo/blob/master/.rufo
チームやリポジトリのコード規約やrubocopとの調整が少し時間がかかりそうな印象があります。
.rufo
indent_size 2
spaces_inside_hash_brace :always
spaces_inside_array_bracket :never
spaces_around_equal :one
spaces_in_ternary :one
spaces_in_suffix :one
spaces_in_commands :dynamic
spaces_around_block_brace :one
spaces_after_comma :dynamic
spaces_around_hash_arrow :one
spaces_around_when :one
spaces_around_dot :no
spaces_after_lambda_arrow :no
spaces_around_unary :no
spaces_around_binary :one
parens_in_def :yes
double_newline_inside_type :no
visibility_indent :align
trailing_commas :never
align_comments true
align_assignments true
align_hash_keys true
align_case_when true
align_chained_calls true
最後に
まだ若いフォーマッターということもあってもう少しプライベートで触ってみながら業務で携わっているプロダクトに入れたいな、と思いました。
また、チームに導入する上でメンバーが使用しているエディタのプラグインがあることが重要だと思っているのですが、今のチームでは僕以外はRubyMineを使っており、まだRubyMineのプラグインはないので今すぐには導入できなそうな気がしてます。
参考
https://github.com/ruby-formatter/rufo
https://github.com/ruby-formatter/rufo-vim