coffee-check.vim

上一篇文章提到使用 RequireJSCoffeeScript plugin 時,如果寫的 CoffeeScript 語法不正確,瀏覽器即時 compile 就會有錯誤,而且在瀏覽器那邊看到的錯誤訊息根本看不出來是錯誤是在哪個檔案、哪一行,如果專案內檔案很多,那除錯會變得很難,所以我想到的解法就是在寫 coffee 檔的時候就檢查 compile error,就像 jslint.vim 的行為一樣,上網搜尋了一下 Vim 的 CoffeeScript 相關外掛,發現都沒人做這功能,於是花了一些時間從 jslint.vim 那邊移植過來,使用的檢查方式是直接coffee -c來編譯,看會不會有錯誤訊息,現在已經發佈到 github 上了,叫 coffee-check.vim

安裝還算簡單,先確定系統已經有安裝 node,然後只要用 pathogen 或是 Vundle 把套件裝起來,接著在 vimrc 內加上一行:

au BufRead,BufNewFile *.coffee set ft=coffee

之後每次儲存 *.coffee 檔就會自動跑 CoffeeCompile compile,然後把錯誤訊息丟到 Quickfix Window 裡面,目前有一些已知問題:

  1. CoffeeScript compile 一次只會有一個錯誤,而不是從頭到尾的完整檢查,所以如果檔案內有兩個以上的錯誤,那就要重複幾次才能把錯誤都修正。
  2. 有一些錯誤訊息是沒有行號的,但是不給行號的話 Quickfix 那邊會有些行為不一樣,所以這種錯誤訊息我都統一說錯誤是在第一行。
  3. 第三是現在是用 node require 的方式來跑 compile,和系統自己用 npm 裝的 coffee 沒有關係,我還在考慮要不要用 npm 裝的 coffee 指令,一開始不用是因為用 coffee 指令是因為它 compile 出錯的話不只會有錯誤訊息,還會有錯誤的 trace 的資訊,不過這是我不需要的資訊。

第一和第二個問題基本上是目前無解,除非以後有什麼其它的 syntax error checker 來做這件事,現在的我也還寫不出這種東西,第三點則是近期可能會有更新,如果其它還有什麼建議或問題回報都歡迎,可以直接到 github 開 issue

補充,有人提了我才發現,vim-coffee-script 也可以做到幾乎一樣的事情,只要在 vimrc 加入這行:

au BufWritePost *.coffee silent CoffeeMake! -b | cwindow | redraw!

使用 vim-coffee-script 的話,因為CoffeeMake是把 coffee 轉成 js 的指令,所以如果沒有錯誤,就會產生 js 檔案,不過我自己的使用情境是不需要那個 js 檔案的,這也是我當初決定自己做一個的原因,單純只有做語法檢查。