hasArgument('--help', $arguments)) { View::render('version', [ 'version' => version(), ]); View::render('usage'); foreach ($this->getContent() as $title => $options) { if ($title === 'Usage') { continue; } $this->output->writeln([ '', sprintf(' %s OPTIONS:', mb_strtoupper($title)), ]); foreach ($options as $option) { if (! array_key_exists('arg', $option)) { continue; } [ 'arg' => $argument, 'desc' => $description, ] = $option; $argument = $this->colorizeOptions($argument); View::render('components.two-column-detail', [ 'left' => $argument, 'right' => $description, ]); } } $this->output->write('', true); exit(0); } return $arguments; } /** * Colorizes the given string options. */ private function colorizeOptions(string $argument): string { $argument = (string) preg_replace('/(--\w+)/', '$1', $argument); return (string) preg_replace('/(-\w+)/', '$1', $argument); } /** * @return array> */ private function getContent(): array { // Access the PHPUnit help class's private const HELP $helpReflection = new \ReflectionClass(PHPUnitHelp::class); /** @var array> $content */ $content = $helpReflection->getConstant('HELP_TEXT'); $content['Configuration'] = [[ 'arg' => '--init', 'desc' => 'Initialise a standard Pest configuration', ]] + $content['Configuration']; $content['Code Coverage'] = [ [ 'arg' => '--coverage ', 'desc' => 'Generate code coverage report and output to standard output', ], [ 'arg' => '--coverage --min', 'desc' => 'Set the minimum required coverage percentage, and fail if not met', ], ] + $content['Code Coverage']; return $content; } }