Ich möchte eine Aussage vor jeder Funktionsdefinition hinzufügen, z.Durchqueren Sie einen neu ersetzten Knoten mit babel
function a() {
var b = function c() {};
}
wird
foo(function a() {
var b = foo(function c() {});
});
Ich versuche, dies mit dem folgenden Besucher mit babel zu erreichen:
var findFunctionVisitor = {
Function: function (path) {
// Traversing further leads to infinite loop as same node is found again
path.stop();
var node = path.node;
// Move every FunctionDeclaration to FunctionExpression
var newNode = t.functionExpression(
node.id,
node.params,
node.body,
node.generator,
node.async
);
path.replaceWith(
t.CallExpression(instrumentationCall, [newNode])
)
// traverse the part in newNode.body
}
};
Wenn ich die neu eingefügte FunctionExpression gefunden wird eine andere den Pfad nicht stoppen Zeit, die zu unendlicher Rekursion führt, so ist der Stopp notwendig. Mein genaues Problem ist, dass ich nicht weiß, wie man das Traversieren von newNode.body
beginnt, das ich die inneren Funktionsanweisungen erhalten würde.
traverse(newNode, findFunctionVisitor, path.scope, path);
Das dritte Argument ist ein Rahmen, und die sechste ist ein Elternteil Pfad: