2021-08-30

VS Code の拡張機能に ローカル patch する

VS Code の拡張機能にバグがある場合、メンテナが Marketplace に修正版を公開するのを待つ以外にも、自力で修正する方法がある。 ちょうどよく使っているmichalyao/evermonkeyが、壊れてしまってから 3 週間程経っても一向に対応されないので、その方法で一時的に回避した。

Issue は以下の通り。

エラーの原因はENMLが HTML コメントを許容しなくなったことで、 これにより upload できなくなってしまった。コメントを許容しないって記述は一見なさそうだが、Upload 時のエラーになってる。

このENMLの変更に対する Pull Request はあるのだが、どうでもいいところでコンフリクトしていたり、メンテナが忙しいのかチェックされていない状態にある。 すぐに修正を適用するには、この PR の patch を自分の VS Code に適用すればいい。

VS Code の拡張機能は ~/.vscode/extensions にある1。今回の対象となるファイルはconverterplus.js。 PowerShell にはpatchコマンドが無いので今回は手で patch した。 元は TypeScript で記述されているが、変更内容は素の JavaScript と同じなのでそのままコピペできる。

code $(Get-ChildItem ~\.vscode\extensions\michalyao.evermonkey-2.4.5\out\src\converterplus.js).FullName

↑ クソどうでもいいコードスニペット。 でも知らなかった点として、~は PowerShell がユーザーディレクトリに評価するのでそのままだと VS Code に渡せなかった、というのがわかった記念に。

変更が終わったら、 VS Code でDeveloper: Reload Windowsすれば拡張機能に施した変更が VS Code に取り込まれる。 因みにここではDeveloper: Restart Extension Hostで良いはずだが、割と Extension Host を起動できない Notification が表示される。 それが面倒なのでDeveloper: Reload Windowsで丸ごと再起動している。


これで無事に Evernote を利用できる状況まで戻った。でもこのままメンテナが音信不通だとこの拡張機能を VS Code で使い続けることも難しくなりそう。こりゃ参ったね。


  1. Install extension - vscode-docs