「カーソルが指しているノードの型が分かる場合はそれを返す」という実装をつくってみようとしている。
ソースコードとカーソル位置を与えると、カーソルの指しているノードと、そのコンテキストを作り出しているノード (ここでは A#b
) を返す、という実装を試しにつくった。これはソースコードをパースして位置情報やノードの種類で走査すれば実現できた。
メソッドの仮引数である foo
の型注釈はYARDから引いてこれるので、これらを結び付ければ導出できるはず。
メソッド内の
- ローカル変数
- レシーバーの無いメソッド呼び出し
について、それぞれYARDで型注釈が与えられていないか調べにいって、あればそれを返すという実装ができた。
メソッドチェーンに再帰的に対応できた。
あとは対応するノードの種類を増やしていけば、YARDの注釈ベースで型を推測するという機能は完成しそう。
次回対応したいもの
- local variable assignment
- constant
- singleton method