Как получить код построчно в 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;

Вы не просили точного преобразования, поэтому я просто привел пример, который трансформировал каждую строку.

Но вы должны заметить, что преимущество абстрактного синтаксического дерева состоит в том, что вам не нужно идти построчно. Если вы в состоянии указать, какую трансформацию вы ищете, вполне вероятно, что сообщество может предложить вам лучшее решение, чем построчное зацикливание.

Другие вопросы по тегам