ghc-mod を利用した neocomplcache のプラグイン neco-ghc (ghc_complete.vim) を書いた

せっかく Emacs とは独立して ghc-mod が書かれているので,これを Vim での補完にも利用したいなーと思って書いた.
ghc-mod は hackage で公開されているため,cabal install ghc-mod でインストールできる.
http://www.mew.org/~kazu/proj/ghc-mod/
http://hackage.haskell.org/package/ghc-mod


neocomplcache 本体はこちらから.現時点での最新版で実装された ftplugin として書いたのでリポジトリにあるものでないと動かない.
http://github.com/Shougo/neocomplcache


この ghc_complete.vim を autoload/neocomplcache/sources に置くことで neocomplcache の一部として Haskell のコードの補完をサポートする.
http://gist.github.com/489268

現在,名前を neco-ghc に改めてこちらでメンテされている.
https://github.com/ujihisa/neco-ghc


具体的には以下のような補完を行うことができる.

import するモジュール名の補完

インストールされているモジュールが補完される.

import したモジュールにあわせた補完

import 文を見てそれにあわせた補完を行う.

また,Prelude.map のようにモジュール名も含めて書いた場合はそのモジュールが export している名前だけを補完する.
これは as で別名を定義した場合にも適切に補完されるようになっている.
一方,qualified で import された名前は,qualify されていない場合については補完の候補として表示しないようにしている.

ただしちょっと問題があって,例えば import Text.Printf (printf) のように明示的に import する名前を書いたときでも Text.Printf が export している名前すべてが補完されてしまう.
import Data.Maybe (Maybe (..)) のような import も可能で,これをどう扱うべきかよくわからなかったのでとりあえずこうしている.
補完しないほうがいいんですかね…?

LANGUAGE プラグマの補完

GHC がサポートしている LANGUAGE プラグマが補完される.


まぁほとんど ghc-mod の機能を neocomplcache から利用できるようにしただけです.
kazu さん,Shougo さん,ありがとうございます.