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 ($list as $package) {
- if (!empty($package['suggest']) && (empty($packages) || in_array($package['name'], $packages))) {
- $this->printSuggestions($package['name'], $package['suggest']);
+ foreach ($packages as $package) {
+ if (empty($package['suggest'])) {
+ continue;
}
+
+ 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));
}
}
}