読者です 読者をやめる 読者になる 読者になる

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

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

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

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

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 便利!!