annotate vendor/psy/psysh/src/Psy/CodeCleaner/LegacyEmptyPass.php @ 7:848c88cfe644

More layout
author Chris Cannam
date Fri, 05 Jan 2018 13:59:44 +0000
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of Psy Shell.
Chris@0 5 *
Chris@0 6 * (c) 2012-2017 Justin Hileman
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Psy\CodeCleaner;
Chris@0 13
Chris@0 14 use PhpParser\Node;
Chris@0 15 use PhpParser\Node\Expr\Empty_;
Chris@0 16 use PhpParser\Node\Expr\Variable;
Chris@0 17 use Psy\Exception\ParseErrorException;
Chris@0 18
Chris@0 19 /**
Chris@0 20 * Validate that the user did not call the language construct `empty()` on a
Chris@0 21 * statement in PHP < 5.5.
Chris@0 22 */
Chris@0 23 class LegacyEmptyPass extends CodeCleanerPass
Chris@0 24 {
Chris@0 25 /**
Chris@0 26 * Validate use of empty in PHP < 5.5.
Chris@0 27 *
Chris@0 28 * @throws ParseErrorException if the user used empty with anything but a variable
Chris@0 29 *
Chris@0 30 * @param Node $node
Chris@0 31 */
Chris@0 32 public function enterNode(Node $node)
Chris@0 33 {
Chris@0 34 if (version_compare(PHP_VERSION, '5.5', '>=')) {
Chris@0 35 return;
Chris@0 36 }
Chris@0 37
Chris@0 38 if (!$node instanceof Empty_) {
Chris@0 39 return;
Chris@0 40 }
Chris@0 41
Chris@0 42 if (!$node->expr instanceof Variable) {
Chris@0 43 $msg = sprintf('syntax error, unexpected %s', $this->getUnexpectedThing($node->expr));
Chris@0 44
Chris@0 45 throw new ParseErrorException($msg, $node->expr->getLine());
Chris@0 46 }
Chris@0 47 }
Chris@0 48
Chris@0 49 private function getUnexpectedThing(Node $node)
Chris@0 50 {
Chris@0 51 switch ($node->getType()) {
Chris@0 52 case 'Scalar_String':
Chris@0 53 case 'Scalar_LNumber':
Chris@0 54 case 'Scalar_DNumber':
Chris@0 55 return json_encode($node->value);
Chris@0 56
Chris@0 57 case 'Expr_ConstFetch':
Chris@0 58 return (string) $node->name;
Chris@0 59
Chris@0 60 default:
Chris@0 61 return $node->getType();
Chris@0 62 }
Chris@0 63 }
Chris@0 64 }