ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

TypeScript の補完候補を取得する方法メモ

TypeScript 公式サイトの Playground では web 上のテキストエディタで TypeScript のコードの補完が実現されているわけですが、vim 上でも補完候補出せるようにしたいなー、と思って TypeScript の補完候補を取得する方法を調べました。 対象とした TypeScript のバージョンは以下のとおりです。

  • TypeScript ver.0.8.0

Services.LanguageService#getCompletionsAtPosition メソッドで補完候補一覧を取得できる

TypeScript プロジェクト の中にはコンパイラのためのクラスだけでなく、テストのための Harness や、言語サービスのためのクラスなども存在しています。 言語サービスのためのクラスは、以下のファイルの中で定義されている Services.LanguageService クラスです。

Services.LanguageService クラスには getCompletionsAtPosition という名前のメソッドがあり、このメソッドを使うことで補完候補一覧を取得できます。

Services.LanguageService クラスの使い方

Services.LanguageService のコンストラクタは、引数として Services.ILanguageServiceHost インターフェイスを実装したオブジェクトをとります。 Services.ILanguageServiceHost インターフェイスを実装したクラスとしては Services.LanguageServiceShimHostAdapter があるので、このクラスのインスタンスを生成して使えば良さそうです。 Services.LanguageServiceShimHostAdapter のコンストラクタは Services.ILanguageServiceShimHost インターフェイスを実装したオブジェクトを引数にとりますが、このインターフェイスを実装したクラスは自分で作る必要があります。

テスト用の Harness.TypeScriptLS クラスが Services.ILanguageServiceShimHost インターフェイスを実装しているので、この実装を参考にすればよいでしょう。

Services.ILanguageServiceShimHost インターフェイスを実装したオブジェクトを作ってしまえば、あとはソースコードの登録を行って Services.LanguageService のインスタンス化を行い、getCompletionsAtPosition メソッドを呼び出すだけです。 詳しくは、補完候補を取得するテストのコードを見れば大体わかると思います。

サンプル

というわけで、web 上のテキストエディタソースコードを入力して、補完候補を表示するような簡単なサンプルを作ってみました。 TypeScript 便利!!