CommandCall: fix command name when AutoPrix or AutoDiscovery

2.x 2.7.0
Julien Rosset 9 months ago
parent 4ce251a8bc
commit ca6db43fed

@ -14,19 +14,49 @@ use Throwable;
*/ */
class BaseCommand extends Command { class BaseCommand extends Command {
/** /**
* Initialize the command * @return string|null The command default name
*
* @param string|null $name The command name, Null = class name
* @param string ...$aliases The command aliases
*/ */
public function __construct (?string $name = null, string ...$aliases) { public static function getDefaultName (): ?string {
if ($name === null) { $reflectionClass = new ReflectionClass(static::class);
$classShortName = (new ReflectionClass($this))->getShortName(); if (($name = parent::getDefaultName()) !== null) {
$name = mb_strtolower(mb_substr($classShortName, 0, 1)) . mb_substr($classShortName, 1); return $name;
} }
$classShortName = $reflectionClass->getShortName();
return mb_strtolower(mb_substr($classShortName, 0, 1)) . mb_substr($classShortName, 1);
}
/**
* @return string[] The command default aliases
*/
public static function getDefaultAliases (): array {
return [];
}
/**
* @return string|null The command default description
*/
public static function getDefaultDescription (): ?string {
return parent::getDefaultDescription();
}
/**
* @return bool Is the command hidden from command list by default ?
*/
public static function getDefaultHidden (): bool {
return false;
}
/**
* Initialize the command
*
* @param string|null $name The command name ; Null if the default one (cf. {@see static::getDefaultName()})
* @param string[]|string|null $aliases The command aliases ; Null if the default one (cf. {@see static::getDefaultAliases()})
* @param string|null $description The command description ; Null if the default one (cf. {@see static::getDefaultDescription()})
* @param bool|null $hidden Is the command hidden from command list ? Null if the default one (cf. {@see static::getDefaultHidden()})
*/
public function __construct (?string $name = null, $aliases = null, ?string $description = null, ?bool $hidden = null) {
parent::__construct($name); parent::__construct($name);
$this->setAliases($aliases); $this->setAliases(is_string($aliases) ? [$aliases] : $aliases ?? static::getDefaultAliases());
$this->setDescription($description ?? $this->getDescription());
$this->setHidden($hidden ?? static::getDefaultHidden());
} }
/** /**

@ -3,6 +3,7 @@
namespace jrosset\CliProgram\CommandCall; namespace jrosset\CliProgram\CommandCall;
use Arrayy\Arrayy; use Arrayy\Arrayy;
use jrosset\CliProgram\CliHelper;
use Symfony\Component\Console\Application; use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Input\ArrayInput;
@ -74,7 +75,9 @@ class CommandCall {
* @return $this * @return $this
*/ */
public function setCommandName ($commandName): self { public function setCommandName ($commandName): self {
$this->commandName = $commandName instanceof Command ? $commandName->getName() : $commandName; $this->commandName = $commandName instanceof Command
? CliHelper::getCommandNameFromClass($commandName->getApplication(), get_class($commandName))
: $commandName;
return $this; return $this;
} }

@ -37,7 +37,7 @@ class Hello extends CommandWithValidation implements IRequirements {
/** /**
* @inheritDoc * @inheritDoc
*/ */
protected function configure () { protected function configure (): void {
parent::configure(); parent::configure();
$this->addArgument( $this->addArgument(

Loading…
Cancel
Save