使用 Syntastic 執行 CoffeeLint 檢驗 CoffeeScript

我之前有 fork jslint.vim 出來做了一個 coffee-check.vim,不過前陣子開始改用 Syntastic,作者 Martin Grenfell 也是個蠻有名的 Vim plugin 作者,最有名的應該 nerdtree 了吧,Syntastic 則是一個通用的 syntax checker plugin,使用的是外部的 syntax checker,設計成可以任意擴充支援不同檔案類型,而且支援一個檔案類型多種 checker,並且沒有限制 syntax 檢查,只要外部程式會跟你說哪裡有問題就可以。

Syntastic 預設就已經有 CoffeeScript 用的設定,支援 CoffeeScript Compiler 和 CoffeeLint,前者可以用來作 syntax checker,後者則是 lint,實際上安裝起來蠻簡單的,系統的 coffee 和 coffeelint 指令都可以透過 npm 安裝:

npm install -g coffee-script
npm install -g coffeelint

Synatastic 用 Vundle 或 pathogen 安裝,然後你編輯完 CoffeeScript 檔案存檔時,就會出現檢查的結果了。

不過雖然安裝簡單,但是我還是遇到一個問題,就是 CoffeeLint 的其中一項檢查項目是每行的程式碼不要太長,預設是 80 個字元,不過這個數值對我來說太小了,所以我就必須要想辦法修改這個限制,CoffeeLint 有提供設定這些規定的選項,有點複雜,首先你必須要先有一個設定檔,而這個設定檔要 CoffeeLint 0.5.5 以後才有辦法用指令產生,運氣很不好的,npm 現在的 stable 版卻是 0.5.4,還不支援產生設定檔,我又不想要自己 compile 一份,所以只好上網搜尋,結果還真的給我找到範例,趕緊丟 gist 備份

設定檔內容就是個 JSON:

{
    "max_line_length": {
      "value": 80,
      "level": "ignore",
      "message": "Line exceeds maximum allowed length"
    }
}

還蠻好理解的(可是沒範例我怎麼知道格式是怎樣啊!怒!),改好我要的設定後,執行 coffeelint 指令時還要加上參數來指定設定檔:

coffeelint -f ~/coffeelint-configuration.json route.coffee

之前做到這步後我就卡住了,因為不知道怎樣設定成讓 Syntastic 執行時也接一樣的參數,直到今天早上跟 joseph 推薦 Syntastic 之後,才又花時間研究一次,終於發現其實可以在 vimrc 裡面設定特定檔案、特定 checker、特定設定的值:

let g:syntastic_coffee_coffeelint_args = "--csv -f ~/coffeelint-config.json"

前面的--csv是一定要的,這樣設好,我終於可以不用一直看到 CoffeeLint 跟我說我的程式碼太長了。