diff --git a/src/SPC/command/dev/AllExtCommand.php b/src/SPC/command/dev/AllExtCommand.php
index 7c77b5c5..f03356b4 100644
--- a/src/SPC/command/dev/AllExtCommand.php
+++ b/src/SPC/command/dev/AllExtCommand.php
@@ -6,15 +6,19 @@ namespace SPC\command\dev;
use SPC\command\BaseCommand;
use SPC\exception\FileSystemException;
+use SPC\exception\WrongUsageException;
use SPC\store\Config;
+use SPC\util\DependencyUtil;
use Symfony\Component\Console\Attribute\AsCommand;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Style\SymfonyStyle;
-#[AsCommand('dev:ext-all', 'Dev command', ['list-ext'])]
+#[AsCommand('dev:extensions', 'Helper command that lists available extension details', ['list-ext'])]
class AllExtCommand extends BaseCommand
{
public function configure(): void
{
- $this->addOption('line', 'l', null, 'Show with separate lines');
+ $this->addArgument('extensions', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, 'Extension name', null);
}
/**
@@ -22,7 +26,41 @@ class AllExtCommand extends BaseCommand
*/
public function handle(): int
{
- $this->output->writeln(implode($this->input->getOption('line') ? PHP_EOL : ',', array_keys(Config::getExts())));
+ $extensions = $this->input->getArgument('extensions') ?: [];
+
+ $style = new SymfonyStyle($this->input, $this->output);
+ $style->writeln($extensions ? 'Available extensions:' : 'Extensions:');
+
+ $data = [];
+ foreach (Config::getExts() as $extension => $details) {
+ if ($extensions !== [] && !\in_array($extension, $extensions, true)) {
+ continue;
+ }
+
+ try {
+ [, $libraries, $not_included] = DependencyUtil::getExtLibsByDeps([$extension]);
+ } catch (WrongUsageException) {
+ $libraries = $not_included = [];
+ }
+
+ $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',
+ ];
+ }
+
+ $style->table(
+ ['Extension', 'lib-depends', 'lib-suggests', 'ext-depends', 'ext-suggests', 'unix-only'],
+ $data
+ );
+
return static::SUCCESS;
}
}
diff --git a/src/SPC/command/dev/ExtInfoCommand.php b/src/SPC/command/dev/ExtInfoCommand.php
deleted file mode 100644
index fbab7db6..00000000
--- a/src/SPC/command/dev/ExtInfoCommand.php
+++ /dev/null
@@ -1,50 +0,0 @@
-addArgument('extensions', InputArgument::REQUIRED, 'The extension name you need to get info');
- }
-
- /**
- * @throws WrongUsageException
- * @throws FileSystemException
- * @throws RuntimeException
- */
- public function handle(): int
- {
- $extensions = array_map('trim', array_filter(explode(',', $this->getArgument('extensions'))));
-
- // 根据提供的扩展列表获取依赖库列表并编译
- foreach ($extensions as $extension) {
- $this->output->writeln('[ ' . $extension . ' ]');
- [, $libraries, $not_included] = DependencyUtil::getExtLibsByDeps([$extension]);
- $lib_suggests = Config::getExt($extension, 'lib-suggests', []);
- $ext_suggests = Config::getExt($extension, 'ext-suggests', []);
- $this->output->writeln("lib-depends:\t" . implode(', ', $libraries) . '');
- $this->output->writeln("lib-suggests:\t" . implode(', ', $lib_suggests) . '');
- $this->output->writeln("ext-depends:\t" . implode(',', $not_included) . '');
- $this->output->writeln("ext-suggests:\t" . implode(', ', $ext_suggests) . '');
- if (Config::getExt($extension, 'unix-only', false)) {
- $this->output->writeln("Unix only:\ttrue");
- }
- $this->output->writeln('');
- }
- return static::SUCCESS;
- }
-}