9

Nokogiri很棒。我可以做类似#css('.bla')返回第一个匹配元素的事情。

现在我们需要对 Ruby 源代码进行一些解析 - 查找类中的所有方法等。我们正在使用 ruby ​​_parser gem,但它所做的只是梳理您的源代码并吐出 S 表达式。对于这些 S 表达式,是否有类似 Nokogiri 的东西可以执行诸如“为找到的第一个名为 'foo' 的方法返回 S 表达式”之类的事情?

4

4 回答 4

2

我唯一能想到的,是亚当桑德森的SExpPath图书馆

于 2011-06-17T09:27:39.437 回答
2

虽然我接受 Jörg 的回答是因为它更完整,但我最终发现了我最终使用的其他东西。ruby_parser 安装一个名为sexp_processor的依赖 gem (它在这个 gem 中Sexp实际定义了类)。如果您查看类文档,有一些方法可以帮助您使用基本的 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
  }
}
于 2011-06-20T22:18:25.123 回答
0

我对您正在寻找的 gem 一无所知,但您可以使用以下方法找到类中的所有方法instance_methods

class Foo
  def bar
  end
end

irb(main):005:0> Foo.instance_methods - Object.instance_methods
=> [:bar]
于 2011-06-17T07:39:57.100 回答
0

你可以检查 rubinius 解析器,它可以帮助你做你想做的事。

于 2011-06-18T17:00:53.390 回答