1

这个问题的标题回答了一切。

我希望有办法做到这一点,但我发现它很难。截至目前,这是我尝试过的。

macro statement {
    rule { "$x" } => {
        // @statement $x
    }
}

statement "my/qualified/path"

那没有用:*(

所以然后我尝试了这个。

macro statement {
    rule { "$x" } => {
        \\ @statement $x
    }
}

macro \ { rule { } => { / }

显然,正如我所想的那样,它会导致语法错误。有没有办法让 sweetjs 输出到评论?

4

1 回答 1

2

esprima/escodegen(sweet.js 建立在其之上)处理注释的方式是将它们作为属性添加到现有标记中;评论本身不是适当的标记。这意味着您不能“仅”输出评论,它必须附加到另一个令牌。因此,如果您只是在宏中的注释之后添加另一个标记,它将全部工作:

macro statement {
    rule { "$x" } => {
        // @statement $x
        42
    }
}

如果您在确定令牌的确切值时需要更大的灵活性,您还可以使用 case 宏和leadingComments令牌上的属性:

macro m {
    case {_ () } => {
        var x = makeValue(42, #{here});
        x.token.leadingComments = [{
            type: "Line",
            value: "hello, world"
        }];
        return withSyntax ($x = [x]) #{
            $x
        }
    }
}
于 2014-02-18T22:02:53.777 回答