/** * {@inheritdoc} */ public function run(ContextInterface $context) { $files = $context->getFiles()->name('*.php'); if (0 === count($files)) { return TaskResult::createSkipped($this, $context); } $config = $this->getConfiguration(); $this->formatter->resetCounter(); $arguments = $this->processBuilder->createArgumentsForCommand('php-cs-fixer'); $arguments->add('--format=json'); $arguments->add('--dry-run'); $arguments->addOptionalArgument('--level=%s', $config['level']); $arguments->addOptionalArgument('--config=%s', $config['config']); $arguments->addOptionalArgument('--config-file=%s', $config['config_file']); $arguments->addOptionalArgument('--verbose', $config['verbose']); $arguments->addOptionalCommaSeparatedArgument('--fixers=%s', $config['fixers']); $arguments->add('fix'); if ($context instanceof RunContext && $config['config_file'] !== null) { return $this->runOnAllFiles($context, $arguments); } return $this->runOnChangedFiles($context, $arguments, $files); }
/** * @param ContextInterface $context * @param ProcessArgumentsCollection $arguments * @param FilesCollection $files * * @return TaskResult */ protected function runOnChangedFiles(ContextInterface $context, ProcessArgumentsCollection $arguments, FilesCollection $files) { $hasErrors = false; $messages = []; $suggestions = []; foreach ($files as $file) { $fileArguments = new ProcessArgumentsCollection($arguments->getValues()); $fileArguments->add($file); $processes[] = $this->processBuilder->buildProcess($fileArguments); } $this->processRunner->run($processes); foreach ($processes as $process) { if (!$process->isSuccessful()) { $hasErrors = true; $messages[] = $this->formatter->format($process); $suggestions[] = $this->formatter->formatSuggestion($process); } } if ($hasErrors) { $errorMessage = $this->formatter->formatErrorMessage($messages, $suggestions); return TaskResult::createFailed($this, $context, $errorMessage); } return TaskResult::createPassed($this, $context); }
function it_throws_exception_if_the_process_fails(ProcessBuilder $processBuilder, Process $process, ContextInterface $context, PhpCsFixerFormatter $formatter) { $formatter->resetCounter()->shouldBeCalled(); $arguments = new ProcessArgumentsCollection(); $processBuilder->createArgumentsForCommand('php-cs-fixer')->willReturn($arguments); $processBuilder->buildProcess(Argument::type('GrumPHP\\Collection\\ProcessArgumentsCollection'))->willReturn($process); $process->run()->shouldBeCalled(); $process->isSuccessful()->willReturn(false); $context->getFiles()->willReturn(new FilesCollection(array(new SplFileInfo('file1.php', '.', 'file1.php')))); $result = $this->run($context); $result->shouldBeAnInstanceOf('GrumPHP\\Runner\\TaskResultInterface'); $result->isPassed()->shouldBe(false); }