Nekostack

Golang, Swift, Vim, Cat, Curry, Whisky.

NeoVim で autocomplete-swift を使うべく deoplete をサポートした

Posted on 08 May 2016.

Vim に Swift の補完機能を提供するプラグイン、 autocomplete-swift を実験的に NeoVim で使えるようにした。

autocomplete-swift

差分

Vim に neocomplete 向けに提供していたものを、 ひとまず deoplete で動かすべく Python に移植した。 一部 Vim script な部分もある (NeoSnippet ない時のプレースホルダーの扱いなど) が、 もともと neocomplete 向けでサポートしていた機能は一通り動くようになっているはず。

SourceKit が候補を返すのに時間がかかっている場合でも、 ブロックされないので普段から使えるようになってきたのではないかと思う。 もちろん、.xcodeproj のサポートはまだなので、ファイルに閉じた補完に限定されるけれど。

deoplete-swift

deoplete-swift というプラグインが先行して存在しているので、 どこかの時点で合流した方がいいんだろうなあとは思ったりする。 今の所は機能的には autocomplete-swift の方が進んでいるはずで、 規模的にも自分の管理下に直接置いておいた方が楽なのでまあしばらくはいいかなと言う感じ。

現在サポートしている他の機能

  • 型名の補完 (: のあとの親クラス・プロトコルやパラメーターの型、-> につづく結果型)
  • static なメンバー・インスタンスのメンバー名の補完
  • 関数・メソッドのパラメーター名の補完
  • トップレベルの関数・定数・変数の補完
  • プレースホルダーへのジャンプ

気づいたことなど

引数・戻り値などの型名の補完がボトルネックになっている。 SourceKit 側がもともと遅いのだろうけれど、 neocomplete だと、そこでブロックされてしまうので実際使うとつらい感じになっていた。 deoplete に移したことで、その点ではブロックはされなくなっているが、 補完がうまくできないケースがあるのは何とかしたいところ。

基本的にファイルないから参照できる型一覧はそう変わることないはずなので、 雑にキャッシュしてしまうのも手かもしれない。

次の予定

  • 型名の補完速度の改善
  • .xcodeproj 対応 (SKD/Framework を参照できるようにする)
  • deoplete 版のリファクタ