1
0
Fork 0
mirror of https://github.com/composer/composer synced 2025-05-10 17:12:51 +00:00

Reaching phpstan level 6 in Composer/DependencyResolver (refs #10159) (#10178)

This commit is contained in:
immeëmosol 2021-10-18 22:33:37 +02:00 committed by GitHub
parent 04ab74bbef
commit 50d738eeee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
26 changed files with 292 additions and 113 deletions

View file

@ -12,11 +12,11 @@
namespace Composer\DependencyResolver;
use Composer\Package\Link;
use Composer\Package\BasePackage;
use Composer\Package\AliasPackage;
use Composer\Repository\RepositorySet;
use Composer\Package\BasePackage;
use Composer\Package\Link;
use Composer\Repository\PlatformRepository;
use Composer\Repository\RepositorySet;
use Composer\Package\Version\VersionParser;
use Composer\Semver\Constraint\Constraint;
use Composer\Semver\Constraint\ConstraintInterface;
@ -54,8 +54,8 @@ abstract class Rule
protected $reasonData;
/**
* @param self::RULE_* $reason A RULE_* constant describing the reason for generating this rule
* @param Link|BasePackage|ConstraintInterface|string $reasonData
* @param self::RULE_* $reason A RULE_* constant describing the reason for generating this rule
* @param mixed $reasonData
*
* @phpstan-param ReasonData $reasonData
*/
@ -68,26 +68,42 @@ abstract class Rule
(255 << self::BITFIELD_TYPE);
}
/**
* @return int[]
*/
abstract public function getLiterals();
/**
* @return int|string
*/
abstract public function getHash();
abstract public function __toString();
/**
* @param Rule $rule
* @return bool
*/
abstract public function equals(Rule $rule);
/**
* @return int
*/
public function getReason()
{
return ($this->bitfield & (255 << self::BITFIELD_REASON)) >> self::BITFIELD_REASON;
}
/**
* @phpstan-return ReasonData
*/
public function getReasonData()
{
return $this->reasonData;
}
/**
* @return ?string
* @return string|null
*/
public function getRequiredPackage()
{
@ -108,38 +124,63 @@ abstract class Rule
return null;
}
/**
* @param 255|RuleSet::TYPE_* $type
* @return void
*/
public function setType($type)
{
$this->bitfield = ($this->bitfield & ~(255 << self::BITFIELD_TYPE)) | ((255 & $type) << self::BITFIELD_TYPE);
}
/**
* @return int
*/
public function getType()
{
return ($this->bitfield & (255 << self::BITFIELD_TYPE)) >> self::BITFIELD_TYPE;
}
/**
* @return void
*/
public function disable()
{
$this->bitfield = ($this->bitfield & ~(255 << self::BITFIELD_DISABLED)) | (1 << self::BITFIELD_DISABLED);
}
/**
* @return void
*/
public function enable()
{
$this->bitfield &= ~(255 << self::BITFIELD_DISABLED);
}
/**
* @return bool
*/
public function isDisabled()
{
return (bool) (($this->bitfield & (255 << self::BITFIELD_DISABLED)) >> self::BITFIELD_DISABLED);
}
/**
* @return bool
*/
public function isEnabled()
{
return !(($this->bitfield & (255 << self::BITFIELD_DISABLED)) >> self::BITFIELD_DISABLED);
}
/**
* @return bool
*/
abstract public function isAssertion();
/**
* @return bool
*/
public function isCausedByLock(RepositorySet $repositorySet, Request $request, Pool $pool)
{
if ($this->getReason() === self::RULE_PACKAGE_REQUIRES) {
@ -187,6 +228,12 @@ abstract class Rule
return false;
}
/**
* @param bool $isVerbose
* @param BasePackage[] $installedMap
* @param array<Rule[]> $learnedPool
* @return string
*/
public function getPrettyString(RepositorySet $repositorySet, Request $request, Pool $pool, $isVerbose, array $installedMap = array(), array $learnedPool = array())
{
$literals = $this->getLiterals();
@ -396,12 +443,11 @@ abstract class Rule
}
/**
* @param Pool $pool
* @param array $packages
*
* @param array<int|BasePackage> $packages An array containing packages or literals
* @param bool $isVerbose
* @return string
*/
protected function formatPackagesUnique($pool, array $packages, $isVerbose)
protected function formatPackagesUnique(Pool $pool, array $packages, $isVerbose)
{
foreach ($packages as $index => $package) {
if (!\is_object($package)) {
@ -412,6 +458,9 @@ abstract class Rule
return Problem::getPackageList($packages, $isVerbose);
}
/**
* @return BasePackage
*/
private function deduplicateDefaultBranchAlias(BasePackage $package)
{
if ($package instanceof AliasPackage && $package->getPrettyVersion() === VersionParser::DEFAULT_BRANCH_ALIAS) {