annotate vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php @ 5:12f9dff5fda9 tip

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