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

Breadcrumb

  1. Drupal Core 11.1.x

SniffLocalCache.php

Namespace

SlevomatCodingStandard\Helpers

File

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

View source
<?php

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

use Closure;
use PHP_CodeSniffer\Files\File;
use function array_key_exists;
use function sprintf;

/**
 * @internal
 */
final class SniffLocalCache {
    
    /**
     * @phpcsSuppress SlevomatCodingStandard.TypeHints.DisallowMixedTypeHint
     * @var array<int, array<string, mixed>>
     */
    private static $cache = [];
    
    /**
     * @phpcsSuppress SlevomatCodingStandard.TypeHints.DisallowMixedTypeHint
     * @return mixed
     */
    public static function getAndSetIfNotCached(File $phpcsFile, string $key, Closure $lazyValue) {
        $fixerLoops = $phpcsFile->fixer !== null ? $phpcsFile->fixer->loops : 0;
        $internalKey = sprintf('%s-%s', $phpcsFile->getFilename(), $key);
        self::setIfNotCached($fixerLoops, $internalKey, $lazyValue);
        return self::$cache[$fixerLoops][$internalKey] ?? null;
    }
    private static function setIfNotCached(int $fixerLoops, string $internalKey, Closure $lazyValue) : void {
        if (array_key_exists($fixerLoops, self::$cache) && array_key_exists($internalKey, self::$cache[$fixerLoops])) {
            return;
        }
        self::$cache[$fixerLoops][$internalKey] = $lazyValue();
        if ($fixerLoops > 0) {
            unset(self::$cache[$fixerLoops - 1]);
        }
    }

}

Classes

Title Deprecated Summary
SniffLocalCache @internal
RSS feed
Powered by Drupal