Hack #231: Rubyで入力と出力からメソッド名を自動補完する
Posted at 2011/09/20ツイート
こんにちは、ujihisaです。社内Hackathonがあるということで土日に出社したものの、どちらも僕以外全員不参加で涙目でした。
問題
Rubyでメソッド名を補完する方法をHack #229: 動的型付け言語Rubyでメソッド名などを自動補完するで紹介しました。これは、オブジェクトからそのメソッドをすべて網羅することで補完を行うというアプローチでした。
では、オブジェクトと、メソッドを呼び出すことで得られる返り値の両方から補完を行うことはできないのでしょうか。
例示します。Rubyでは、1というオブジェクトから2というオブジェクトを得るには、1に対してsucc
またはnext
というメソッドを呼び出すことで実現できます。
1.succ #=> 2
また、[:a, :b, :c]
というオブジェクトから:a
というオブジェクトを得るには、[:a, :b, :c]
というオブジェクトにfirst
などのメソッドを呼び出すことで実現できます。
[:a, :b, :c].first #=> :a
カーソル位置がオブジェクトの直後のメソッド呼び出しの.
にあるとき、メソッド名が自動補完されるのを期待するのはごく自然なことと思います。
解決
つい先日リリースされたばかりの、neco-rubymfというneocomplcacheプラギンを用います。
インストール:
-
Rubygemsパッケージ
methodfinder
をインストールします。$ gem install methodfinder
-
neocomplcacheプラギンneco-rubymfをインストールします。もしも未だにneocomplcacheをインストールしていなければ、そちらもインストールして下さい。
続いて、'filetype'
がruby
であるバッファで、以下のように入力します(ただし¶
はカーソルのつもりです。)
1.¶ #=> 2
すると、1というオブジェクトが持つメソッドでかつ返り値が2であるメソッド next
とsucc
が補完候補にあらわれます。
同様に、
[:a, :b, :c].¶ #=> :a
に対して
が得られます。
以下に他の例を画像で示します。
※最後の例は確率的に発生します。
ujihisaもどる
blog comments powered by Disqus