のこぎりはすごいです。#css('.bla')
最初に一致する要素を返すようなことを行うことができます。
今のところ、Rubyソースコードの解析を行う必要があります。クラス内のすべてのメソッドを見つけるなどです。ruby_parsergemを使用していますが、ソースコードを組み合わせてS式を吐き出すだけです。「'foo'という名前の最初のメソッドのS式を返す」などのことができるこれらのS式のノコギリのようなものはありますか?
のこぎりはすごいです。#css('.bla')
最初に一致する要素を返すようなことを行うことができます。
今のところ、Rubyソースコードの解析を行う必要があります。クラス内のすべてのメソッドを見つけるなどです。ruby_parsergemを使用していますが、ソースコードを組み合わせてS式を吐き出すだけです。「'foo'という名前の最初のメソッドのS式を返す」などのことができるこれらのS式のノコギリのようなものはありますか?
私が思いつく唯一のものは、Adam Sanderson のSExpPath
ライブラリです。
Jörgの回答はより完全であるため受け入れていますが、最終的に使用することになった別のものを発見しました。ruby_parser は、sexp_processor という名前の依存 gem をインストールします(Sexp
クラスが実際に定義されているのはこの gemです)。クラスのドキュメントを見ると、基本的な Ruby ファインダーに役立つメソッドがいくつかあります。次に例を示します。
class Sexp
def name # convenience method
self.sexp_body.first
end
end
# Print out all instance methods within classes. Beware - if "code" sexp itself
# is a class, it will NOT be included!
code = RubyParser.new.parse(IO.read('/src/file'))
code.each_of_type(:class){ |klass|
klass.each_of_type(:defn){ |meth|
puts meth.name
}
}
あなたが探しているgemについては何も知りませんが、クラス内のすべてのメソッドを次のように使用して見つけることができますinstance_methods
。
class Foo
def bar
end
end
irb(main):005:0> Foo.instance_methods - Object.instance_methods
=> [:bar]
rubinius パーサーを確認すると、やりたいことを実行するのに役立つ場合があります。