Создавайте динамические комментарии с помощью sweet.js
Как я могу преобразовать следующий фрагмент:
let myVar: string = 'test';
К следующему выводу:
// type {string}
var myVar = 'test';
используя sweetjs?
ОБНОВИТЬ
Я ищу способ преобразовать точный первый фрагмент кода во второй. В том числе // type {string}
комментарий.
Я хочу использовать его для создания простого DSL, чтобы сгенерировать код для проверки с помощью компилятора Google Closure.
2 ответа
Решение
Это должно сделать это:
let let = macro {
case { _ $name $[:] $type = $init:expr } => {
var typeStr = unwrapSyntax(#{$type});
var varStx = makeKeyword("var", #{here});
varStx.token.leadingComments = [{
type: "Line",
value: " type {" + typeStr + "}"
}];
letstx $var = [varStx];
return #{
$var $name = $init
}
}
}
let myVar: string = 'test';
расширяется до:
// type {string}
var myVar = 'test';
Я не уверен, что вы ищете, но, возможно, этот фрагмент:
macro m {
case {_ () } => {
var x = makeValue(0, #{here});
x.token.leadingComments = [{
type: "Line",
value: " type {string}"
}];
return withSyntax ($x = [x]) #{
$x
}
}
}
m()
macro foo {
rule { $id = $init } => {
var $id = $init
}
rule { $init } => { var myVar = $init }
}
foo "test";
К сожалению, вы не можете выводить комментарии без токена.
ВЫХОД
// type {string}
0;
var myVar = 'test';
Также проверьте эту страницу в рубрике "Гигиена", около 3/4 страницы.
Надеюсь, это поможет.
ОБНОВИТЬ
Прочитайте некоторые статьи, в которых говорится, что простой макрос правил должен делать эту работу:
macro foo {
rule { $id = $init } => {
var $id = $init
}
rule { $init } => { var myVar = $init }
}
// type {string}
foo "test";