Пакет анализатора - Как выполнить рекурсивный поиск в результатах parseDartFile()

В настоящее время пытаюсь понять пакет 'analyzer', потому что мне нужно проанализировать и отредактировать файл.dart из другого файла (возможно, это ужасная идея).

Я думаю, что я понимаю, как углубиться в childEntities дерево. Но не могу понять, как искать в нем.

Я имею в виду, теоретически я могу написать рекурсивный поиск, который найдет мне класс с именем "FindABetterSolution". Но есть ли встроенный метод для этого?

Что я пытаюсь сделать:

var file = parseDartFile("test.dart");
file.childEntities.forEach((SyntacticEntity entity) {
  if(entity is AstNode) {
    //then it has its own child nodes which can be AstNode-s or Tokens.
  } else if(entity is Token) {
    Token token = entity;
    print("${token.lexeme} ${token.type} ${token.runtimeType} ${token.keyword}");
    //this will output "class KEYWORD KeywordToken CLASS" for "class" in "class MyClass {"
  }
});
//I need a way to find certain functions/classes/variables/methods e.t.c.
var myClassNode = file.searchClass("MyClass", abstract: false);
var myMethod = myClassNode.searchMethod("myMethod", static: true);
var globalFunction = file.searchFunction("myFunc", returns: "bool");

UPD: Ладно, думаю, я нашел способ поиска и замены узлов. Но как вставить новый узел после / перед другим?

1 ответ

Ты можешь позвонить file.accept() или же file.visitChildren() с RecursiveAstVisitor который реализует visitClassDeclaration, visitMethodDeclaration, или же visitFunctionDeclaration,

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