public function testResolveRulesWithConfigAndOption() { $this->config->setRules(array('braces' => true, 'strict_comparison' => false)); $this->resolver->setOption('rules', 'blank_line_before_return'); $this->resolver->resolve(); $this->assertSameRules(array('blank_line_before_return' => true), $this->resolver->getRules()); }
/** * @see Command */ protected function execute(InputInterface $input, OutputInterface $output) { $verbosity = $output->getVerbosity(); $resolver = new ConfigurationResolver($this->defaultConfig, array('allow-risky' => $input->getOption('allow-risky'), 'config' => $input->getOption('config'), 'dry-run' => $input->getOption('dry-run'), 'rules' => $input->getOption('rules'), 'path' => $input->getArgument('path'), 'path-mode' => $input->getOption('path-mode'), 'progress' => OutputInterface::VERBOSITY_VERBOSE <= $verbosity && 'txt' === $input->getOption('format'), 'using-cache' => $input->getOption('using-cache'), 'cache-file' => $input->getOption('cache-file'), 'format' => $input->getOption('format'), 'diff' => $input->getOption('diff')), getcwd()); $reporter = $resolver->getReporter(); $stdErr = $output instanceof ConsoleOutputInterface ? $output->getErrorOutput() : ('txt' === $reporter->getFormat() ? $output : null); if (null !== $stdErr && extension_loaded('xdebug')) { $stdErr->writeln(sprintf($stdErr->isDecorated() ? '<bg=yellow;fg=black;>%s</>' : '%s', 'You are running php-cs-fixer with xdebug enabled. This has a major impact on runtime performance.')); } $configFile = $resolver->getConfigFile(); if (null !== $stdErr) { $stdErr->writeln(sprintf('Loaded config <comment>%s</comment>%s.', $resolver->getConfig()->getName(), null === $configFile ? '' : ' from "' . $configFile . '"')); } if (null !== $stdErr && $resolver->getUsingCache()) { $cacheFile = $resolver->getCacheFile(); if (is_file($cacheFile)) { $stdErr->writeln(sprintf('Using cache file "%s".', $cacheFile)); } } $showProgress = $resolver->getProgress(); $runner = new Runner($resolver->getFinder(), $resolver->getFixers(), $input->getOption('diff') ? new SebastianBergmannDiffer() : new NullDiffer(), $showProgress ? $this->eventDispatcher : null, $this->errorsManager, $resolver->getLinter(), $resolver->isDryRun(), $resolver->getCacheManager()); $progressOutput = $showProgress && $stdErr ? new ProcessOutput($stdErr, $this->eventDispatcher) : new NullOutput(); $this->stopwatch->start('fixFiles'); $changed = $runner->fix(); $this->stopwatch->stop('fixFiles'); $progressOutput->printLegend(); $fixEvent = $this->stopwatch->getEvent('fixFiles'); $reportSummary = new ReportSummary($changed, $fixEvent->getDuration(), $fixEvent->getMemory(), OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity(), $resolver->isDryRun(), $output->isDecorated()); if ($output->isDecorated()) { $output->write($reporter->generate($reportSummary)); } else { $output->write($reporter->generate($reportSummary), false, OutputInterface::OUTPUT_RAW); } $invalidErrors = $this->errorsManager->getInvalidErrors(); $exceptionErrors = $this->errorsManager->getExceptionErrors(); $lintErrors = $this->errorsManager->getLintErrors(); if (null !== $stdErr) { if (count($invalidErrors) > 0) { $this->listErrors($stdErr, 'linting before fixing', $invalidErrors); } if (count($exceptionErrors) > 0) { $this->listErrors($stdErr, 'fixing', $exceptionErrors); } if (count($lintErrors) > 0) { $this->listErrors($stdErr, 'linting after fixing', $lintErrors); } } return $this->calculateExitStatus($resolver->isDryRun(), count($changed) > 0, count($invalidErrors) > 0, count($exceptionErrors) > 0); }
/** * @see Command */ protected function execute(InputInterface $input, OutputInterface $output) { $stdErr = $output instanceof ConsoleOutputInterface ? $output->getErrorOutput() : null; if ($stdErr && extension_loaded('xdebug')) { $stdErr->writeln(sprintf($stdErr->isDecorated() ? '<bg=yellow;fg=black;>%s</>' : '%s', 'You are running php-cs-fixer with xdebug enabled. This has a major impact on runtime performance.')); } $verbosity = $output->getVerbosity(); $resolver = new ConfigurationResolver(); $resolver->setCwd(getcwd())->setDefaultConfig($this->defaultConfig)->setOptions(array('allow-risky' => $input->getOption('allow-risky'), 'config' => $input->getOption('config'), 'dry-run' => $input->getOption('dry-run'), 'rules' => $input->getOption('rules'), 'path' => $input->getArgument('path'), 'progress' => OutputInterface::VERBOSITY_VERBOSE <= $verbosity && 'txt' === $input->getOption('format'), 'using-cache' => $input->getOption('using-cache'), 'cache-file' => $input->getOption('cache-file'), 'format' => $input->getOption('format')))->resolve(); $config = $resolver->getConfig(); $configFile = $resolver->getConfigFile(); if ($configFile && 'txt' === $input->getOption('format')) { $output->writeln(sprintf('Loaded config from "%s"', $configFile)); } if ($config->usingLinter()) { try { $this->fixer->setLinter(new Linter($config->getPhpExecutable())); } catch (UnavailableLinterException $e) { if ($configFile && 'txt' === $input->getOption('format')) { $output->writeln('Unable to use linter, can not find PHP executable'); } } } $showProgress = $resolver->getProgress(); if ($showProgress) { $this->fixer->setEventDispatcher($this->eventDispatcher); $progressOutput = new ProcessOutput($this->eventDispatcher); } $this->stopwatch->start('fixFiles'); $changed = $this->fixer->fix($config, $resolver->isDryRun(), $input->getOption('diff')); $this->stopwatch->stop('fixFiles'); if ($showProgress) { $progressOutput->printLegend(); $this->fixer->setEventDispatcher(null); } $i = 1; switch ($resolver->getFormat()) { case 'txt': $fixerDetailLine = false; if (OutputInterface::VERBOSITY_VERBOSE <= $verbosity) { $fixerDetailLine = $output->isDecorated() ? ' (<comment>%s</comment>)' : ' %s'; } foreach ($changed as $file => $fixResult) { $output->write(sprintf('%4d) %s', $i++, $file)); if ($fixerDetailLine) { $output->write(sprintf($fixerDetailLine, implode(', ', $fixResult['appliedFixers']))); } if ($input->getOption('diff')) { $output->writeln(''); $output->writeln('<comment> ---------- begin diff ----------</comment>'); $output->writeln($fixResult['diff']); $output->writeln('<comment> ---------- end diff ----------</comment>'); } $output->writeln(''); } if (OutputInterface::VERBOSITY_DEBUG <= $verbosity) { $output->writeln('Fixing time per file:'); foreach ($this->stopwatch->getSectionEvents('fixFile') as $file => $event) { if ('__section__' === $file) { continue; } $output->writeln(sprintf('[%.3f s] %s', $event->getDuration() / 1000, $file)); } $output->writeln(''); } $fixEvent = $this->stopwatch->getEvent('fixFiles'); $output->writeln(sprintf('%s all files in %.3f seconds, %.3f MB memory used', $input->getOption('dry-run') ? 'Checked' : 'Fixed', $fixEvent->getDuration() / 1000, $fixEvent->getMemory() / 1024 / 1024)); break; case 'xml': $dom = new \DOMDocument('1.0', 'UTF-8'); // new nodes should be added to this or existing children $root = $dom->createElement('report'); $dom->appendChild($root); $filesXML = $dom->createElement('files'); $root->appendChild($filesXML); foreach ($changed as $file => $fixResult) { $fileXML = $dom->createElement('file'); $fileXML->setAttribute('id', $i++); $fileXML->setAttribute('name', $file); $filesXML->appendChild($fileXML); if (OutputInterface::VERBOSITY_VERBOSE <= $verbosity) { $appliedFixersXML = $dom->createElement('applied_fixers'); $fileXML->appendChild($appliedFixersXML); foreach ($fixResult['appliedFixers'] as $appliedFixer) { $appliedFixerXML = $dom->createElement('applied_fixer'); $appliedFixerXML->setAttribute('name', $appliedFixer); $appliedFixersXML->appendChild($appliedFixerXML); } } if ($input->getOption('diff')) { $diffXML = $dom->createElement('diff'); $diffXML->appendChild($dom->createCDATASection($fixResult['diff'])); $fileXML->appendChild($diffXML); } } $fixEvent = $this->stopwatch->getEvent('fixFiles'); $timeXML = $dom->createElement('time'); $memoryXML = $dom->createElement('memory'); $root->appendChild($timeXML); $root->appendChild($memoryXML); $memoryXML->setAttribute('value', round($fixEvent->getMemory() / 1024 / 1024, 3)); $memoryXML->setAttribute('unit', 'MB'); $timeXML->setAttribute('unit', 's'); $timeTotalXML = $dom->createElement('total'); $timeTotalXML->setAttribute('value', round($fixEvent->getDuration() / 1000, 3)); $timeXML->appendChild($timeTotalXML); if (OutputInterface::VERBOSITY_DEBUG <= $verbosity) { $timeFilesXML = $dom->createElement('files'); $timeXML->appendChild($timeFilesXML); $eventCounter = 1; foreach ($this->stopwatch->getSectionEvents('fixFile') as $file => $event) { if ('__section__' === $file) { continue; } $timeFileXML = $dom->createElement('file'); $timeFilesXML->appendChild($timeFileXML); $timeFileXML->setAttribute('id', $eventCounter++); $timeFileXML->setAttribute('name', $file); $timeFileXML->setAttribute('value', round($event->getDuration() / 1000, 3)); } } $dom->formatOutput = true; $output->write($dom->saveXML()); break; case 'json': $jFiles = array(); foreach ($changed as $file => $fixResult) { $jfile = array('name' => $file); if (OutputInterface::VERBOSITY_VERBOSE <= $verbosity) { $jfile['appliedFixers'] = $fixResult['appliedFixers']; } if ($input->getOption('diff')) { $jfile['diff'] = $fixResult['diff']; } $jFiles[] = $jfile; } $fixEvent = $this->stopwatch->getEvent('fixFiles'); $json = array('files' => $jFiles, 'memory' => round($fixEvent->getMemory() / 1024 / 1024, 3), 'time' => array('total' => round($fixEvent->getDuration() / 1000, 3))); if (OutputInterface::VERBOSITY_DEBUG <= $verbosity) { $jFileTime = array(); foreach ($this->stopwatch->getSectionEvents('fixFile') as $file => $event) { if ('__section__' === $file) { continue; } $jFileTime[$file] = round($event->getDuration() / 1000, 3); } $json['time']['files'] = $jFileTime; } $output->write(json_encode($json)); break; } $invalidErrors = $this->errorsManager->getInvalidErrors(); if (!empty($invalidErrors)) { $this->listErrors($output, 'linting before fixing', $invalidErrors); } $exceptionErrors = $this->errorsManager->getExceptionErrors(); if (!empty($exceptionErrors)) { $this->listErrors($output, 'fixing', $exceptionErrors); } $lintErrors = $this->errorsManager->getLintErrors(); if (!empty($lintErrors)) { $this->listErrors($output, 'linting after fixing', $lintErrors); } $exitStatus = 0; if ($resolver->isDryRun()) { if (!empty($invalidErrors)) { $exitStatus |= self::EXIT_STATUS_FLAG_HAS_INVALID_FILES; } if (!empty($changed)) { $exitStatus |= self::EXIT_STATUS_FLAG_HAS_CHANGED_FILES; } } return $exitStatus; }
/** * Use php cs fixer to have a nice formatting of generated files * * @param string $directory * * @return array|void */ protected function fix($directory) { if (!class_exists('PhpCsFixer\\Config')) { return; } /** @var Config $fixerConfig */ $fixerConfig = $this->fixerConfig; if (null === $fixerConfig) { $fixerConfig = Config::create()->setRiskyAllowed(true)->setRules(array('@Symfony' => true, 'simplified_null_return' => false, 'concat_without_spaces' => false, 'double_arrow_multiline_whitespaces' => false, 'unalign_equals' => false, 'unalign_double_arrow' => false, 'align_double_arrow' => true, 'align_equals' => true, 'concat_with_spaces' => true, 'ordered_imports' => true, 'phpdoc_order' => true, 'short_array_syntax' => true)); $resolver = new ConfigurationResolver(); $resolver->setDefaultConfig($fixerConfig); $resolver->resolve(); } $finder = new Finder(); $finder->in($directory); $fixerConfig->finder($finder); $fixer = new Fixer(); return $fixer->fix($fixerConfig); }
/** * @see Command */ protected function execute(InputInterface $input, OutputInterface $output) { $verbosity = $output->getVerbosity(); $resolver = new ConfigurationResolver(); $resolver->setCwd(getcwd())->setDefaultConfig($this->defaultConfig)->setOptions(array('allow-risky' => $input->getOption('allow-risky'), 'config' => $input->getOption('config'), 'dry-run' => $input->getOption('dry-run'), 'rules' => $input->getOption('rules'), 'path' => $input->getArgument('path'), 'path-mode' => $input->getOption('path-mode'), 'progress' => OutputInterface::VERBOSITY_VERBOSE <= $verbosity && 'txt' === $input->getOption('format'), 'using-cache' => $input->getOption('using-cache'), 'cache-file' => $input->getOption('cache-file'), 'format' => $input->getOption('format')))->resolve(); $reporter = ReporterFactory::create()->registerBuiltInReporters()->getReporter($resolver->getFormat()); $stdErr = $output instanceof ConsoleOutputInterface ? $output->getErrorOutput() : ('txt' === $reporter->getFormat() ? $output : null); if (null !== $stdErr && extension_loaded('xdebug')) { $stdErr->writeln(sprintf($stdErr->isDecorated() ? '<bg=yellow;fg=black;>%s</>' : '%s', 'You are running php-cs-fixer with xdebug enabled. This has a major impact on runtime performance.')); } $config = $resolver->getConfig(); $configFile = $resolver->getConfigFile(); if (null !== $stdErr && $configFile) { $stdErr->writeln(sprintf('Loaded config from "%s".', $configFile)); } $linter = new NullLinter(); if ($config->usingLinter()) { try { $linter = new Linter($config->getPhpExecutable()); } catch (UnavailableLinterException $e) { if (null !== $stdErr && $configFile) { $stdErr->writeln('Unable to use linter, can not find PHP executable.'); } } } if (null !== $stdErr && $config->usingCache()) { $cacheFile = $config->getCacheFile(); if (is_file($cacheFile)) { $stdErr->writeln(sprintf('Using cache file "%s".', $cacheFile)); } } $showProgress = $resolver->getProgress(); $runner = new Runner($config, $input->getOption('diff') ? new SebastianBergmannDiffer() : new NullDiffer(), $showProgress ? $this->eventDispatcher : null, $this->errorsManager, $linter, $resolver->isDryRun()); $progressOutput = $showProgress && $stdErr ? new ProcessOutput($stdErr, $this->eventDispatcher) : new NullOutput(); $this->stopwatch->start('fixFiles'); $changed = $runner->fix(); $this->stopwatch->stop('fixFiles'); $progressOutput->printLegend(); $fixEvent = $this->stopwatch->getEvent('fixFiles'); $reportSummary = ReportSummary::create()->setChanged($changed)->setAddAppliedFixers(OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity())->setIsDecoratedOutput($output->isDecorated())->setIsDryRun($resolver->isDryRun())->setMemory($fixEvent->getMemory())->setTime($fixEvent->getDuration()); $output->write($reporter->generate($reportSummary)); $invalidErrors = $this->errorsManager->getInvalidErrors(); $exceptionErrors = $this->errorsManager->getExceptionErrors(); $lintErrors = $this->errorsManager->getLintErrors(); if (null !== $stdErr) { if (count($invalidErrors) > 0) { $this->listErrors($stdErr, 'linting before fixing', $invalidErrors); } if (count($exceptionErrors) > 0) { $this->listErrors($stdErr, 'fixing', $exceptionErrors); } if (count($lintErrors) > 0) { $this->listErrors($stdErr, 'linting after fixing', $lintErrors); } } return $this->calculateExitStatus($resolver->isDryRun(), count($changed) > 0, count($invalidErrors) > 0, count($exceptionErrors) > 0); }