如何在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;
您没有要求进行精确的转换,所以我只是提供了一个变形每一行的示例。
但是您应该注意到抽象语法树的优点是您不需要逐行查看。如果您能够提供您正在寻找的转换,社区可能会为您提供比逐行循环更好的解决方案。
我是 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;
您没有要求进行精确的转换,所以我只是提供了一个变形每一行的示例。
但是您应该注意到抽象语法树的优点是您不需要逐行查看。如果您能够提供您正在寻找的转换,社区可能会为您提供比逐行循环更好的解决方案。