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' ); } /** * @throws FileSystemException * @throws WrongUsageException * @throws RuntimeException */ 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:'); $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', []); $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($columns, $data); } return static::SUCCESS; } }