Vim に WebAssembly のテキストフォーマットのサポートを入れた

VimWebAssembly のテキストフォーマット (wast) の対応を入れ,同時に filetype=wast で使われるファイルのメンテナになりました.

Wasm のテキストフォーマットとは

WebAssembly にはバイナリ形式とテキスト形式の2つのフォーマットがあります.Wasm はネットワークを介して配布される前提のため,サイズの小さいバイナリ形式のほうが良いですが,デバッグなどで処理を追いたい人間にとってはテキストフォーマットも必要になるためです.

emscriptenデバッグオプションをつけてコンパイルすると,生成物 .wasm のほかにテキストフォーマットの .wast およびそのソースマップを生成してくれます.

こんな感じのS式です

f:id:rhysd:20180801085232p:plain:w424

contribution の流れ

0. Vim プラグインとして実装

まだブラウザが Wasm を初めてサポートし始めた頃,その頃の binaryen の出力を眺めるときにハイライトが無いと不便なので,まずはたたき台として vim-wasm をつくりました.

github.com

今年の6月に入って WebAssembly の仕様をざっくり眺めて vim.wasm をつくりました.再び emscripten の出力を見る機会があり,以前つくったものが大分間違っていたことが分かったので,仕様に従って vim-wasm をそれに従って大幅に修正しました.

1. Vim にプルリクを出す

WebAssembly は主要な各ブラウザが対応しており,ウェブ標準として定義されているので,テキストフォーマットの対応が Vim 本家に入っていると有意義だと考えました. vim-wasm が良い感じに .wast ファイルをサポートできていることが確認できたので,Vim に取り込んでもらうことを提案します.

Vimvim_dev にパッチを送るか,vim/vim にプルリクを作成することでレビューを依頼できます.通常,runtime/syntaxruntime/indent といった各 filetype 対応のファイルにはメンテナがそれぞれついているので,まずはそちらに依頼すべきですが,今回は新規追加なので直接 Bram にレビューしてもらいました.

github.com

2. master に取り込んでもらう

レビューで OK が出ると,Bram が master ブランチに取り込みます. 今回は runtime/ 以下のファイル追加なので,他の runtime/ 向けの変更もまとめて1つのパッチが作成され,master ブランチに追加されました.

github.com

3. filetype=wast のメンテナになりました

先程書いたように,各 filetype のサポートはそれぞれにメンテナがいます.

そんなわけで,僕も vim/runtime/{syntax,indent,ftplugin}/wast.vim のメンテナになりました.開発は引き続き vim-wasm のほうでやっていくので,何か問題を発見された際は,Vimリポジトリvim_dev ではなく,まずはvim-wasm のほうに issue やプルリクをつくっていただけると助かります.