LoginSignup
9
4

More than 3 years have passed since last update.

VSCodeでファイル保存時に rubocopのauto-correct

Posted at

掲題の通り。設定だけならそれほど大したことはなかったが、一点謎の不具合があってそこそこハマった。

プロジェクトに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以外を利用した場合も日本語周りで問題が起きる。
おそらく何かしら問題があるだろうと思う。

実際に私もやってみた結果、同じ結果に遭遇し、同じ対応で乗り越えることができた。
が、encoding: utf8 と書くのがなんとなく引っかかり、上記の対応を取ることにした。

最後に

double_quotesが強制の環境だとキツイことになるな...どうしようか?
またもっと良い解決策をご存知の方がいましたら教えてください m(_ _)m
(しかしそもそもこれ再現性あるのだろうか。。。?)

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4