1

我被 escodegen verbatim 选项难住了。它声称 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
}

...

我显然错过了一些东西!非常感谢任何帮助。

- 富有的

4

0 回答 0