Поиск внутри scala 2.10 ASTs

Какой лучший способ рекурсивного поиска элемента в scala 2.10 AST?

Деревья могут быть результатом power.trees(code) или же mirror.mkToolBox().parseExpr(code)Редактировать В 2.10.0-RC1 parseExpr был переименован в parse,

Конкретный вариант использования, который у меня есть, заключается в извлечении кода метода из заданного кода класса / объекта по имени метода, но я предполагаю, что вопрос будет более актуальным для других, если сформулировать его более общим способом.

1 ответ

Решение

Возможно, вам стоит взглянуть на https://github.com/scala/scala/blob/2.10.x/src/reflect/scala/reflect/api/Trees.scala, особенно на классы Traverser, Transformer и методы замещения (Tree.substituteSymbols, Tree.substituteTypes или же Tree.substituteThis). Если вы хотите извлечь метод из дерева, вы можете использовать Traverser и переопределить traverse метод. В методе обхода вы проверяете, соответствует ли узел нужному методу. Если это так, вы сделали. Если нет, звоните super.traverse,

Другие вопросы по тегам