diff --git a/src/Composer/Command/SuggestsCommand.php b/src/Composer/Command/SuggestsCommand.php index 2ae4f4414..d874d1d19 100644 --- a/src/Composer/Command/SuggestsCommand.php +++ b/src/Composer/Command/SuggestsCommand.php @@ -71,7 +71,9 @@ EOT $reporter = new SuggestedPackagesReporter($this->getIO()); $filter = $input->getArgument('packages'); - foreach ($installedRepo->getPackages() as $package) { + $packages = $installedRepo->getPackages(); + $packages[] = $composer->getPackage(); + foreach ($packages as $package) { if (!empty($filter) && !in_array($package->getName(), $filter)) { continue; } diff --git a/src/Composer/Installer.php b/src/Composer/Installer.php index bf33693b3..1a9d4fc4f 100644 --- a/src/Composer/Installer.php +++ b/src/Composer/Installer.php @@ -203,6 +203,8 @@ class Installer throw new \RuntimeException("The installer options updateMirrors and updateAllowList are mutually exclusive."); } + $isFreshInstall = $this->repositoryManager->getLocalRepository()->isFresh(); + // Force update if there is no lock file present if (!$this->update && !$this->locker->isLocked()) { $this->io->writeError('No lock file found. Updating dependencies instead of installing from lock file. Use composer update over composer install if you do not have a lock file.'); @@ -264,6 +266,9 @@ class Installer $this->createPlatformRepo(false), new RootPackageRepository(clone $this->package), )); + if ($isFreshInstall) { + $this->suggestedPackagesReporter->addSuggestionsFromPackage($this->package); + } $this->suggestedPackagesReporter->outputMinimalistic($installedRepo); } diff --git a/src/Composer/Installer/SuggestedPackagesReporter.php b/src/Composer/Installer/SuggestedPackagesReporter.php index 804873883..4d8de6086 100644 --- a/src/Composer/Installer/SuggestedPackagesReporter.php +++ b/src/Composer/Installer/SuggestedPackagesReporter.php @@ -100,7 +100,7 @@ class SuggestedPackagesReporter * * @param int $mode One of the MODE_* constants from this class * @param InstalledRepository $installedRepo If passed in, suggested packages which are installed already will be skipped - * @param PackageInterface $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package will be shown + * @param PackageInterface $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package, or from the package itself, will be shown * @return SuggestedPackagesReporter */ public function output($mode, InstalledRepository $installedRepo = null, PackageInterface $onlyDependentsOf = null) @@ -168,7 +168,7 @@ class SuggestedPackagesReporter * Output number of new suggested packages and a hint to use suggest command. * * @param InstalledRepository $installedRepo If passed in, suggested packages which are installed already will be skipped - * @param PackageInterface $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package will be shown + * @param PackageInterface $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package, or from the package itself, will be shown * @return SuggestedPackagesReporter */ public function outputMinimalistic(InstalledRepository $installedRepo = null, PackageInterface $onlyDependentsOf = null) @@ -183,7 +183,7 @@ class SuggestedPackagesReporter /** * @param InstalledRepository $installedRepo If passed in, suggested packages which are installed already will be skipped - * @param PackageInterface $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package will be shown + * @param PackageInterface $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package, or from the package itself, will be shown * @return array[] */ private function getFilteredSuggestions(InstalledRepository $installedRepo = null, PackageInterface $onlyDependentsOf = null) @@ -204,6 +204,7 @@ class SuggestedPackagesReporter $sourceFilter = array_map(function ($link) { return $link->getTarget(); }, array_merge($onlyDependentsOf->getRequires(), $onlyDependentsOf->getDevRequires())); + $sourceFilter[] = $onlyDependentsOf->getName(); } $suggestions = array();