image

「カーソルが指しているノードの型が分かる場合はそれを返す」という実装をつくってみようとしている。

ソースコードとカーソル位置を与えると、カーソルの指しているノードと、そのコンテキストを作り出しているノード (ここでは A#b) を返す、という実装を試しにつくった。これはソースコードをパースして位置情報やノードの種類で走査すれば実現できた。

メソッドの仮引数である foo の型注釈はYARDから引いてこれるので、これらを結び付ければ導出できるはず。

メソッド内の

  • ローカル変数
  • レシーバーの無いメソッド呼び出し

について、それぞれYARDで型注釈が与えられていないか調べにいって、あればそれを返すという実装ができた。

image

メソッドチェーンに再帰的に対応できた。

あとは対応するノードの種類を増やしていけば、YARDの注釈ベースで型を推測するという機能は完成しそう。

次回対応したいもの

  • local variable assignment
  • constant
  • singleton method