Techioz Blog

vscode( vscode-ruby +rubocop ) 保存時に自動修正するにはどうすればよいですか?

概要

https://github.com/rubyide/vscode-ruby#linters に従い、すべての gem をインストールし、settings.json を次のように編集しました。

{

  "ruby.rubocop.executePath": "/Users/ac/.rbenv/shims/",
  "ruby.rubocop.onSave": true,
  "ruby.lint": {
    "ruby": {
      "unicode": true //Runs ruby -wc -Ku
    },
    "reek": true,
    "rubocop": {
      "lint": true,
      "rails": true
    },
    "fasterer": true,
    "debride": {
      "rails": true //Add some rails call conversions.
    },
    "ruby-lint": true
  },
  "ruby.locate": {
    "include": "**/*.rb",
    "exclude": "{**/@(test|spec|tmp|.*),**/@(test|spec|tmp|.*)/**,**/*_spec.rb}"
  }

}

vscode では、コードの強調表示は正常に機能します。 *拡張機能がインストールされており、問題タブに警告が表示されていることに注意してください。

vscode-ruby とrubocop はファイル保存時にインデントと cop ルールを自動修正してくれると思っていましたが、どうやらそうではないようです。 コードをより美しく整形したい場合、どのように設定すればよいでしょうか?

解決策

vscode-ruby-rubocop GitHub のこのコメントによると、次の設定を使用できます。

{
    "editor.formatOnSave": true,
    "editor.formatOnSaveTimeout": 5000,
    "ruby.rubocop.executePath": "path/where/rubocop/is/located",
    "ruby.format": "rubocop",
}

それらをローカルボックスのユーザー設定に適用しただけで、機能しているようです。 VS Code は、ruby.rubocop.executePath 設定が実行可能ではないというエラーをスローしていましたが、その行を削除してもそのエラーは表示されないようで、それに応じてコードがフォーマットされます。タイムアウトを低く設定すると (私は 2500 を試しました)、保存時に自動フォーマットが壊れるようなので、5000 のままにすることをお勧めします。