rector/packages/ChangesReporting/Annotation/AnnotationExtractor.php
Tomas Votruba 617d8d5718 Updated Rector to commit 0db5ce6f6d
0db5ce6f6d [automated] Re-Generate Nodes/Rectors Documentation (#1809)
2022-02-13 00:29:38 +00:00

31 lines
1011 B
PHP

<?php
declare (strict_types=1);
namespace Rector\ChangesReporting\Annotation;
use RectorPrefix20220213\Nette\Utils\Strings;
use Rector\Core\Contract\Rector\RectorInterface;
use ReflectionClass;
/**
* @see \Rector\Tests\ChangesReporting\Annotation\AnnotationExtractorTest
*/
final class AnnotationExtractor
{
/**
* @param class-string<RectorInterface> $className
*/
public function extractAnnotationFromClass(string $className, string $annotation) : ?string
{
$reflectionClass = new \ReflectionClass($className);
$docComment = $reflectionClass->getDocComment();
if (!\is_string($docComment)) {
return null;
}
// @see https://3v4l.org/ouYfB
// uses 'r?\n' instead of '$' because windows compat
$pattern = '#' . \preg_quote($annotation, '#') . '\\s+(?<content>.*?)\\r?\\n#m';
$matches = \RectorPrefix20220213\Nette\Utils\Strings::match($docComment, $pattern);
return $matches['content'] ?? null;
}
}