annotate vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 5fb285c0d0e3
children
rev   line source
Chris@13 1 <?php declare(strict_types=1);
Chris@13 2
Chris@13 3 namespace PhpParser;
Chris@13 4
Chris@13 5 use PhpParser\NodeVisitor\FindingVisitor;
Chris@13 6 use PhpParser\NodeVisitor\FirstFindingVisitor;
Chris@13 7
Chris@13 8 class NodeFinder
Chris@13 9 {
Chris@13 10 /**
Chris@13 11 * Find all nodes satisfying a filter callback.
Chris@13 12 *
Chris@13 13 * @param Node|Node[] $nodes Single node or array of nodes to search in
Chris@13 14 * @param callable $filter Filter callback: function(Node $node) : bool
Chris@13 15 *
Chris@13 16 * @return Node[] Found nodes satisfying the filter callback
Chris@13 17 */
Chris@13 18 public function find($nodes, callable $filter) : array {
Chris@13 19 if (!is_array($nodes)) {
Chris@13 20 $nodes = [$nodes];
Chris@13 21 }
Chris@13 22
Chris@13 23 $visitor = new FindingVisitor($filter);
Chris@13 24
Chris@13 25 $traverser = new NodeTraverser;
Chris@13 26 $traverser->addVisitor($visitor);
Chris@13 27 $traverser->traverse($nodes);
Chris@13 28
Chris@13 29 return $visitor->getFoundNodes();
Chris@13 30 }
Chris@13 31
Chris@13 32 /**
Chris@13 33 * Find all nodes that are instances of a certain class.
Chris@13 34 *
Chris@13 35 * @param Node|Node[] $nodes Single node or array of nodes to search in
Chris@13 36 * @param string $class Class name
Chris@13 37 *
Chris@13 38 * @return Node[] Found nodes (all instances of $class)
Chris@13 39 */
Chris@13 40 public function findInstanceOf($nodes, string $class) : array {
Chris@13 41 return $this->find($nodes, function ($node) use ($class) {
Chris@13 42 return $node instanceof $class;
Chris@13 43 });
Chris@13 44 }
Chris@13 45
Chris@13 46 /**
Chris@13 47 * Find first node satisfying a filter callback.
Chris@13 48 *
Chris@13 49 * @param Node|Node[] $nodes Single node or array of nodes to search in
Chris@13 50 * @param callable $filter Filter callback: function(Node $node) : bool
Chris@13 51 *
Chris@13 52 * @return null|Node Found node (or null if none found)
Chris@13 53 */
Chris@13 54 public function findFirst($nodes, callable $filter) {
Chris@13 55 if (!is_array($nodes)) {
Chris@13 56 $nodes = [$nodes];
Chris@13 57 }
Chris@13 58
Chris@13 59 $visitor = new FirstFindingVisitor($filter);
Chris@13 60
Chris@13 61 $traverser = new NodeTraverser;
Chris@13 62 $traverser->addVisitor($visitor);
Chris@13 63 $traverser->traverse($nodes);
Chris@13 64
Chris@13 65 return $visitor->getFoundNode();
Chris@13 66 }
Chris@13 67
Chris@13 68 /**
Chris@13 69 * Find first node that is an instance of a certain class.
Chris@13 70 *
Chris@13 71 * @param Node|Node[] $nodes Single node or array of nodes to search in
Chris@13 72 * @param string $class Class name
Chris@13 73 *
Chris@13 74 * @return null|Node Found node, which is an instance of $class (or null if none found)
Chris@13 75 */
Chris@13 76 public function findFirstInstanceOf($nodes, string $class) {
Chris@13 77 return $this->findFirst($nodes, function ($node) use ($class) {
Chris@13 78 return $node instanceof $class;
Chris@13 79 });
Chris@13 80 }
Chris@13 81 }