В обычном тексте программы есть 2 части: та что обрабатывается интерпретатором и та что игнорируется интерпретатором. Вторую часть можно отбросить и не рассматривать. Назовём её комментариями. Остаётся часть, которую интерпретатор языка учитывает, и которая влияет на результат. Назовём её кодом.
Для выражения требуемого функционала ЯП предлагает программисту набор синтаксических и семантических возможностей, так сказать, из коробки. Предполагается, что то, что потребуется программисту, язык уже умеет. То есть, если программисту нужны фишки X, Y, Z - он описывает их с помощью встроенных в язык синтаксиса и семантики, так как в языке уже есть X, Y, Z.
Но что делать, если программисту нужна возможность W, которой нет в языке? Иногда W можно выразить через X, Y, Z. Но если нет - тогда остаётся либо отказаться от W, либо сменить язык.
Ты же пытаешься поступить четвёртым способом - создать новый язык, DSL для инлайн-тестинга. Это метапрограммирование. Но встроенные возможности метапрограммирования в php слабы, поэтому ты используешься DSL, а не eDSL, как это возможно в нормальных языках, и кладёшь код в комментарий. Сама по себе попытка засунуть функционал в комментарии говорит о том, что язык не подходит для задачи. Это касается не только инлайн-тестинга, а вообще, любой фичи. Потому что когда ты изобретаешь DSL - тебе под него нужен парсер-интерпретатор, а значит тесты для него. В итоге ты пишешь тесты для тестов. Ну как бы эээ…
И ещё, зачем ты изобретаешь велосипед, в смысле новый синтаксис описания тестов? Хочется ассертов - используй натив пхп
/**
* @param mixed $a
* @param callable $b
* @param array $c
* @assert %function%(2,2,array(2)) === 2
*/
function exampleTestFunction($a, $b, array $c)
{
return $a + $b + $c[0];
}
заменяешь %function% и пихаешь в assert
не всё полезно, что в swap полезло