diff --git a/composer.json b/composer.json index 0889ddfd..6b3ecf13 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,7 @@ "authors": [ { "name": "Andreas Frömer", - "email": "github@icanhazstring.com" + "email": "composer-unused@icanhazstring.com" } ], "require": { diff --git a/src/Console/Command/UnusedCommand.php b/src/Console/Command/UnusedCommand.php index 33874f03..510876c2 100644 --- a/src/Console/Command/UnusedCommand.php +++ b/src/Console/Command/UnusedCommand.php @@ -143,7 +143,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int } if ($secondRequiredDependency->suggests($requiredDependency)) { - // TODO add "suggested by" in output + $requiredDependency->suggestedBy($secondRequiredDependency); $requiredDependency->markUsed(); continue 2; } @@ -179,7 +179,7 @@ static function (DependencyInterface $dependency) { $io->text('Used packages'); foreach ($usedDependencyCollection as $usedDependency) { $requiredBy = ''; - // TODO add suggest by dependency + $suggestedBy = ''; if (!empty($usedDependency->getRequiredBy())) { $requiredByNames = array_map(static function (DependencyInterface $dependency) { @@ -192,12 +192,24 @@ static function (DependencyInterface $dependency) { ); } + if (!empty($usedDependency->getSuggestedBy())) { + $suggestedByNames = array_map(static function (DependencyInterface $dependency) { + return $dependency->getName(); + }, $usedDependency->getSuggestedBy()); + + $requiredBy = sprintf( + ' (suggested by: %s)', + implode(', ', $suggestedByNames) + ); + } + $io->writeln( sprintf( - ' %s %s%s', + ' %s %s%s%s', "\u{2713}", $usedDependency->getName(), - $requiredBy + $requiredBy, + $suggestedBy ) ); } diff --git a/src/Dependency/DependencyInterface.php b/src/Dependency/DependencyInterface.php index 7b6fa4b7..f50e5b25 100644 --- a/src/Dependency/DependencyInterface.php +++ b/src/Dependency/DependencyInterface.php @@ -28,4 +28,11 @@ public function requiredBy(DependencyInterface $dependency): void; * @return array */ public function getRequiredBy(): array; + + public function suggestedBy(DependencyInterface $dependency): void; + + /** + * @return array + */ + public function getSuggestedBy(): array; } diff --git a/src/Dependency/InvalidDependency.php b/src/Dependency/InvalidDependency.php index de572a6f..0e97ea45 100644 --- a/src/Dependency/InvalidDependency.php +++ b/src/Dependency/InvalidDependency.php @@ -58,4 +58,13 @@ public function getRequiredBy(): array { return []; } + + public function suggestedBy(DependencyInterface $dependency): void + { + } + + public function getSuggestedBy(): array + { + return []; + } } diff --git a/src/Dependency/RequiredDependency.php b/src/Dependency/RequiredDependency.php index 64b0a250..88ad8e56 100644 --- a/src/Dependency/RequiredDependency.php +++ b/src/Dependency/RequiredDependency.php @@ -20,6 +20,8 @@ final class RequiredDependency implements DependencyInterface private $symbols; /** @var array */ private $requiredBy = []; + /** @var array */ + private $suggestBy = []; public function __construct(PackageInterface $package, SymbolListInterface $symbols) { @@ -72,4 +74,14 @@ public function getRequiredBy(): array { return $this->requiredBy; } + + public function suggestedBy(DependencyInterface $dependency): void + { + $this->suggestBy[$dependency->getName()] = $dependency; + } + + public function getSuggestedBy(): array + { + return $this->suggestBy; + } }