Как получить код построчно в 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 = "stackru";
var c = a + b;
Мне нужно трансформировать контент построчно. Можно ли применить преобразование построчно в jscodeshift.
1 ответ
Ты можешь использовать .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 = "stackru";
var c = a + b;
Для того, чтобы:
const a = "hello";
const b = "stackru";
const c = a + b;
Вы не просили точного преобразования, поэтому я просто привел пример, который трансформировал каждую строку.
Но вы должны заметить, что преимущество абстрактного синтаксического дерева состоит в том, что вам не нужно идти построчно. Если вы в состоянии указать, какую трансформацию вы ищете, вполне вероятно, что сообщество может предложить вам лучшее решение, чем построчное зацикливание.