結論
こちらをご覧ください。
説明
以下のとおりにします。
1. WSL 側で Rubocop をインストールする
まずはインストールしましょう。
2. rubocop.bat を作成する
ruby-rubocop
拡張機能では Windows 環境で実行する Rubocop のファイル名は rubocop.bat
で固定されています*1。したがって、WSL 環境で実行する場合であってもファイル名は rubocop.bat
にする必要があります。
rubocop.bat
の内容は冒頭の Issue にあるとおりです。rbenv
を使用している場合は以下のようになります。
@echo off wsl ~/.rbenv/shims/rubocop $^(echo '%*' ^| sed -e 's^|\\^|/^|g' -e 's^|\^([A-Za-z]\^)\:/\^(.*\^)^|/mnt/\L\1\E/\2^|g'^)
sed
の部分は In the end, I needed to convert Windows path in args into WSL path.
のために書いてます。
3. 作成した rubocop.bat を任意の場所に置きその場所を VSCode で指定する
作成した rubocop.bat
は Windows 上の任意の場所において構いません。たとえば C:\PATH\TO\rubocop.bat
に置いたとしましょう。
ファイルを置いたならばその場所を Visual Studio Code の設定で指定します。Rubocop: Execute Path
にパスを設定します。ここで注意するのは、パスの最後のスラッシュ(¥マーク)が必須だということです。
4. 適当な .rb ファイルを作って正しく実行するか確かめる
上記までできたならば Rubocop が動作するはずです。適当な .rb
ファイルを作り、規約に沿わないような記述をしてみましょう*2。そのときに赤い波線が引かれれば正しく動作しています*3。
問題点
「3.」で rubocop.bat
の場所をVSCode 内に書き込むところがありますが、これはもちろん他のOSでは存在しない場所になりますので他のOSの環境ではエラーになります。私は Settings Sync という拡張機能を使用していて、これは設定ファイルを同期する拡張機能なのですが、これを用いているとWindows以外の環境ではエラーの設定を同期してしまいます。
これを解決するためには、「ユーザー設定」ではなく「ワークスペース」単位で設定を逐一行う必要があります。「ワークスペース」の設定は「ユーザー設定」を上書きします。その設定内容は FOOBAR.code-workspace
ファイルに書かれます。
すこぶる面倒ですが、そもそもかなり無理矢理なことをやっているので、これぐらいは容認せざるを得ないかなと思います。