在解析Ruby代码时,是否有类似于Nokogiri的东西



Nokogiri太棒了。我可以执行类似#css('.bla')的操作,它将返回第一个匹配元素。

现在,我们需要对Ruby源代码进行一些解析,找到类中的所有方法等。我们使用的是Ruby_parser gem,但它所做的只是梳理源代码并吐出S表达式。对于这些S表达式,有没有像Nokogiri这样的东西可以做一些事情,比如"为找到的第一个名为"foo"的方法返回S表达式"?

我唯一能想到的就是Adam Sanderson的SExpPath库。

虽然我接受了Jörg的答案,因为它更完整,但我最终发现了其他我最终使用的东西。ruby_parser安装一个名为sex_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
  }
}

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

class Foo
  def bar
  end
end
irb(main):005:0> Foo.instance_methods - Object.instance_methods
=> [:bar]

您可以检查rubinius解析器,它可能会帮助您做您想做的事情。

相关内容

  • 没有找到相关文章

最新更新