Javascript codemod/transform包含块语句

Javascript codemod/transform包含块语句,javascript,abstract-syntax-tree,jstransform,jscodeshift,Javascript,Abstract Syntax Tree,Jstransform,Jscodeshift,我正在执行codemod/transform来更改代码中的if/return语句 如果(错误)做某事,我有很多,我需要重构这种行为 如何对此进行转换 我所拥有的: if (err) { return connection.rollback(function() { throw err; }); } 我想要的是: if (err){ return rollback(connection, err); } 到目前为止,我设法替换了节点。因此直接使用调用表达式: root.

我正在执行codemod/transform来更改代码中的
if
/
return
语句

如果(错误)做某事,我有很多
,我需要重构这种行为

如何对此进行转换

我所拥有的:

if (err) {
  return connection.rollback(function() {
    throw err;
  });
}
我想要的是:

if (err){
    return rollback(connection, err);
}
到目前为止,我设法替换了
节点。因此
直接使用
调用表达式

root.find(j.IfStatement).replaceWith(function (_if) {
  var fnCall = j.callExpression(j.identifier('rollback'), [
    j.identifier('connection'), 
    j.identifier('err')
  ]);

  _if.node.consequent = fnCall; 
  return _if.node;
});
…导致:

if (err)
  rollback(connection, err);
如何将
BlockStatement
return
也包含在内?这样做正确吗


活生生的例子好的,成功了!多好的工具啊

如果有更好的方法,请发表评论或发布新答案

因此,我缺少的是
if
语句中的block语句
{}
,以及其中的
return

所以我补充说:

var ret = j.returnStatement(fnCall);
var block = j.blockStatement([ret]);
_if.node.consequent = block;
结果如下: