我被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
}
...
我显然错过了什么!任何帮助非常感谢。
- 富