Javascript codemod/transform包含块语句
我正在执行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.
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;
结果如下: