mirror of
https://github.com/rectorphp/rector.git
synced 2025-02-19 07:40:49 +01:00
31 lines
1011 B
PHP
31 lines
1011 B
PHP
<?php
|
|
|
|
declare (strict_types=1);
|
|
namespace Rector\ChangesReporting\Annotation;
|
|
|
|
use RectorPrefix20210829\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 = \RectorPrefix20210829\Nette\Utils\Strings::match($docComment, $pattern);
|
|
return $matches['content'] ?? null;
|
|
}
|
|
}
|