stop() public static method

Break visitor
public static stop ( ) : VisitorOperation
return VisitorOperation
Example #1
0
 public function testAllowsEarlyExitWhileVisiting()
 {
     $visited = [];
     $ast = Parser::parse('{ a, b { x }, c }');
     Visitor::visit($ast, ['enter' => function (Node $node) use(&$visited) {
         $visited[] = ['enter', $node->kind, isset($node->value) ? $node->value : null];
         if ($node instanceof Name && $node->value === 'x') {
             return Visitor::stop();
         }
     }, 'leave' => function (Node $node) use(&$visited) {
         $visited[] = ['leave', $node->kind, isset($node->value) ? $node->value : null];
     }]);
     $expected = [['enter', 'Document', null], ['enter', 'OperationDefinition', null], ['enter', 'SelectionSet', null], ['enter', 'Field', null], ['enter', 'Name', 'a'], ['leave', 'Name', 'a'], ['leave', 'Field', null], ['enter', 'Field', null], ['enter', 'Name', 'b'], ['leave', 'Name', 'b'], ['enter', 'SelectionSet', null], ['enter', 'Field', null], ['enter', 'Name', 'x']];
     $this->assertEquals($expected, $visited);
 }
Example #2
0
 /**
  * @it allows early exit from leaving different points
  */
 public function testAllowsEarlyExitFromLeavingDifferentPoints()
 {
     $visited = [];
     $ast = Parser::parse('{ a { y }, b { x } }');
     Visitor::visit($ast, Visitor::visitInParallel([['enter' => function ($node) use(&$visited) {
         $visited[] = ['break-a', 'enter', $node->kind, isset($node->value) ? $node->value : null];
     }, 'leave' => function ($node) use(&$visited) {
         $visited[] = ['break-a', 'leave', $node->kind, isset($node->value) ? $node->value : null];
         if ($node->kind === 'Field' && isset($node->name->value) && $node->name->value === 'a') {
             return Visitor::stop();
         }
     }], ['enter' => function ($node) use(&$visited) {
         $visited[] = ['break-b', 'enter', $node->kind, isset($node->value) ? $node->value : null];
     }, 'leave' => function ($node) use(&$visited) {
         $visited[] = ['break-b', 'leave', $node->kind, isset($node->value) ? $node->value : null];
         if ($node->kind === 'Field' && isset($node->name->value) && $node->name->value === 'b') {
             return Visitor::stop();
         }
     }]]));
     $this->assertEquals([['break-a', 'enter', 'Document', null], ['break-b', 'enter', 'Document', null], ['break-a', 'enter', 'OperationDefinition', null], ['break-b', 'enter', 'OperationDefinition', null], ['break-a', 'enter', 'SelectionSet', null], ['break-b', 'enter', 'SelectionSet', null], ['break-a', 'enter', 'Field', null], ['break-b', 'enter', 'Field', null], ['break-a', 'enter', 'Name', 'a'], ['break-b', 'enter', 'Name', 'a'], ['break-a', 'leave', 'Name', 'a'], ['break-b', 'leave', 'Name', 'a'], ['break-a', 'enter', 'SelectionSet', null], ['break-b', 'enter', 'SelectionSet', null], ['break-a', 'enter', 'Field', null], ['break-b', 'enter', 'Field', null], ['break-a', 'enter', 'Name', 'y'], ['break-b', 'enter', 'Name', 'y'], ['break-a', 'leave', 'Name', 'y'], ['break-b', 'leave', 'Name', 'y'], ['break-a', 'leave', 'Field', null], ['break-b', 'leave', 'Field', null], ['break-a', 'leave', 'SelectionSet', null], ['break-b', 'leave', 'SelectionSet', null], ['break-a', 'leave', 'Field', null], ['break-b', 'leave', 'Field', null], ['break-b', 'enter', 'Field', null], ['break-b', 'enter', 'Name', 'b'], ['break-b', 'leave', 'Name', 'b'], ['break-b', 'enter', 'SelectionSet', null], ['break-b', 'enter', 'Field', null], ['break-b', 'enter', 'Name', 'x'], ['break-b', 'leave', 'Name', 'x'], ['break-b', 'leave', 'Field', null], ['break-b', 'leave', 'SelectionSet', null], ['break-b', 'leave', 'Field', null]], $visited);
 }