static-php-cli/src/SPC/command/dev/AllExtCommand.php

67 lines
2.1 KiB
PHP
Raw Normal View History

2023-07-22 17:33:38 +08:00
<?php
declare(strict_types=1);
namespace SPC\command\dev;
use SPC\command\BaseCommand;
use SPC\exception\FileSystemException;
use SPC\exception\WrongUsageException;
2023-07-22 17:33:38 +08:00
use SPC\store\Config;
use SPC\util\DependencyUtil;
2023-07-22 17:33:38 +08:00
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Style\SymfonyStyle;
2023-07-22 17:33:38 +08:00
#[AsCommand('dev:extensions', 'Helper command that lists available extension details', ['list-ext'])]
2023-07-22 17:33:38 +08:00
class AllExtCommand extends BaseCommand
{
public function configure(): void
2023-07-22 17:33:38 +08:00
{
$this->addArgument('extensions', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, 'Extension name', null);
2023-07-22 17:33:38 +08:00
}
/**
* @throws FileSystemException
*/
2023-07-22 17:33:38 +08:00
public function handle(): int
{
$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
);
2023-08-06 10:43:20 +08:00
return static::SUCCESS;
2023-07-22 17:33:38 +08:00
}
}