我试图用sweet.js编写一个规则来捕获函数调用的表达式和参数。
下面是我当前的宏(无法匹配):
macro foo {
rule {
( $fn:expr ($args ...) )
} => {
$fn("stuff", $args ...) // pushes "stuff" to the beginning of the arguments
}
}以及一些投入和预期产出:
foo(somefn("bar"))应产出:
somefn("stuff", "bar")和
foo(console.log("bar"))应产出:
console.log("stuff", "bar")如能提供任何协助,将不胜感激。
发布于 2014-07-24 21:14:02
:expr模式类很贪婪,所以$fn:expr匹配所有的somefn("bar") (因为这是一个完整的表达式)。
在这种情况下,最简单的解决方案可能是使用省略号:
macro foo {
rule {
( $fn ... ($args ...) )
} => {
$fn ... ("stuff", $args ...) // pushes "stuff" to the beginning of the arguments
}
}https://stackoverflow.com/questions/24917129
复制相似问题