Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x

SuppressHelper.php

Namespace

SlevomatCodingStandard\Helpers

File

vendor/slevomat/coding-standard/SlevomatCodingStandard/Helpers/SuppressHelper.php

View source
<?php

declare (strict_types=1);
namespace SlevomatCodingStandard\Helpers;

use PHP_CodeSniffer\Files\File;
use PHPStan\PhpDocParser\Ast\PhpDoc\GenericTagValueNode;
use function array_reduce;
use function assert;
use function explode;
use function sprintf;
use function strpos;
use const T_DOC_COMMENT_CLOSE_TAG;
use const T_DOC_COMMENT_OPEN_TAG;
use const T_DOC_COMMENT_STAR;

/**
 * @internal
 */
class SuppressHelper {
    public const ANNOTATION = '@phpcsSuppress';
    public static function isSniffSuppressed(File $phpcsFile, int $pointer, string $suppressName) : bool {
        
        /** @var list<Annotation<GenericTagValueNode>> $annotations */
        $annotations = AnnotationHelper::getAnnotations($phpcsFile, $pointer, self::ANNOTATION);
        return array_reduce($annotations, static function (bool $carry, Annotation $annotation) use ($suppressName) : bool {
            $annotationSuppressName = explode(' ', $annotation->getValue()->value)[0];
            if ($suppressName === $annotationSuppressName || strpos($suppressName, sprintf('%s.', $annotationSuppressName)) === 0) {
                $carry = true;
            }
            return $carry;
        }, false);
    }
    public static function removeSuppressAnnotation(File $phpcsFile, int $pointer, string $suppressName) : void {
        $suppressAnnotation = null;
        
        /** @var Annotation<GenericTagValueNode> $annotation */
        foreach (AnnotationHelper::getAnnotations($phpcsFile, $pointer, self::ANNOTATION) as $annotation) {
            if ($annotation->getValue()->value === $suppressName) {
                $suppressAnnotation = $annotation;
                break;
            }
        }
        assert($suppressAnnotation !== null);
        $tokens = $phpcsFile->getTokens();
        
        /** @var int $pointerBefore */
        $pointerBefore = TokenHelper::findPrevious($phpcsFile, [
            T_DOC_COMMENT_OPEN_TAG,
            T_DOC_COMMENT_STAR,
        ], $suppressAnnotation->getStartPointer() - 1);
        $changeStart = $tokens[$pointerBefore]['code'] === T_DOC_COMMENT_STAR ? $pointerBefore : $suppressAnnotation->getStartPointer();
        
        /** @var int $changeEnd */
        $changeEnd = TokenHelper::findNext($phpcsFile, [
            T_DOC_COMMENT_CLOSE_TAG,
            T_DOC_COMMENT_STAR,
        ], $suppressAnnotation->getEndPointer() + 1) - 1;
        $phpcsFile->fixer
            ->beginChangeset();
        FixerHelper::removeBetweenIncluding($phpcsFile, $changeStart, $changeEnd);
        $phpcsFile->fixer
            ->endChangeset();
    }

}

Classes

Title Deprecated Summary
SuppressHelper @internal
RSS feed
Powered by Drupal