2

如何转换以下代码段:

let myVar: string = 'test';

到以下输出:

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

使用sweetjs?

更新

我正在寻找一种将确切的第一个代码片段转换为第二个的方法。包括// type {string}评论。

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

4

2 回答 2

3

这应该这样做:

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';
于 2014-07-31T03:28:55.033 回答
0

我不确定你在找什么,但也许这个片段:

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";
于 2014-07-30T23:39:54.583 回答