vim-vimlint で Travis-CI 連携

この記事は Vim Advent Calendar 2013 111日目の記事になります.
vim plugin を github で公開している皆様こんにちわ. vim-vimlint で Travis-CI 連携やってみませんか. github でたまに見る, https://api.travis-ci.org/syngan/vim-operator-keeppos.png こういうやつです.

公開中の github 上の plugin に push するだけで, vim-vimlint がうごいて, エラーがないかチェックしてくれます, 便利.
vim-vimlint の遅さなんて気にしなくて良くなりますね, 素敵.

Travis-CI 連携のための手順

step1: travis-ci の設定

最初に Travis CI - Test and Deploy Your Code with Confidencegithub と連携する設定をします.

http://f.st-hatena.com/images/fotolife/s/syngan/20140321/20140321224738.png

step2: .travis.yml ファイルを作る

以下のようなファイルを作ります.

before_script:
    - git clone https://github.com/syngan/vim-vimlint /tmp/vim-vimlint
    - git clone https://github.com/ynkdir/vim-vimlparser /tmp/vim-vimlparser

script:
  - sh /tmp/vim-vimlint/bin/vimlint.sh -l /tmp/vim-vimlint -p /tmp/vim-vimlparser autoload plugin

最後の行の "autoload plugin" の部分は必要に応じて修正してください.

step3: push する.

おしまい. これだけです. 簡単, 便利, かっこいい.
README.md に, Travis-CI の結果の画像を乗せるとよりかっこ良いです.

きっと聞かれるであろう Q/A

vim-vimlint が誤検知します.

はい. lint と名前を付けたので, エラーっぽいのはエラーに倒しているので仕方がありません. ごめんなさい. 一応, コメントにいれてエラーを無効にする方法があります.
誤ったエラーの出る箇所に以下のようなコメントを追加してください.

" @vimlint(EVL103, 1, a:_)
  • 1 番目の引数がエラー番号
  • 2 番目の引数が 1 の場合に無効に, 0 の場合に有効になります.
  • 3 番目の引数に変数名を設定します. 変数名には l:, g:, a:などが必要です.

上記の例だと, a:_ は使わない引数だけどエラーになってしまうのを無効にしています.
できれば, それ以降のエラーにならないといけない箇所のエラーの検出が出来なくなってしまうので, 有効にするためのコメントを追加してほしいのですが, 悲しいかな, 実装をさぼっているので有効にするためのコメントを書く場所には注意が必要です. こんな感じで, 関数に関するエラーの判定は endfunction 時にやるので, endfunction より下に書く必要があります. 変な仕様ですね.

" @vimlint(EVL103, 1, a:node)
function s:VimlLint.compile_delfunction(node, refchk) " {{{
  .....
endfunction " }}}
" @vimlint(EVL103, 0, a:node)
vim-vimlparser でエラーになります.

ごめんなさい. 諦めてください. もしくは vim-vimlparser に pull req 送ってください.
テスト系で独自のコマンドを定義しているような場合は良くお亡くなりになるようです. vimlparser の仕様なので仕方がないのです...

/tmp/vim-vimlint/bin/vimlint.sh の引数に与えるファイルを調整していただけると嬉しです.

おわりに

vim-vimlint の効果は微々たるものですが, エラールートなどはテストされていない人がおおいですよね. やっても少ししか損はしないと思います.

あと, これは対応してくれよい、な問題があれば issues に具体例を添えて連絡ください.