标签: escodegen

为什么 escodegen 和 esprima 在我的源代码上生成括号包装器?

我用来escodegen在我的声明中添加结束代码,如下所示。在leave方法中,我.toArray()在语句末尾附加了一个调用。

const esprima = require('esprima');
const estraverse = require('estraverse');
const escodegen = require('escodegen');

const ast = esprima.parse('db.find()');
let finished = false;
estraverse.traverse(ast, {
  leave: (node, parent) => {
    if (node.type === esprima.Syntax.ExpressionStatement && !finished) {
      finished = true;
      let statement = escodegen.generate(node);
      statement = `${statement.substring(0, statement.lastIndexOf(';'))}.toArray()`;
      const findAst = esprima.parse(statement);
      node.arguments = findAst.body[0].expression.arguments;
      node.callee = findAst.body[0].expression.callee;
      node.type = findAst.body[0].expression.type;
    }
  },
});

const generated = escodegen.generate(ast);
console.log('generated  code:', generated);
Run Code Online (Sandbox Code Playgroud)

上述代码的输出是:generated code: (db.find().toArray())。我不明白为什么它在我的源代码上加上括号。我的源代码有什么问题吗?

javascript esprima escodegen

5
推荐指数
1
解决办法
649
查看次数

标签 统计

escodegen ×1

esprima ×1

javascript ×1