0

我正在尝试编写一个规则来捕获使用 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")

任何帮助将不胜感激。

4

1 回答 1

2

:expr模式类是贪婪的,所以匹配$fn:expr所有somefn("bar")(因为这是一个完整的表达式)。

在这种情况下,可能最简单的解决方案是使用省略号:

macro foo {
    rule {
        ( $fn ... ($args ...) )
    } => {
        $fn ... ("stuff", $args ...) // pushes "stuff" to the beginning of the arguments
    }
}
于 2014-07-24T21:14:02.403 回答