这个问题的标题解决了这一切。
我希望有办法做到这一点,但我发现它很难。截至目前,这是我尝试过的。
macro statement {
rule { "$x" } => {
// @statement $x
}
}
statement "my/qualified/path"
这不起作用:*(
所以我试过这个。
macro statement {
rule { "$x" } => {
\\ @statement $x
}
}
macro \ { rule { } => { / }
显然,正如我所想的那样,它会导致语法错误。反正有没有让sweetjs输出到评论?
答案 0 :(得分:2)
esprima / escodegen(其中构建了sweet.js)处理注释的方式是将它们作为属性添加到现有标记中;评论本身并不是正确的令牌。这意味着您无法输出"只是"评论,它必须附加到另一个标记。因此,如果您只是在宏中的注释后添加另一个标记,它将全部起作用:
macro statement {
rule { "$x" } => {
// @statement $x
42
}
}
如果您需要更灵活地确定令牌的确切值,您还可以使用案例宏和令牌上的leadingComments
属性:
macro m {
case {_ () } => {
var x = makeValue(42, #{here});
x.token.leadingComments = [{
type: "Line",
value: "hello, world"
}];
return withSyntax ($x = [x]) #{
$x
}
}
}