/**
* Handles the "bind --list" command.
*
* @param Args $args The console arguments.
* @param IO $io The I/O.
*
* @return int The status code.
*/
public function handleList(Args $args, IO $io)
{
$packageNames = ArgsUtil::getPackageNames($args, $this->packages);
$bindingStates = $this->getBindingStates($args);
$printBindingState = count($bindingStates) > 1;
$printPackageName = count($packageNames) > 1;
$printHeaders = $printBindingState || $printPackageName;
$indentation = $printBindingState && $printPackageName ? 8 : ($printBindingState || $printPackageName ? 4 : 0);
foreach ($bindingStates as $bindingState) {
$bindingStatePrinted = !$printBindingState;
foreach ($packageNames as $packageName) {
$expr = Expr::method('getContainingPackage', Expr::method('getName', Expr::same($packageName)))->andMethod('getState', Expr::same($bindingState));
$descriptors = $this->discoveryManager->findBindingDescriptors($expr);
if (empty($descriptors)) {
continue;
}
if (!$bindingStatePrinted) {
$this->printBindingStateHeader($io, $bindingState);
$bindingStatePrinted = true;
}
if ($printPackageName) {
$prefix = $printBindingState ? ' ' : '';
$io->writeLine("{$prefix}Package: {$packageName}");
$io->writeLine('');
}
$this->printBindingTable($io, $descriptors, $indentation, BindingState::ENABLED === $bindingState);
if ($printHeaders) {
$io->writeLine('');
}
}
}
return 0;
}