2

Currently trying to understand 'analyzer' package, because I need to analyze and edit .dart file from another file (maybe it's a terrible idea).

I think I understand how to go deep into the childEntities tree. But can't understand how to search in it.

I mean, theoretically I can write a recursive search that will find me a class named "FindABetterSolution". But is there a built in method for that?

What I'm trying to do:

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: Ok, I think I found a way to search and replace nodes. But how to insert new node after/before another?

user64675
  • 482
  • 7
  • 25

1 Answers1

2

You can call file.accept() or file.visitChildren() with a RecursiveAstVisitor that implements visitClassDeclaration, visitMethodDeclaration, or visitFunctionDeclaration.

Collin Jackson
  • 110,240
  • 31
  • 221
  • 152