protected function execute(InputInterface $in, OutputInterface $out) { $file = $in->getArgument('target'); if (!is_file($file) || !is_readable($file)) { $out->writeln(sprintf('<error>"%s" is not a valid file!</error>', $file)); return; } $tokenizer = $in->getOption('tokenizer'); if ($tokenizer === 'php') { $tokens = token_get_all(file_get_contents($file)); foreach ($tokens as $token) { if (is_array($token)) { $out->writeln(sprintf('%s(%s) "%s"', token_name($token[0]), $token[0], $token[1])); } else { $out->writeln('"' . $token . '"'); } } } elseif ($tokenizer === 'lib') { $lexer = ExtendedEmulativeLexer::createDefaultInstance(); $lexer->startLexing(file_get_contents($file)); $offset = 0; while ($id = $lexer->getNextToken()) { if (is_string($name = $this->libTokenToTokenName($id))) { $out->writeln($name . '(' . $lexer->getTokens()[$offset][0] . ') ' . $lexer->getTokens()[$offset][1]); } else { $out->writeln('Discarded token with id ' . $id); } $offset++; } } else { $out->writeln(sprintf('<error>"%s" is not a valid value for the tokenizer option</error>', $tokenizer)); } }
/** * @inheritdoc */ protected function execute(InputInterface $input, OutputInterface $output) { $file = $input->getArgument('file'); if (!is_file($file) || !is_readable($file)) { $output->writeln(sprintf('<error>"%s" is not a valid file.</error>', $file)); return 0x2; } $parser = new Parser(ExtendedEmulativeLexer::createDefaultInstance()); try { $stmts = $parser->parse(file_get_contents($file)); if ($stmts === null) { $output->writeln('The passed file appears to be emtpy. Ending program.'); return 2; } } catch (Error $error) { $output->writeln('<error>' . $error->getMessage() . ' in ' . realpath($file) . '</error>'); return 0x2; } if ($input->getOption('preventNameExpansion') !== true) { $traverser = new NodeTraverser(); $traverser->addVisitor(new NameResolver()); $stmts = $traverser->traverse($stmts); } if ($input->getOption('extensive')) { $depth = self::DEFAULT_XDEBUG_DEPTH; if ($hasXdebug = extension_loaded('xdebug')) { $depth = ini_get('xdebug.var_display_max_depth'); ini_set('xdebug.var_display_max_depth', intval($input->getOption('xdebugMaxExtensiveDepth'))); } var_dump($stmts); if ($hasXdebug) { ini_set('xdebug.var_display_max_depth', $depth); } } else { echo (new NodeDumper())->dump($stmts); } return 0; }
/** * Set a fallback parser as parser for this Analyser instance * * The used `Parser` object will use the `ExtendedEmulativeLexer`. * * @see ExtendedEmulativeLexer Used lexer */ private function initDefaultParser() { $this->setParser((new ParserFactory())->create(ParserFactory::PREFER_PHP7, ExtendedEmulativeLexer::createDefaultInstance())); }