Время от времени мы вносим изменения, которые требуют от нас пересмотреть некоторые настройки и привести их в соответствие с ядром. Недавнее изменение заключалось в том, что определенный метод должен возвращать массив. Это легко указать в ядре, например:
Код: Выделить всё
class MyLibrary {
public function myMethod(): array {
...
}
}
Это заставило меня задуматься о поиске методов, которые этого не делают. t вернуть массив программно, и я наткнулся на этот драгоценный камень.
https://github.com/nikic/php-ast
Похоже, что я могу использовать его для чтения исходного кода класса, а затем посмотреть синтаксическое дерево, чтобы узнать, возвращает ли myMethod() значение. Особенно я ищу методы, которые просто ничего не возвращают.
Я попробовал это в качестве отправной точки:
Код: Выделить всё
use PhpParser\ParserFactory;
use PhpParser\{Node, NodeTraverser, NodeVisitorAbstract};
$code = file_get_contents('path/to/file.php');
$parser = (new ParserFactory())->createForNewestSupportedVersion();
$ast = $parser->parse($code);
$traverser = new NodeTraverser;
$traverser->addVisitor(new class extends NodeVisitorAbstract {
public function leaveNode(Node $node) {
dump($node);
readline();
echo "\n\n\n\n";
}
});
Код: Выделить всё
stmtsДокументация по библиотеке php-ast недостаточно подробная, чтобы помочь мне понять, как это сделать. Любые рекомендации приветствуются.
Подробнее здесь: https://stackoverflow.com/questions/793 ... rn-a-value
Мобильная версия