Existe algo semelhante ao Nokogiri para analisar o código Ruby?
-
28-10-2019 - |
Pergunta
Nokogiri é incrível.Posso fazer coisas como #css('.bla')
, que retornará o primeiro elemento correspondente.
No momento, precisamos fazer uma análise do código-fonte Ruby - encontrando todos os métodos dentro de uma classe, etc. Estamos usando o ruby_parser , mas tudo o que faz é pentear seu código-fonte e cuspir S-expressões.Existe algo como Nokogiri para essas expressões S que pode fazer coisas como "retornar a expressão S para o primeiro método encontrado com o nome 'foo'"?
Solução
A única coisa em que consigo pensar é na biblioteca SExpPath
de Adam Sanderson .
Outras dicas
Apesar de aceitar a resposta do Jörg por ser mais completa, acabei descobrindo outra coisa que acabei usando.ruby_parser instala uma gem dependente chamada sexp_processor (é nesta gem onde a classe Sexp
é realmente definida).Se você visualizar os documentos de classe , existem alguns métodos que ajudarão com o Ruby básicolocalizadores.Aqui está um exemplo:
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
}
}
Não sei nada sobre gem que você está procurando, mas você pode encontrar todos os métodos em uma classe usando instance_methods
:
class Foo
def bar
end
end
irb(main):005:0> Foo.instance_methods - Object.instance_methods
=> [:bar]
Você pode verificar o analisador rubinius, ele pode ajudá-lo a fazer o que você deseja.