mirror of https://github.com/rectorphp/rector.git
56 lines
2.6 KiB
PHP
56 lines
2.6 KiB
PHP
<?php
|
|
|
|
declare (strict_types=1);
|
|
namespace Rector\BetterPhpDocParser\PhpDocManipulator;
|
|
|
|
use PHPStan\PhpDocParser\Ast\Node;
|
|
use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
|
|
use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode;
|
|
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
|
|
use RectorPrefix20210808\Symplify\SimplePhpDocParser\PhpDocNodeTraverser;
|
|
final class PhpDocTagRemover
|
|
{
|
|
public function removeByName(\Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo $phpDocInfo, string $name) : void
|
|
{
|
|
$phpDocNode = $phpDocInfo->getPhpDocNode();
|
|
foreach ($phpDocNode->children as $key => $phpDocChildNode) {
|
|
if (!$phpDocChildNode instanceof \PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode) {
|
|
continue;
|
|
}
|
|
if ($this->areAnnotationNamesEqual($name, $phpDocChildNode->name)) {
|
|
unset($phpDocNode->children[$key]);
|
|
$phpDocInfo->markAsChanged();
|
|
}
|
|
if ($phpDocChildNode->value instanceof \Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode) {
|
|
$doctrineAnnotationTagValueNode = $phpDocChildNode->value;
|
|
if ($doctrineAnnotationTagValueNode->hasClassName($name)) {
|
|
unset($phpDocNode->children[$key]);
|
|
$phpDocInfo->markAsChanged();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
public function removeTagValueFromNode(\Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo $phpDocInfo, \PHPStan\PhpDocParser\Ast\Node $desiredNode) : void
|
|
{
|
|
$phpDocNode = $phpDocInfo->getPhpDocNode();
|
|
$phpDocNodeTraverser = new \RectorPrefix20210808\Symplify\SimplePhpDocParser\PhpDocNodeTraverser();
|
|
$phpDocNodeTraverser->traverseWithCallable($phpDocNode, '', function ($node) use($desiredNode, $phpDocInfo) : ?int {
|
|
if ($node instanceof \PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode && $node->value === $desiredNode) {
|
|
$phpDocInfo->markAsChanged();
|
|
return \RectorPrefix20210808\Symplify\SimplePhpDocParser\PhpDocNodeTraverser::NODE_REMOVE;
|
|
}
|
|
if ($node !== $desiredNode) {
|
|
return null;
|
|
}
|
|
$phpDocInfo->markAsChanged();
|
|
return \RectorPrefix20210808\Symplify\SimplePhpDocParser\PhpDocNodeTraverser::NODE_REMOVE;
|
|
});
|
|
}
|
|
private function areAnnotationNamesEqual(string $firstAnnotationName, string $secondAnnotationName) : bool
|
|
{
|
|
$firstAnnotationName = \trim($firstAnnotationName, '@');
|
|
$secondAnnotationName = \trim($secondAnnotationName, '@');
|
|
return $firstAnnotationName === $secondAnnotationName;
|
|
}
|
|
}
|