syntasticを使う際には必ずcheckerを指定しようというお話。
syntastic_version: 3.4.0-31 の頃にこの記事を書いてます。
結論
scrooloose/syntastic で JSHint を使っている人は、 syntastic_javascript_checkers で明示的に指定しよう。
let g:syntastic_javascript_checkers = [‘jshint’]
なんでこんな話になるのか
大体 .vimrc にこんな設定を書いているハズ。
let g:syntastic_mode_map = { \ 'mode': 'active', \ 'active_filetypes': ['javascript'], \ 'passive_filetypes': ['html'] \} let g:syntastic_auto_loc_list = 1
で、人によっては以下の一行を書いてたり、書いてなかったり。
let g:syntastic_javascript_checker = 'jshint'
さらに、JSHint だけでなく JSLint もインストールしてるよって人もいると思う。
syntastic_javascript_checker = ‘jshint' 書いてる人
以下のような warning が出る。.vimrcの複数箇所に記述してるわけでもないのでちょっと納得いかない。
syntastic: warning: variable g:syntastic_javascript_checker is deprecated
syntastic_javascript_checker = ‘jshint' 書いてなくて、JSHint と JSLint 両方インストールしてる人
要はほぼ未設定だけど JSHint と JSLint 両方入ってる環境。一見 JSHint が優先して動作してるから問題なさそうに見える。が、
- 普段は JSHint っぽい Warning が出る。
- 全部エラーを消すと突然大量の Error が出る。.jshintrc を設定しても改善なし。
これは実は以下の仕様で動作してる
- JSHint で check する
- JSHint の Error がなければ、JSLint で check を開始する
何でや!JSHint でチェック完了してるんだから JSLint 実行しなくてもいいやろ!
対策
scrooloose/syntastic にはこう書いてます。
Some filetypes, like PHP, have style checkers as well as syntax checkers. These can be chained together like this:
vim let g:syntastic_php_checkers = ['php', 'phpcs', 'phpmd']
This is telling syntastic to run the php checker first, and if no errors are found, run phpcs, and then phpmd.You can also run checkers explicitly by calling :SyntasticCheck
.
配列順に、最初に php checker を実行しますが、エラーが無ければ次に phpcs, そして phpmd と実行するようですね。
で、syntastic は /plugin/syntastic/registry.vim の中にデフォルト設定としてこんな感じに書いてあります。
let s:defaultCheckers = { ... \ 'javascript': ['jshint', 'jslint’], ...
ということで、以下のような長さが1個の配列を設定すれば諸々の問題なく syntastic で JSHint のみを使用できます。
let g:syntastic_javascript_checkers = [‘jshint’]
蛇足
個人的に以下も追加してます。
let g:syntastic_enable_signs = 1 let g:syntastic_error_symbol = '✗' let g:syntastic_warning_symbol = '⚠'