0 follower

Class Yiisoft\YiiDevTool\Infrastructure\Composer\ComposerPackageUsageAnalyzer

InheritanceYiisoft\YiiDevTool\Infrastructure\Composer\ComposerPackageUsageAnalyzer

Method Details

Hide inherited methods

__construct() public method

public mixed __construct ( Yiisoft\YiiDevTool\Infrastructure\Composer\ComposerPackage[] $packages, Yiisoft\YiiDevTool\Infrastructure\CodeUsage\CodeUsage[] $namespaceUsages )
$packages Yiisoft\YiiDevTool\Infrastructure\Composer\ComposerPackage[]
$namespaceUsages Yiisoft\YiiDevTool\Infrastructure\CodeUsage\CodeUsage[]

                public function __construct(array $packages, array $namespaceUsages)
{
    foreach ($packages as $package) {
        if (!$package instanceof ComposerPackage) {
            throw new InvalidArgumentException('$packages must be an array of ComposerPackage objects.');
        }
    }
    foreach ($namespaceUsages as $namespaceUsage) {
        if (!$namespaceUsage instanceof CodeUsage) {
            throw new InvalidArgumentException('$namespaceUsages must be an array of CodeUsage objects.');
        }
    }
    foreach ($packages as $package) {
        $this->packages[$package->getName()] = $package;
    }
    foreach ($namespaceUsages as $namespaceUsage) {
        $this->namespaceUsages[$namespaceUsage->getIdentifier()] = $namespaceUsage;
    }
}

            
analyze() public method

public void analyze ( )

                public function analyze(): void
{
    foreach ($this->packages as $package) {
        foreach ($package->getPSRNamespaces() as $packageNamespace) {
            foreach ($this->namespaceUsages as $namespaceUsage) {
                if (str_starts_with($namespaceUsage->getIdentifier(), "\\$packageNamespace")) {
                    $this->registerPackageUsage($package->getName(), $namespaceUsage->getEnvironments());
                }
            }
        }
    }
}

            
getNamesOfPackagesUsedInSpecifiedEnvironment() public method

public string[] getNamesOfPackagesUsedInSpecifiedEnvironment ( string $environment )
$environment string
return string[]

Array of package names.

                public function getNamesOfPackagesUsedInSpecifiedEnvironment(string $environment): array
{
    $result = [];
    foreach ($this->packageUsages as $packageUsage) {
        if ($packageUsage->usedInEnvironment($environment)) {
            $result[] = $this->packages[$packageUsage->getIdentifier()]->getName();
        }
    }
    return $result;
}

            
getNamesOfPackagesUsedOnlyInSpecifiedEnvironment() public method

public string[] getNamesOfPackagesUsedOnlyInSpecifiedEnvironment ( string $environment )
$environment string
return string[]

Array of package names.

                public function getNamesOfPackagesUsedOnlyInSpecifiedEnvironment(string $environment): array
{
    $result = [];
    foreach ($this->packageUsages as $packageUsage) {
        if ($packageUsage->usedOnlyInSpecifiedEnvironment($environment)) {
            $result[] = $this->packages[$packageUsage->getIdentifier()]->getName();
        }
    }
    return $result;
}

            
getUnusedPackageNames() public method

public string[] getUnusedPackageNames ( )
return string[]

Array of package names.

                public function getUnusedPackageNames(): array
{
    $result = [];
    foreach ($this->packages as $package) {
        /**
         * TODO: Implement support of packages that uses non-PSR autoload.
         * It's difficult, but possible.
         *
         * For now, just skip them, because we don't know exactly
         * if their dependencies are being used or not.
         */
        if ($package->usesNonPSRAutoload()) {
            continue;
        }
        /**
         * TODO: Implement notices about packages that provide binaries.
         *
         * Such packages can be used as hand tools, so they cannot be removed automatically.
         * They should be checked by a human.
         */
        if ($package->providesBinaries()) {
            continue;
        }
        /**
         * TODO: Implement notices about plugins.
         * They should be checked by a human.
         */
        if ($package->isComposerPlugin()) {
            continue;
        }
        $packageName = $package->getName();
        if ($this->hasPackageUsage($packageName)) {
            continue;
        }
        $result[] = $package->getName();
    }
    return $result;
}