如何在jscodeshift中逐行获取代码

How to get code line by line in jscodeshift

我是 jscodeshift 的新手。是否可以逐行获取代码。

export default function transformer(file, api) {
  const j = api.jscodeshift;


  return j(file.source).forEach(p => {
    p.value.program.body.forEach(p => {
        console.log(p)
    });

  }).toSource();
}

但是这种方法的问题在于我无法将转换应用于变量 p 中获得的结果。例如。对于下面的输入

    var a = "hello";
    var b = "Whosebug";
    var c = a + b;

我需要逐行转换内容。是否可以在jscodeshift中逐行应用转换。

您可以使用 .get().node.program.body 并对其进行循环: http://astexplorer.net/#/gist/fea38e8a6837d227fd02cb1297824280/be3b1fb941ee3e6dfbe4eea86610a3ad48e2b511

这个:

const transformer = (file, api) => {
    const j = api.jscodeshift;
    const root = j(file.source);

    root.get().node.program.body.map((line) => {
        line.kind = "const";
    });
    return root.toSource();
};
export default transformer;

变换:

var a = "hello";
var b = "Whosebug";
var c = a + b;

收件人:

const a = "hello";
const b = "Whosebug";
const c = a + b;

您没有要求进行精确的转换,所以我只是提供了一个变形每一行的示例。

但是您应该注意到抽象语法树的优点是您不需要逐行查看。如果您能够提供您正在寻找的转换,社区可能会为您提供比逐行循环更好的解决方案。