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 インターフェイスを実装しているので、この実装を参考にすればよいでしょう。
- Harness.TypeScriptLS を定義しているファイル : TypeScript - Source Code : src/harness/harness.ts
Services.ILanguageServiceShimHost インターフェイスを実装したオブジェクトを作ってしまえば、あとはソースコードの登録を行って Services.LanguageService のインスタンス化を行い、getCompletionsAtPosition メソッドを呼び出すだけです。 詳しくは、補完候補を取得するテストのコードを見れば大体わかると思います。