Может ли 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
        }
    }
}
Другие вопросы по тегам