2

目前正在尝试了解“分析器”包,因为我需要从另一个文件分析和编辑 .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:好的,我想我找到了一种搜索和替换节点的方法。但是如何在另一个之后/之前插入新节点?

4

1 回答 1

2

您可以使用实现、或的file.accept()或来调用。file.visitChildren()RecursiveAstVisitorvisitClassDeclarationvisitMethodDeclarationvisitFunctionDeclaration

于 2017-06-15T17:41:49.473 回答