掲題の通り。設定だけならそれほど大したことはなかったが、一点謎の不具合があってそこそこハマった。
プロジェクトにrubocopを導入。
この辺は公式のReadme等読みつつ雑に実施。
gemfileにrubocopを入れて、.rubocop.ymlを用意するだけ。
参考: https://github.com/rubocop-hq/rubocop
元ファイルはRailsのRubocopをベースに作成。
rubocop-railsやrubocop-performanceを使っている様子なので、こちらもGemfile等に入れておく。
参考: https://github.com/rails/rails/blob/master/.rubocop.yml
rubocopの対象外にしたいファイルは除外する。
参考: https://qiita.com/necojackarc/items/8bc16092bbc69f17a16d#%E5%AF%BE%E8%B1%A1%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB
あとはbundle exec rubocop
でrubocopが想定通り動作すればOK
VSCode 上でrubocop の auto-correct
Prettierみたいなことがしたいだけだったが苦労した。なぜか。。。
基本設定
基本的には以下をVSCodeのsetting.jsonに入れるだけでおおよそ実現する
"ruby.lint": {
"rubocop": true
},
"[ruby]": {
"editor.formatOnSave": false
},
"ruby.format": "rubocop"
参考: https://qiita.com/yumikokh/items/98be01df144c41d60e1e#formatting
上の参考サイトでは "editor.formatOnSaveTimeout": 5000
が必要とされていたが、私の環境では必要なかった。
ハマり箇所
ただ、私の環境だとこの設定をした際、日本語が何故かユニコードに変換されてしまうという現象が起きた。コマンドラインからrubocop auto-correctを実施した際は全く問題無いが、VSCodeの自動整形でのみ発生する。
例えば、
context '未ログインの場合' do
が
context "\u672A\u30ED\u30B0\u30A4\u30F3\u306E\u5834\u5408" do
こうなる。
ファイルはutf8になっており、文字コード周りの設定は問題ないとは思うのだが、、、
この辺りの話が関連しているのだろうか?わからん。
https://techracho.bpsinc.jp/hachi8833/2016_10_13/26969
またこちらも理由は全くわからないが .rubocop.ymlの設定を以下のように変えたら上手くいった。
Style/StringLiterals:
Enabled: true
EnforcedStyle: double_quotes
↓
Style/StringLiterals:
Enabled: true
EnforcedStyle: single_quotes
doubleをsingleに変えただけ。謎だ。。。
formatterとしてrubocop以外を利用した場合も日本語周りで問題が起きる。
おそらく何かしら問題があるだろうと思う。
【今日の部会】
— みのも (@RNd8136) November 20, 2018
VScodeでRubyが自動整形されない
→Rufo拡張を入れる
それでも整形されない
→cmdでRufoをインストール
まだ整形されない
→日本語コメントが問題
→encoding: utf-8を最初に挿入
解決
実際に私もやってみた結果、同じ結果に遭遇し、同じ対応で乗り越えることができた。
が、encoding: utf8 と書くのがなんとなく引っかかり、上記の対応を取ることにした。
最後に
double_quotesが強制の環境だとキツイことになるな...どうしようか?
またもっと良い解決策をご存知の方がいましたら教えてください m(_ _)m
(しかしそもそもこれ再現性あるのだろうか。。。?)