escodegen的逐字选项

时间:2016-12-28 01:09:22

标签: javascript abstract-syntax-tree esprima

我被escodegen逐字选项困扰了。它声称options.verbatim的值应该是一个字符串,它被视为一个属性名称,如果存在于任何表达式节点上(在我的测试中使用type =“Literal”),将使用该属性的值而不是无论escodegen为该节点生成什么。

这是我的简短测试程序: ...

"use strict";

var esprima = require ("esprima");
var esgen = require ("escodegen");
var tr = require ("estraverse");
var util = require ("util");

var code = `
var x;
while (x) {
doSomething(x);
}
`;


var a = esprima.parse(code);
//console.log (util.inspect(a, {depth:null}));
//console.log (esgen .generate(a));


tr.traverse (a, {
enter: function (node, parent) {
var pre, post;
if (node.type === "BlockStatement") {
// want to wrap the statements within the block in html tags
pre = `<div class="block ${parent.type}">`;
post = `</div>`;
node.body.unshift (literal(pre));
node.body.push (literal(post));
} // if

function literal(_html) {
return {type: "Literal", value: 42, raw: _html};
} // literal

} // enter
});

//console.log (util.inspect(a, null, 4));
console.log (esgen.generate (a, {verbatim: "raw"}));

...

和输出: ...

var x;
while (x) {
    42
    doSomething(x);
    42
}

...

我显然错过了什么!任何帮助非常感谢。

- 富

0 个答案:

没有答案