RuboCopのテンプレートサポート、autocorrectorの実装が難しくて、いい実装方法が見つかっていない。

  • RuboCop::ProcessedSource オブジェクトがテンプレート内のRubyのコード断片を表している
  • 各Copはこのオブジェクトに対して RuboCop::Cop::Offense を生成する
  • offsetを指定してOffenseの位置情報をずらす

というところまでは良いのだが、autocorrectを適用しようとすると、元々のソースコードに対してoffset付きで変換してほしいところが、Rubyのコード断片に対してoffset無しで変換が掛かってしまう。

Copがなぜかソースコードへの参照を持っているという設計が根本的な原因。

理想的には、こうなってほしい:

  1. テンプレートから、Rubyのコードを幾つか抽出する
  2. それぞれのRubyのコードに対して、CopでOffenseを検出する
  3. 集めたOffense群の位置情報を、テンプレートのものに変換する
  4. 変換されたOffense群を、autocorrectorに掛ける
  5. 2に戻る (変換により新たに違反が検出されるようになるかもしれないため)

RuboCopのテンプレートサポート、満足のいく形に変更できた。

npm install
npm run test

これが失敗

error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory
sudo apt install libnss3
error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory
sudo apt-get install libatk1.0-0
error while loading shared libraries: libatk-bridge-2.0.so.0: cannot open shared object file: No such file or directory
sudo apt-get install libatk-bridge2.0-0
error while loading shared libraries: libgtk-3.so.0: cannot open shared object file: No such file or directory
sudo apt install libgtk-3-0
error while loading shared libraries: libgbm.so.1: cannot open shared object file: No such file or directory
sudo apt-get install libgbm-dev
$ npm run test

> lsp-sample@1.0.0 test
> sh ./scripts/e2e.sh

Found existing install in /home/r7kamura/ghq/github.com/r7kamura/vscode-ruby-toys/.vscode-test/vscode-linux-x64-1.69.2. Skipping download
[20605:0803/143117.330327:ERROR:ozone_platform_x11.cc(248)] Missing X server or $DISPLAY
[20605:0803/143117.330373:ERROR:env.cc(225)] The platform failed to initialize.  Exiting.
The futex facility returned an unexpected error code.
Exit code:   SIGABRT
Failed to run tests

sourceforgeからVcXsrvをWindowsに入れた。XサーバーをWindowsに入れて、UbuntuのGUIをWindowsの上で描画してe2eテストを実行しようという試み。

VcXsrvを起動しながらやるとこれが出るようになった。

Authorization required, but no authorization protocol specified

C:\Program Files\VcXsrv\xlaunch.exe から起動してaccess controlにチェックを入れながら進むと、バックグラウンドでVcXsrvが起動して、その状態だとようやく npm run test が成功するようになった。

この状態でも警告がかなり大量に出るのだが (主にdbus周り)、これは出るものらしい。一応dsubの設定をいれば消せるらしいのだが、まだ試していない。

Windows 11だとwslg?という仕組みでUbuntuのGUIの機能が特に何もせずWindowsで動くようだから、このXサーバー云々の話とDISPLAY環境変数の話は不要らしい。Windows11にしたい利点が初めて出てきて意外だ。

今日は lsp-example を動かして、VSCodeで試すのとnpm run testでテストを動かすのをやった。GUIだから仕方無いけど、何か動いているものの地に足がついていない感じがして不安はある。