jscodeshift - 如何在块语句的开头插入调用表达式

jscodeshift - How to insert a call expression at the beginning of a blockstatement

我正在研究 AST。我现在的目标是为文件中的每个块语句添加一个标识符。但是 ast explorer 抛出一个我无法破译的错误。

function foo() {
   console.log('bar');
}

在mod

之后
function foo() {
   baz
   console.log('bar');
}

AST

如何使用 jscodeshift 添加这样的东西。

有两件事你需要注意

  • 块语句由一组语句组成。您想要添加到该数组。
  • 您不能将裸表达式(例如标识符)插入该数组。您实际上必须创建一个 ExpressionStatement.

以下方法可行:

root
  .find(j.BlockStatement)
  .forEach((path) => {
    path.get('body').value.unshift(j.expressionStatement(j.identifier('bar')));
  });