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

Breadcrumb

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

function Plugin::process

File

vendor/phpstan/extension-installer/src/Plugin.php, line 91

Class

Plugin

Namespace

PHPStan\ExtensionInstaller

Code

public function process(Event $event) : void {
    $io = $event->getIO();
    if (!file_exists(__DIR__)) {
        $io->write('<info>phpstan/extension-installer:</info> Package not found (probably scheduled for removal); extensions installation skipped.');
        return;
    }
    $composer = $event->getComposer();
    $installationManager = $composer->getInstallationManager();
    $generatedConfigFilePath = __DIR__ . '/GeneratedConfig.php';
    $oldGeneratedConfigFileHash = null;
    if (is_file($generatedConfigFilePath)) {
        $oldGeneratedConfigFileHash = md5_file($generatedConfigFilePath);
    }
    $notInstalledPackages = [];
    $installedPackages = [];
    $ignoredPackages = [];
    $data = [];
    $fs = new Filesystem();
    $ignore = [];
    $packageExtra = $composer->getPackage()
        ->getExtra();
    if (isset($packageExtra['phpstan/extension-installer']['ignore'])) {
        $ignore = $packageExtra['phpstan/extension-installer']['ignore'];
    }
    $phpstanVersionConstraints = [];
    foreach ($composer->getRepositoryManager()
        ->getLocalRepository()
        ->getPackages() as $package) {
        if ($package->getType() !== 'phpstan-extension' && !isset($package->getExtra()['phpstan'])) {
            if (strpos($package->getName(), 'phpstan') !== false && !in_array($package->getName(), [
                'phpstan/phpstan',
                'phpstan/phpstan-shim',
                'phpstan/phpdoc-parser',
                'phpstan/extension-installer',
            ], true)) {
                $notInstalledPackages[$package->getName()] = $package->getFullPrettyVersion();
            }
            continue;
        }
        if (in_array($package->getName(), $ignore, true)) {
            $ignoredPackages[] = $package->getName();
            continue;
        }
        $installPath = $installationManager->getInstallPath($package);
        if ($installPath === null) {
            continue;
        }
        $absoluteInstallPath = $fs->isAbsolutePath($installPath) ? $installPath : getcwd() . DIRECTORY_SEPARATOR . $installPath;
        $packageRequires = $package->getRequires();
        $phpstanConstraint = null;
        if (array_key_exists('phpstan/phpstan', $packageRequires)) {
            $phpstanConstraint = $packageRequires['phpstan/phpstan']->getConstraint();
            if ($phpstanConstraint->getLowerBound()
                ->isZero()) {
                continue;
            }
            if ($phpstanConstraint->getUpperBound()
                ->isPositiveInfinity()) {
                continue;
            }
            $phpstanVersionConstraints[] = $phpstanConstraint;
        }
        $data[$package->getName()] = [
            'install_path' => $absoluteInstallPath,
            'relative_install_path' => $fs->findShortestPath(dirname($generatedConfigFilePath), $absoluteInstallPath, true),
            'extra' => $package->getExtra()['phpstan'] ?? null,
            'version' => $package->getFullPrettyVersion(),
            'phpstanVersionConstraint' => $phpstanConstraint !== null ? $this->constraintIntoString($phpstanConstraint) : null,
        ];
        $installedPackages[$package->getName()] = true;
    }
    $phpstanVersionConstraint = null;
    if (count($phpstanVersionConstraints) > 0 && class_exists(Intervals::class)) {
        if (count($phpstanVersionConstraints) === 1) {
            $multiConstraint = $phpstanVersionConstraints[0];
        }
        else {
            $multiConstraint = new MultiConstraint($phpstanVersionConstraints);
        }
        $phpstanVersionConstraint = $this->constraintIntoString(Intervals::compactConstraint($multiConstraint));
    }
    ksort($data);
    ksort($installedPackages);
    ksort($notInstalledPackages);
    sort($ignoredPackages);
    $generatedConfigFileContents = sprintf(self::$generatedFileTemplate, var_export($data, true), var_export($notInstalledPackages, true), var_export($phpstanVersionConstraint, true));
    file_put_contents($generatedConfigFilePath, $generatedConfigFileContents);
    $io->write('<info>phpstan/extension-installer:</info> Extensions installed');
    if ($oldGeneratedConfigFileHash === md5($generatedConfigFileContents)) {
        return;
    }
    foreach (array_keys($installedPackages) as $name) {
        $io->write(sprintf('> <info>%s:</info> installed', $name));
    }
    foreach (array_keys($notInstalledPackages) as $name) {
        $io->write(sprintf('> <comment>%s:</comment> not supported', $name));
    }
    foreach ($ignoredPackages as $name) {
        $io->write(sprintf('> <comment>%s:</comment> ignored', $name));
    }
}

API Navigation

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