function SuggestedPackagesReporter::output
Output suggested packages.
Do not list the ones already installed if installed repository provided.
Parameters
int $mode One of the MODE_* constants from this class:
InstalledRepository|null $installedRepo If passed in, suggested packages which are installed already will be skipped:
PackageInterface|null $onlyDependentsOf If passed in, only the suggestions from direct dependents of that package, or from the package itself, will be shown:
File
-
vendor/
composer/ composer/ src/ Composer/ Installer/ SuggestedPackagesReporter.php, line 102
Class
- SuggestedPackagesReporter
- Add suggested packages from different places to output them in the end.
Namespace
Composer\InstallerCode
public function output(int $mode, ?InstalledRepository $installedRepo = null, ?PackageInterface $onlyDependentsOf = null) : void {
$suggestedPackages = $this->getFilteredSuggestions($installedRepo, $onlyDependentsOf);
$suggesters = [];
$suggested = [];
foreach ($suggestedPackages as $suggestion) {
$suggesters[$suggestion['source']][$suggestion['target']] = $suggestion['reason'];
$suggested[$suggestion['target']][$suggestion['source']] = $suggestion['reason'];
}
ksort($suggesters);
ksort($suggested);
// Simple mode
if ($mode & self::MODE_LIST) {
foreach (array_keys($suggested) as $name) {
$this->io
->write(sprintf('<info>%s</info>', $name));
}
return;
}
// Grouped by package
if ($mode & self::MODE_BY_PACKAGE) {
foreach ($suggesters as $suggester => $suggestions) {
$this->io
->write(sprintf('<comment>%s</comment> suggests:', $suggester));
foreach ($suggestions as $suggestion => $reason) {
$this->io
->write(sprintf(' - <info>%s</info>' . ($reason ? ': %s' : ''), $suggestion, $this->escapeOutput($reason)));
}
$this->io
->write('');
}
}
// Grouped by suggestion
if ($mode & self::MODE_BY_SUGGESTION) {
// Improve readability in full mode
if ($mode & self::MODE_BY_PACKAGE) {
$this->io
->write(str_repeat('-', 78));
}
foreach ($suggested as $suggestion => $suggesters) {
$this->io
->write(sprintf('<comment>%s</comment> is suggested by:', $suggestion));
foreach ($suggesters as $suggester => $reason) {
$this->io
->write(sprintf(' - <info>%s</info>' . ($reason ? ': %s' : ''), $suggester, $this->escapeOutput($reason)));
}
$this->io
->write('');
}
}
if ($onlyDependentsOf) {
$allSuggestedPackages = $this->getFilteredSuggestions($installedRepo);
$diff = count($allSuggestedPackages) - count($suggestedPackages);
if ($diff) {
$this->io
->write('<info>' . $diff . ' additional suggestions</info> by transitive dependencies can be shown with <info>--all</info>');
}
}
}