Nekostack

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

必要にかられて巻き込んでいくスタイル

Posted on 31 March 2016.

桜が見頃だけど花見してない勢。 淡々と一人でコード書いているのが好きなのだけれど、 今月はちょっとだけ協調した。

1. 進捗

Vim で Swift の補完をするプラグイン

Vim 向けに Swift の補完機能を提供するプラグイン autocomplete-swift (旧 neocomplete-kitten) の続き。

今月は、「とりあえずこれだけインストールすれば使える」状態を目指すべく、 neocomplete, neosnippet なしでもとりあえず動かせるようにするなどした。

  • 関数・メソッド補完時にパラメーターのプレースホルダーへジャンプする機能
    • neosnippet がインストールされていなければ、autocomplete-swift の提供するジャンプを利用
    • neosnippet がインストールされていれば、neosnippet の提供するジャンプを利用
  • Vim 標準のオムニ補完のサポート
    • neocomplete がなくても Vim 標準の機能と SourceKitten だけで動かせるようにするため

その他の機能は、README を見ると良いと思う。

今後、やろうと思っていることは、

  • キーワードの補完は辞書ベースにする (SourceKitten に投げるまでもないので。作業中。)
  • 補完窓に詳細な情報 (シグネチャ、レシーバーの型など) の表示
  • Xcode プロジェクト (Framework/SDK に対応した) 補完機能の提供 (SourceKittenDaemon 対応?)
  • Vim と SourceKit 間の通信改善 (バッファー丸ごと送らずに済ませられないか)
  • Neovim/Vim のどちらを (両方、あるいは片方) をサポートするか

Vim と SourceKit 間の通信と、Neovim/Vim のサポート問題は割と深刻だったりする。 というのも、バッファー全体を SourceKitten に送る必要があり、ファイルサイズが大きくなるとしんどい、 さらに (まだ計測していないが) 補完候補の生成自体もそれなりに時間がかかっているはずで、 同期的に補完をしている Vim ではまともな体験が得られない。 何がボトルネックになっているのかもちろん計測あっての話なのだが、 Vim を切って Neovim だけという線もあるかもしれない…

Swift 向けコードスニペット

neosnippet-snippets に Swift 用のスニペットなかったので書いた。 はじめは自分用に dotfiles に閉じ込めておこうかなと思ったけど、 まあジェネリックなものならこっちに取り込んでもらった方が人類が時間を無駄にしなくてよさそうだなと思うなど。

SourceKittenDaemon

autocomplete-swift で使いたいので pull-req 出すなどした。

SourceKittenDaemon の依存関係が妙なことになっていたので、 Formula を書く前にその辺りの調整をする Pull-Request になっている (Cartfile.resolved に記録されているバージョンと、Carthage/Checkout 以下にあるバージョンが一致していない)。 Formula は一度サブミットしたのだけれど、 結局依存しているライブラリが tagged version じゃないよね、ということで現状リジェクトを食らっている。 その辺りを察してか、タグで止めてくれたのだけれど、 izqui/taylor は最新のタグよりも新しいコミットを参照していたので、 どうにも辛い感じ。

もともとは、SourceKittenDaemon 相当のものを自分で書こうと思っていたのだが (SourceKittenDaemon は github-tomlokhorst/xcode.swift を内部で利用していて、 これさえあれば、自分で書いてもそんなに時間かからなそうな印象がある) 、 まだ SourceKittenDaemon もバージョン浅いので、 地道に使いやすくなる方向にコミットしてもいいのかなと考えたりしている。

2. お仕事

UIKit が辛い。 iOS のレールから外れさせないためなのか、 ちょっと外れたレイアウトを組もうとすると、 既存のもの (UINavigationController など) をいじるよりも自分で書いたほうが早かったりする。

あと、UIKit Framework の UIViewController とか UINavigationController とか、 冗長なので UI Framework の NavigationController とかになって、 コンテキストがはっきりしてる時は、NavigationController という単純名で参照できると良さそうだけど、 そうなることはないのだろうか。

3. 食

餃子

大学の頃からお世話になっている人たちと餃子を食べる会をする。

奈良の同期たちに会いに行く

NAIST 松本研究の同期たちに会いにふらっと大阪まで行く。 卒業以来あった人もいたので良い。 携帯端末向けのインプットメソッドを書きたい気持ちが出てきた。

4. 次

4 月の目標とか。

  • iOS 向けにタスク管理系アプリを書く
    • UIKit ともう少し仲良くなる
    • アーキテクチャなりパターンなりに馴染む
  • autocomplete-swift の改善。