84
89

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VimAdvent Calendar 2014

Day 16

vimrc アンチパターンを自動でチェックする

Last updated at Posted at 2014-12-16

この記事は Vim Advent Calendar 2014 の 16 日目の記事です。
15日は kefir_ さんの「vim と term.c」でした。vim と 端末の間のやりとりの解説という超ディープな話題で、つくづく vimmer は変態(いい意味)が多いな、と痛感させられます。素晴らしい記事ですので、ぜひ一読をお勧めします。

さて、今回の記事では、VAC 1 日目の記事 「vimrc アンチパターン」 を Vim script の lint ツール「vint」で判定できるようにした、という話を紹介します。

今年 11 月に開かれた VimConf 2014 にて「vint は機能追加が簡単さ〜」とか豪語しておりましたので、その実証がてら lint ルールの実装タイムアタックにチャレンジしてみました。

vimrc アンチパターンのルール

vimrc アンチパターンをまとめると、9 つのルールなります。
この 9 つのルールをどれくらいの時間で実装できるかを計測してみました。

  • コード中にマルチバイト文字があり、かつ scriptencoding が指定されていない場合警告
  • encoding が scriptencoding よりも後に指定されていた場合、警告
  • オプションの省略記法を検知して警告
  • autocmd が augroup の外で、さらに group が指定されてないとき警告
  • set nocompatible を警告
  • syntax on が Bundle系コマンドの前にある場合警告
  • スコーププレフィックス(g: とか a: とか)のない変数を警告
  • remap じゃない map は <Plug> と併用されていなければ警告
  • <C-i><Tab><C-m><Enter><C-[><ESC> の両方の組があらわれたら警告

vint の使い方

python で実装されているため、 pip を使います。

pip install vim-vint

インストールが終われば、vint ファイル名 で実行できるようになります。
さっそく自分の vimrc を検査してみましょう。

screencast

アッアッ…作者なのに…!

私の vimrc は 700 行弱ですが、ほぼ一瞬で検査が終了しています。
定番 lint プラグインの syntastic のような lnit の実行完了を待たせる lint プラグインでも問題にならない速さです。

タイムアタックの結果

さて、タイムアタックの結果です。

9 つのルールのうち、5 つのルールを 5 時間で実装できました。

つまり、おおよそ新規の 1 ルールが 1 時間で実装(テスト込み)できるという計算になります。それぞれのルールにはテストも付属させてます。

このように、手軽に lint のルールを追加していけることが vint のよさなのです。
ただ、動作確認は結構雑だったので、もしかすると判定ミスがあるかもしれません。そういうときは issue をたてていただけると対応します。

謝辞

@rbtnn さん、とても勉強になる記事でした。ありがとうございました。
@thinca さん、@itchyny さん、バグ報告ありがとうございました。
まだ大部分を直せていませんが、今後も vint を使用していただけると助かります。
現在は問題の多かったスコープ解析部分を無効化しているため、vital も検査できるようになっています。

84
89
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
84
89

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?