Nokogiri太棒了。我可以做像#css('.bla')
这样会返回第一个匹配元素的东西。
现在我们需要对Ruby源代码进行一些解析 - 查找类中的所有方法等。我们正在使用ruby_parser gem,但它只是梳理你的源代码并吐出S-表达式。对于这些S表达式有什么像Nokogiri这样的东西,可以做“返回第一个方法的S表达式,发现名为'foo'”吗?
答案 0 :(得分:2)
我唯一能想到的是Adam Sanderson's SExpPath
library。
答案 1 :(得分:2)
虽然我接受Jörg的答案,因为它更完整,我最终发现了我最终使用的其他东西。 ruby_parser安装一个名为sexp_processor的依赖gem(它位于此gem中,其中实际定义了Sexp
类)。如果你查看class docs,有一些方法可以帮助基本的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
}
}
答案 2 :(得分:0)
我对您正在寻找的宝石一无所知,但您可以使用instance_methods
找到班级中的所有方法:
class Foo
def bar
end
end
irb(main):005:0> Foo.instance_methods - Object.instance_methods
=> [:bar]
答案 3 :(得分:0)
你可以查看rubinius解析器,它可以帮助你做你想做的事。