気づいたらDartの構文チェック用Vimプラグインを作っていた
しばらく前に書店でプログラミング言語Dart という書籍を目にし、Google製のaltJS、Dartに手を出してみました。ちらっと見ただけで馴染みやすそうな文法に魅力を感じたからです。感覚としては人間にやさしいJava。文法だけ見るとJavaScript感は弱いと思います。
Dartを書いてみる
さて、新しい言語に手を出すためにはその言語を書く環境を用意しなくてはなりません。 Dart専用のエディター(Dart Editor)やEclipse用のプラグインをが提供されていますので、それらを使うのがおそらく最も手軽にDartに手を出す方法でしょう。
試しにDartEditorを使って100行程度のJSのコードをdartに書き換えてみた所、エラーチェックや型情報に基づいた補完などかなり賢くサポートしてくれました。
見た目も某IDEとは異なりそれなりにオシャレ感ありますし、動作も某IDEとは異なりそれなりに軽快でした。
しかしながら、私には耐え難い不満点がありました・・・Vimではなかったのです。
VimでDartを書いてみる
ということでvimにDart用の設定をしました。以下、使ったプラグインです。
- シンタックス・ハイライト(コードの色付け)
- コードの手軽な実行
- 構文チェック
syntastic→ vim-dartanalyzer作りました
- オムニ補完
- 見つかりませんでした
構文チェックはsyntasticを使うことでファイル保存時などにDart SDKのdartanalyzerが実行されてエラー箇所がハイライトされます。 このdartanalyzerがかなり賢く構文のチェックをしてくれます。 ちゃんと型情報も使ってくれて素晴らしいです。 ※ ただしJVM上で実行されます。
したがって構文チェック時に毎回数秒待たされます。つらすぎます。 公式でもIssue 10981 - dart - dartanalyzer is too slow.というIssueがたてられるほどdartanalyzer (の起動) は遅いです。
Dartの構文チェック用プラグインを作った
つらすぎたので自分で高速かつリアルタイムなDartの構文チェック用のvim pluginを作りました。 名前は、かなり迷った結果、安直にvim-dartanalyzerとしました。 将来ちゃんとしたプラグインを作る人が困りそうですが、多分その人はオシャレな名前を考えてくれると信じています、ごめんなさい。
正直、プラグインがそれなりに動いた時点で「あれ?なんでDart用のVimプラグイン書いてるんだろう?」とふと冷静になってしまい、これ以上モチベーションが続きそうにないのでとりあえず公開することにしました。全体的に自分の環境で動けばいいや的なコードが多いので、試す方は自己責任でお願いします。
[2014/10/09 追記]
vim-dartanalyzerの使い方にインストール方法や使い方を詳しく書きました。
インストール
- vimproc.vimが必要です
- 構文チェックにはdartanalyzerを使うので、
dartanalyzer
にパスが通っている必要があります - Vimは
matchadd
関数をサポートしているバージョンである必要があります- 7.4以上なら大丈夫なはず
以上の条件を満たせばLinuxでは動作する思います。 動作確認は Ubuntu 14.04 + Vim 7.4.442 で行っています。 Macでも動作する可能性は高いです。 Windowsは・・・一応動くと思いますが色々不具合あると思います(未確認)。
NeoBundleを使っている方は、
NeoBundle 'miyakogi/vim-dartanalyzer'
を.vimrc
に書いて:NeoBundleInstall
すればインストールできるはずです。
使い方
filetype=dartなファイルを開きます。
自動でfiletypeが設定されない場合は、dart-lang/dart-vim-plugin等を利用するか、.vimrc
に適切な設定 (autocmd BufNewFile,BufRead *.dart set filetype=dart
など) を書いてください。
数秒程度待つと、構文チェックが行われ、エラーがあればそこがハイライトされます。
エラー箇所はlocation-listにセットしていますので、:lopen
でエラー一覧を確認してジャンプすることも可能です。
このプラグインを作るにあたり、vital.vimというライブラリに含まれているProcessManager(PM)というモジュールを使わせていただきました。 モジュールの詳細はこちら。 要は外部プロセスを立ち上げたままにしてvimからのアクセスをいい感じにしてくれます。 これを利用してdartanalyzerを立ち上げたままにして構文チェックをしています。 むしろPMを使ってみたくてこのプラグイン作った部分もあります・・・
VimでDartを書いてみた感想
構文チェックができるようになったので、型をつけることで単純なミスによるエラーは実行前に把握できるようになりました。 Javaのような静的型付け言語には苦手意識がありましたが、こんな風に実行前にエラーが修正できる部分が増えるのは便利ですね。
ただ、オムニ補完が利用できないのはかなり寂しいです。 せっかく型をつけているのに、その恩恵を十分得られていない気がします。
なので、オムニ補完プラグインもあるとVimでDartを書く環境はかなり改善されるのではないかと思いました。 EclipseのDartプラグイン+Eclimも考えましたが、まだ対応していないようでした。 Javaわからない私にはEclimを拡張するとか全然無理です。 誰かDartの補完プラグイン作ってください・・・
余談
Vimスクリプトを書いた時間 >>>>>>> プラグイン名を考えた時間 >> スクショを作った時間 >= Dartのコードを書いた時間