class ClassCoversExistsRule
@implements Rule<InClassNode>
Hierarchy
- class \PHPStan\Rules\PHPUnit\ClassCoversExistsRule implements \PHPStan\Rules\Rule
Expanded class hierarchy of ClassCoversExistsRule
File
-
vendor/
phpstan/ phpstan-phpunit/ src/ Rules/ PHPUnit/ ClassCoversExistsRule.php, line 20
Namespace
PHPStan\Rules\PHPUnitView source
class ClassCoversExistsRule implements Rule {
/**
* Covers helper.
*
* @var CoversHelper
*/
private $coversHelper;
/**
* Reflection provider.
*
* @var ReflectionProvider
*/
private $reflectionProvider;
public function __construct(CoversHelper $coversHelper, ReflectionProvider $reflectionProvider) {
$this->reflectionProvider = $reflectionProvider;
$this->coversHelper = $coversHelper;
}
public function getNodeType() : string {
return InClassNode::class;
}
public function processNode(Node $node, Scope $scope) : array {
$classReflection = $node->getClassReflection();
if (!$classReflection->isSubclassOf(TestCase::class)) {
return [];
}
$classPhpDoc = $classReflection->getResolvedPhpDoc();
[
$classCovers,
$classCoversDefaultClasses,
] = $this->coversHelper
->getCoverAnnotations($classPhpDoc);
if (count($classCoversDefaultClasses) >= 2) {
return [
RuleErrorBuilder::message(sprintf('@coversDefaultClass is defined multiple times.'))->identifier('phpunit.coversDuplicate')
->build(),
];
}
$errors = [];
$coversDefaultClass = array_shift($classCoversDefaultClasses);
if ($coversDefaultClass !== null) {
$className = (string) $coversDefaultClass->value;
if (!$this->reflectionProvider
->hasClass($className)) {
$errors[] = RuleErrorBuilder::message(sprintf('@coversDefaultClass references an invalid class %s.', $className))->identifier('phpunit.coversClass')
->build();
}
}
foreach ($classCovers as $covers) {
$errors = array_merge($errors, $this->coversHelper
->processCovers($node, $covers, null));
}
return $errors;
}
}
Members
Title Sort descending | Modifiers | Object type | Summary |
---|---|---|---|
ClassCoversExistsRule::$coversHelper | private | property | * Covers helper. * * |
ClassCoversExistsRule::$reflectionProvider | private | property | * Reflection provider. * * |
ClassCoversExistsRule::getNodeType | public | function | |
ClassCoversExistsRule::processNode | public | function | |
ClassCoversExistsRule::__construct | public | function |