Может ли Sweet.js выводить комментарии?
Название на этот вопрос отвечает на все вопросы.
Я надеялся, что был способ сделать это, но я нахожу это очень трудным. На данный момент это то, что я пытался.
macro statement {
rule { "$x" } => {
// @statement $x
}
}
statement "my/qualified/path"
Это не сработало:*(
Итак, я попробовал это.
macro statement {
rule { "$x" } => {
\\ @statement $x
}
}
macro \ { rule { } => { / }
Ясно, что, как я и думал, это приводит к синтаксической ошибке. Есть ли способ сделать sweetjs выводом на комментарии?
1 ответ
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
}
}
}