Nekostack

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

Swift を Vim で補完しながら書いてみる

Posted on 14 February 2016.

ふと思い立って、Vim で Swift の補完をするプラグインを書いたので紹介。

mitsuse/neocomplete-kitten: A neocomplete source of Sourcekitten for Swift.

kitten

モチベーション

Xcode には XVim という大変便利なプラグインがありますが、 Swift に限っていえば、 SourceKit もあるのでこのアプローチもありではと思った次第。

すべての作業を Vim で完結させることは狙ってはおらず、 あくまでも Xcode (とその周辺の CLI ツール群もふくめて) と Vim でうまくすみわけができればと妄想しています。 たとえば、実装作業は Vim で、 それ以外 (プロジェクトの設定や Interface Builder で UI 設計) は Xcode で、などなど。

仕組み

neocomplete から SourceKitten 経由で SourceKit と通信しています。 SourceKit が補完候補は生成してくれるので、 neocomplete-kitten の主な責務としては、 今の所は補完位置とタイミングの調整ぐらいです。

サポートしている機能

今の所、Swift 標準ライブラリと単一ファイル (の中で定義された型・メソッド・関数など) に対応しています。 とはいえ、SourceKit に SourceKitten 経由で丸投げしているので、 SourceKit でできることの一部といったところでしょうか。

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

今後

とりあえず動く状態にもってこれたので、すこしづつ拡張していく予定です。

  • 関数・メソッド補完時にパラメーターのプレースホルダーをうまく利用する。
  • Framework/SDK に対応した補完
  • これまで Vim script 自体まともにかいたことがなかったので、そのあたりの知識をきっちりする。