예제 #1
0
 /**
  * @inheritdoc
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $output->writeln('PHPMetrics by Jean-François Lépine <https://twitter.com/Halleck45>');
     $output->writeln('');
     // config
     $configFactory = new ConfigFactory();
     $config = $configFactory->factory($input);
     // files
     if (null === $config->getPath()->getBasePath()) {
         throw new \LogicException('Please provide a path to analyze');
     }
     // files to analyze
     $finder = new Finder($config->getPath()->getExtensions(), $config->getPath()->getExcludedDirs(), $config->getPath()->isFollowSymlinks() ? Finder::FOLLOW_SYMLINKS : null);
     // prepare plugins
     $repository = new Repository();
     foreach ($config->getExtensions()->getExtensions() as $filename) {
         if (!file_exists($filename) || !is_readable($filename)) {
             $output->writeln(sprintf('<error>Plugin %s skipped: not found</error>', $filename));
             continue;
         }
         $plugin = (require_once $filename);
         $repository->attach($plugin);
     }
     $extensionService = new ExtensionService($repository);
     // prepare structures
     $bounds = new Bounds();
     $collection = new ResultCollection();
     $aggregatedResults = new ResultCollection();
     // execute analyze
     $queueFactory = new QueueAnalyzeFactory($input, $output, $config, $extensionService);
     $queue = $queueFactory->factory($finder, $bounds);
     gc_disable();
     $queue->execute($collection, $aggregatedResults);
     gc_enable();
     $output->writeln('');
     // provide data to extensions
     if (($n = sizeof($repository->all())) > 0) {
         $output->writeln(sprintf('%d %s. Executing analyzis', $n, $n > 1 ? 'plugins are enabled' : 'plugin is enabled'));
         $extensionService->receive($config, $collection, $aggregatedResults, $bounds);
     }
     // generating reports
     $output->writeln("Generating reports...");
     $queueFactory = new QueueReportFactory($input, $output, $config, $extensionService);
     $queue = $queueFactory->factory($finder, $bounds);
     $queue->execute($collection, $aggregatedResults);
     $output->writeln('<info>Done</info>');
     // evaluation of success
     $rule = $config->getFailureCondition();
     if (null !== $rule) {
         $evaluator = new Evaluator($collection, $aggregatedResults, $bounds);
         $result = $evaluator->evaluate($rule);
         // fail if failure-condition is realized
         return $result->isValid() ? 1 : 0;
     }
     return 0;
 }
예제 #2
0
 /**
  * @inheritdoc
  */
 public function terminate(ResultCollection $collection, ResultCollection $groupedResults)
 {
     $this->output->write(str_pad("\r", 80, " "));
     $this->output->writeln('');
     // score
     $score = $collection->getScore();
     foreach ($score->all() as $name => $value) {
         $this->output->writeln(sprintf('%s %s', str_pad($name, 35, '.'), str_pad($value, 5, ' ', STR_PAD_LEFT) . ' / ' . Scoring::MAX));
     }
     $this->output->writeln('');
     // extensions
     foreach ($this->extensionsService->getRepository()->all() as $plugin) {
         $helper = $plugin->getReporterCliSummary();
         if (!$helper) {
             continue;
         }
         $this->output->write($helper->render());
     }
 }
 /**
  * @param ExtensionService $extensions
  * @return string
  */
 public function extensionsContent(ExtensionService $extensions)
 {
     $html = '';
     foreach ($extensions->getRepository()->all() as $extension) {
         $helper = $extension->getReporterHtmlSummary();
         if (!$helper) {
             continue;
         }
         $html .= $helper->renderHtml();
     }
     return $html;
 }