From 07f943af7ebc9e2102b920df4f454d1383b085a9 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sun, 5 Nov 2023 18:31:14 +0800 Subject: [PATCH] add dev:extensions command custom column display --- src/SPC/command/dev/AllExtCommand.php | 45 ++++++++++++++++++++------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/src/SPC/command/dev/AllExtCommand.php b/src/SPC/command/dev/AllExtCommand.php index 196de39f4..399156c2b 100644 --- a/src/SPC/command/dev/AllExtCommand.php +++ b/src/SPC/command/dev/AllExtCommand.php @@ -12,6 +12,7 @@ use SPC\util\DependencyUtil; use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Style\SymfonyStyle; use function Laravel\Prompts\table; @@ -22,6 +23,13 @@ class AllExtCommand extends BaseCommand public function configure(): void { $this->addArgument('extensions', InputArgument::OPTIONAL, 'List of extensions that will be displayed, comma separated'); + $this->addOption( + 'columns', + null, + InputOption::VALUE_REQUIRED, + 'List of columns that will be displayed, comma separated (lib-depends, lib-suggests, ext-depends, ext-suggests, unix-only)', + 'lib-depends,lib-suggests,ext-depends,ext-suggests,unix-only' + ); } /** @@ -32,6 +40,16 @@ public function configure(): void public function handle(): int { $extensions = array_map('trim', array_filter(explode(',', $this->getArgument('extensions') ?? ''))); + $columns = array_map('trim', array_filter(explode(',', $this->getOption('columns')))); + + foreach ($columns as $column) { + if (!in_array($column, ['lib-depends', 'lib-suggests', 'ext-depends', 'ext-suggests', 'unix-only', 'type'])) { + $this->output->writeln('Column name [' . $column . '] is not valid.'); + $this->output->writeln('Available column name: lib-depends, lib-suggests, ext-depends, ext-suggests, unix-only, type'); + return static::FAILURE; + } + } + array_unshift($columns, 'name'); $style = new SymfonyStyle($this->input, $this->output); $style->writeln($extensions ? 'Available extensions:' : 'Extensions:'); @@ -51,23 +69,26 @@ public function handle(): int $lib_suggests = Config::getExt($extension, 'lib-suggests', []); $ext_suggests = Config::getExt($extension, 'ext-suggests', []); - $data[] = [ - $extension, - implode(', ', $libraries), - implode(', ', $lib_suggests), - implode(',', $not_included), - implode(', ', $ext_suggests), - Config::getExt($extension, 'unix-only', false) ? 'true' : 'false', - ]; + $row = []; + foreach ($columns as $column) { + $row[] = match ($column) { + 'name' => $extension, + 'type' => Config::getExt($extension, 'type'), + 'lib-depends' => implode(', ', $libraries), + 'lib-suggests' => implode(', ', $lib_suggests), + 'ext-depends' => implode(',', $not_included), + 'ext-suggests' => implode(', ', $ext_suggests), + 'unix-only' => Config::getExt($extension, 'unix-only', false) ? 'true' : 'false', + default => '', + }; + } + $data[] = $row; } if ($data === []) { $style->warning('Unknown extension selected: ' . implode(',', $extensions)); } else { - table( - ['Extension', 'lib-depends', 'lib-suggests', 'ext-depends', 'ext-suggests', 'unix-only'], - $data - ); + table($columns, $data); } return static::SUCCESS;