我正在尝试用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")
非常感谢任何协助。
答案 0 :(得分:2)
:expr
模式类是贪婪的,因此$fn:expr
匹配所有somefn("bar")
(因为那是整个表达式)。
在这种情况下,最简单的解决方案可能是使用省略号:
macro foo {
rule {
( $fn ... ($args ...) )
} => {
$fn ... ("stuff", $args ...) // pushes "stuff" to the beginning of the arguments
}
}