diff --git a/src/Composer/Command/SuggestsCommand.php b/src/Composer/Command/SuggestsCommand.php index 13558b693..c6f7385fd 100644 --- a/src/Composer/Command/SuggestsCommand.php +++ b/src/Composer/Command/SuggestsCommand.php @@ -45,38 +45,54 @@ EOT throw new \RuntimeException('Lockfile seems to be empty?'); } - $io = $this->getIO(); - $list = $lock['packages']; + $packages = $lock['packages']; if (!$input->getOption('no-dev')) { - $list += $lock['packages-dev']; + $packages += $lock['packages-dev']; } - $packages = $input->getArgument('packages'); + $filter = $input->getArgument('packages'); + + foreach ($packages as $package) { + if (empty($package['suggest'])) { + continue; + } - foreach ($list as $package) { - if (!empty($package['suggest']) && (empty($packages) || in_array($package['name'], $packages))) { - $this->printSuggestions($package['name'], $package['suggest']); + if (!empty($filter) && !in_array($package['name'], $filter)) { + continue; } + + $this->printSuggestions($packages, $package['name'], $package['suggest']); } } - protected function printSuggestions($name, $suggests) + protected function printSuggestions($installed, $source, $suggestions) { - $io = $this->getIO(); + foreach ($suggestions as $suggestion => $reason) { + foreach ($installed as $package) { + if ($package['name'] === $suggestion) { + continue 2; + } + } - foreach ($suggests as $target => $reason) { if (empty($reason)) { $reason = '*'; } - if ($io->isVeryVerbose()) { - $io->write(sprintf('%s suggests %s: %s', $name, $target, $reason)); - } elseif ($io->isVerbose()) { - $io->write(sprintf('%s suggests %s', $name, $target)); - } else { - $io->write(sprintf('%s', $target)); - } + $this->printSuggestion($source, $suggestion, $reason); + } + } + + protected function printSuggestion($package, $suggestion, $reason) + { + $io = $this->getIO(); + + if ($io->isVeryVerbose()) { + $io->write(sprintf('%s suggests %s: %s', $package, $suggestion, $reason)); + } elseif ($io->isVerbose()) { + $io->write(sprintf('%s suggests %s', $package, $suggestion)); + } else { + $io->write(sprintf('%s', $suggestion)); } } }