使用sweet.js生成动态注释

Generate dynamic comments with sweet.js

本文关键字:动态 注释 sweet js 使用      更新时间:2023-09-26

如何转换以下代码片段:

let myVar: string = 'test';

转到以下输出:

// type {string}
var myVar = 'test';

使用sweetjs ?

我正在寻找一种方法来转换确切的第一个代码片段到第二个。包括// type {string}注释

我想用它来创建一个简单的DSL来生成一个代码与谷歌闭包编译器检查。

应该这样做:

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";