protected function DrushHelpCommand::execute

8.0.x DrushHelpCommand.php protected DrushHelpCommand::execute(InputInterface $input, OutputInterface $output)
master DrushHelpCommand.php protected DrushHelpCommand::execute(InputInterface $input, OutputInterface $output)

File

lib/Drush/Psysh/DrushHelpCommand.php, line 63
Contains \Drush\Psysh\DrushCommand.

Namespace

Drush\Psysh

Class

DrushHelpCommand
Help command.

Code

protected function execute(InputInterface $input, OutputInterface $output) {
  if ($this->command !== NULL) {
    // Help for an individual command.
    $output->page($this->command->asText());
    $this->command = NULL;
  }
  elseif ($name = $input->getArgument('command_name')) {
    // Help for an individual command.
    $output->page($this->getApplication()->get($name)->asText());
  }
  else {
    $categories =[];

    // List available commands.
    $commands = $this->getApplication()->all();

    // Find the alignment width.
    $width = 0;
    foreach ($commands as $command) {
      $width = strlen($command->getName()) > $width ? strlen($command->getName()) : $width;
    }
    $width += 2;

    foreach ($commands as $name => $command) {
      if ($name !== $command->getName()) {
        continue;
      }

      if ($command->getAliases()) {
        $aliases = sprintf('  <comment>Aliases:</comment> %s', implode(', ', $command->getAliases()));
      }
      else {
        $aliases = '';
      }

      if ($command instanceof DrushCommand) {
        $category = (string) $command->getCategory();
      }
      else {
        $category = static::PSYSH_CATEGORY;
      }

      if (!isset($categories[$category])) {
        $categories[$category] =[];
      }

      $categories[$category][] = sprintf("    <info>%-${width}s</info> %s%s", $name, $command->getDescription(), $aliases);
    }

    $messages =[];

    foreach ($categories as $name => $category) {
      $messages[] = '';
      $messages[] = sprintf('<comment>%s</comment>', OutputFormatter::escape($name));
      foreach ($category as $message) {
        $messages[] = $message;
      }
    }

    $output->page($messages);
  }
}