Захватите аргументы вызова функции с помощью sweet.js
Я пытаюсь написать правило для захвата выражения и аргументов вызова функции с помощью 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")
Будем очень благодарны любой помощи.
1 ответ
Решение
:expr
класс шаблона жадный так $fn:expr
соответствует всем somefn("bar")
(так как это целое выражение).
В этом случае, вероятно, самое простое решение - использовать эллипсы:
macro foo {
rule {
( $fn ... ($args ...) )
} => {
$fn ... ("stuff", $args ...) // pushes "stuff" to the beginning of the arguments
}
}