setDefaults([ 'jobs' => null, 'short_open_tag' => false, 'exclude' => [], 'ignore_patterns' => [], 'triggered_by' => ['php', 'phtml', 'php3', 'php4', 'php5'], ]); $resolver->setAllowedTypes('jobs', ['int', 'null']); $resolver->setAllowedTypes('short_open_tag', 'bool'); $resolver->setAllowedTypes('exclude', 'array'); $resolver->addAllowedTypes('ignore_patterns', ['array']); $resolver->setAllowedTypes('triggered_by', 'array'); return $resolver; } public function canRunInContext(ContextInterface $context): bool { return $context instanceof RunContext || $context instanceof GitPreCommitContext; } public function run(ContextInterface $context): TaskResultInterface { $config = $this->getConfig()->getOptions(); $files = $context ->getFiles() ->notPaths($config['ignore_patterns']) ->extensions($config['triggered_by']); if ($files->isEmpty()) { return TaskResult::createSkipped($this, $context); } $arguments = $this->processBuilder->createArgumentsForCommand('parallel-lint'); $arguments->add('--no-colors'); $arguments->addOptionalArgumentWithSeparatedValue('-j', $config['jobs']); $arguments->addOptionalArgument('--short', $config['short_open_tag']); $arguments->addArgumentArrayWithSeparatedValue('--exclude', $config['exclude']); $arguments->add('--stdin'); $inputStream = new InputStream(); $process = $this->processBuilder->buildProcess($arguments); $process->setInput($inputStream); $process->start(); $inputStream->write(\implode(PHP_EOL, $files->toArray())); $inputStream->close(); $process->wait(); if (!$process->isSuccessful()) { return TaskResult::createFailed($this, $context, $this->formatter->format($process)); } return TaskResult::createPassed($this, $context); } }