Как предотвратить включение функции T в анонимную функцию с помощью babel? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть следующий файл javascript для анализа с babel:

b(a)

У меня есть следующий файл javascript, который я использую для обнаружения вызовов функций в предыдущем файле и замены их функцией, которая получает предыдущую функцию и ее параметры для ее вызова.

const t = require("babel-types")

module.exports = function (babel) {
    return {
        visitor: WrapperVisitor
    }
}
const WrapperVisitor = {
    Program(path) {
        path.traverse(CallVisitor)
    }
}
let cont = 0
const CallVisitor = {
    CallExpression(path) {
        if (path.node.callee.name){
            let cam = path.node.arguments.slice()
            path.node.arguments.push(t.identifier(path.node.callee.name))
            path.replaceWith(
                t.functionDeclaration(
                    t.identifier("T"),
                    path.node.arguments,
                    t.blockStatement(
                        [
                          t.expressionStatement(
                              t.callExpression(
                                  t.memberExpression(
                                      t.identifier(path.node.callee.name),
                                      t.identifier("apply")
                                  ),
                                cam
                              )
                          )
                        ]
                    )
                )
            )
        }
    }
}

Создает следующий выходной файл

(function () {
  function T(a, b) {
    return b.apply(a);
  }
})();

Вопрос заключается в следующем: как предотвратить перенос функции T в анонимную функцию и в эти скобки, и где я могу найти дополнительную документацию по объекту path?

...