Пример #1
0
 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));
     }
 }
Пример #2
0
 /**
  * @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;
 }
Пример #3
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()));
 }