Gibt es etwas Ähnliches wie Nokogiri zum Parsen von Ruby-Code?
-
28-10-2019 - |
Frage
Nokogiri ist großartig.Ich kann Dinge wie #css('.bla')
tun, die das erste übereinstimmende Element zurückgeben.
Im Moment müssen wir den Ruby-Quellcode analysieren - alle Methoden innerhalb einer Klasse finden usw. Wir verwenden ruby_parser gem, aber alles, was es tut, ist Ihren Quellcode zu kämmen und S-Ausdrücke auszuspucken.Gibt es etwas wie Nokogiri für diese S-Ausdrücke, das Dinge wie "S-Ausdruck für die erste gefundene Methode namens 'foo' zurückgeben" kann?
Lösung
Das einzige, woran ich denken kann, ist Adam Sandersons SExpPath
-Bibliothek .
Andere Tipps
Obwohl ich Jörgs Antwort akzeptiere, weil sie vollständiger ist, habe ich am Ende etwas anderes entdeckt, das ich letztendlich verwendet habe.ruby_parser installiert einen abhängigen Edelstein mit dem Namen sexp_processor (in diesem Edelstein ist die Sexp
-Klasse tatsächlich definiert).Wenn Sie die Klassendokumente anzeigen, gibt es einige Methoden, die bei einfachen Ruby-Methoden hilfreich sindFinder.Hier ist ein Beispiel:
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
}
}
Ich weiß nichts über Edelsteine, nach denen Sie suchen, aber Sie können alle Methoden innerhalb einer Klasse mit instance_methods
finden:
class Foo
def bar
end
end
irb(main):005:0> Foo.instance_methods - Object.instance_methods
=> [:bar]
Sie können den Rubinius-Parser überprüfen, er kann Ihnen dabei helfen, das zu tun, was Sie wollen.