Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. SuggestedPackagesReporter.php

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\Installer

Code

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>');
        }
    }
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal