Наследование: extends PhpParser\NodeTraverser
Пример #1
0
 /**
  * @param ContextInterface $context
  *
  * @return FileContext
  */
 public function checkContext(ContextInterface $context)
 {
     try {
         $parsedStatements = $this->parser->parse($context->getCheckedCode());
         $this->traverser->traverse($parsedStatements, $context, $this->lexer->getTokens());
     } catch (\Exception $e) {
         $context->addError(new CheckError($e->getMessage()));
     } catch (\ParseException $e) {
         $context->addError(new CheckError($e->getMessage(), $e->getLine()));
     }
 }
Пример #2
0
 /**
  * @param OutputInterface $output
  * @return \Pimple
  */
 public function buildContainer(OutputInterface $output)
 {
     $container = new \Pimple();
     $container['lexer'] = $container->share(function () {
         return new ExtendedLexer(array('usedAttributes' => array('comments', 'startLine', 'endLine', 'startTokenPos', 'endTokenPos')));
     });
     $container['parser'] = $container->share(function ($c) {
         return new Parser($c['lexer']);
     });
     $visitors = $this->checkerVisitors;
     foreach ($visitors as $visitorServiceName => $visitorClass) {
         $container[$visitorServiceName] = $container->share(function () use($visitorClass) {
             return new $visitorClass();
         });
     }
     $container['traverser'] = $container->share(function ($c) use($visitors) {
         $traverser = new Traverser();
         foreach (array_keys($visitors) as $visitorServiceName) {
             $traverser->addVisitor($c[$visitorServiceName]);
         }
         return $traverser;
     });
     $container['contextChecker'] = $container->share(function ($c) {
         return new ContextChecker($c['parser'], $c['lexer'], $c['traverser']);
     });
     $container['output'] = $container->share(function () use($output) {
         return new CLIOutputBridge($output);
     });
     $container['nodePrinter'] = $container->share(function () {
         return new StandardPrettyPrinter();
     });
     $container['resultPrinter'] = $container->share(function ($c) {
         return new CLIResultPrinter($c['output'], $c['nodePrinter'], $c['nodeStatementsRemover']);
     });
     $container['pathChecker'] = $container->share(function ($c) {
         return new PathChecker($c['contextChecker'], $c['fileContextFactory'], $c['resultPrinter']);
     });
     $container['nodeStatementsRemover'] = $container->share(function () {
         return new NodeStatementsRemover();
     });
     $container['fileContextFactory'] = $container->share(function () {
         return new FileContextFactory();
     });
     return $container;
 }
Пример #3
0
 /**
  * @param OutputInterface $output
  * @param int             $intSize
  *
  * @return Container
  */
 public function buildContainer(OutputInterface $output, $intSize)
 {
     $this->checkerVisitors[static::BITWISE_SHIFT_VISITOR_ID]['arguments'][] = $intSize;
     $container = new Container();
     $container['lexer'] = function () {
         return new ExtendedLexer(array('usedAttributes' => array('startLine', 'endLine', 'startTokenPos', 'endTokenPos')));
     };
     $container['parser'] = function ($c) {
         return new Parser($c['lexer']);
     };
     $this->addVisitors($container);
     $visitors = $this->checkerVisitors;
     $container['traverser'] = function () {
         $traverser = new Traverser(false);
         // Resolve fully qualified name (class, interface, function, etc) to ease some process
         $traverser->addVisitor(new NameResolver());
         return $traverser;
     };
     $container['nodeVisitorResolver'] = function ($c) use($visitors) {
         $visitorInstances = array();
         foreach (array_keys($visitors) as $visitorServiceName) {
             $visitorInstances[] = $c[$visitorServiceName];
         }
         return new Resolver($visitorInstances);
     };
     $container['nodeAnalyzer.functionAnalyzer'] = function () {
         return new FunctionAnalyzer();
     };
     $container['contextChecker'] = function ($c) {
         return new ContextChecker($c['parser'], $c['lexer'], $c['traverser']);
     };
     $container['output'] = function () use($output) {
         return new CLIOutputBridge($output);
     };
     $container['nodePrinter'] = function () {
         return new StandardPrettyPrinter();
     };
     $container['resultPrinter'] = function ($c) {
         return new CLIResultPrinter($c['output'], $c['nodePrinter'], $c['nodeStatementsRemover']);
     };
     $container['pathChecker'] = function ($c) {
         return new PathChecker($c['contextChecker'], $c['resultPrinter']);
     };
     $container['nodeStatementsRemover'] = function () {
         return new NodeStatementsRemover();
     };
     $container['pathTraversableFactory'] = function ($c) {
         return new PathTraversableFactory($c['excludedPathCanonicalizer']);
     };
     $container['pathCheckExecutor'] = function ($c) {
         return new PathCheckExecutor($c['pathTraversableFactory'], $c['pathChecker'], $c['traverser'], $c['nodeVisitorResolver']);
     };
     $container['excludedPathCanonicalizer'] = function ($c) {
         return new ExcludedPathCanonicalizer($c['pathHelper']);
     };
     $container['osDetector'] = function () {
         return new OSDetector();
     };
     $container['pathHelperFactory'] = function ($c) {
         return new PathHelperFactory($c['osDetector']);
     };
     $container['pathHelper'] = function ($c) {
         /** @var PathHelperFactory $pathHelperFactory */
         $pathHelperFactory = $c['pathHelperFactory'];
         return $pathHelperFactory->createPathHelper();
     };
     $container['regExpParser'] = function () {
         return new RegExpParser();
     };
     return $container;
 }
Пример #4
0
 /**
  * @param ContextInterface $context
  * @return FileContext
  */
 public function checkContext(ContextInterface $context)
 {
     $parsedStatements = $this->parser->parse($context->getCheckedCode());
     $this->traverser->traverse($parsedStatements, $context, $this->lexer->getTokens());
 }