SlevomatCodingStandard\Sniffs\Namespaces\ReferenceUsedNamesOnlySniff::process PHP Method

process() public method

public process ( PHP_CodeSniffer_File $phpcsFile, integer $openTagPointer )
$phpcsFile PHP_CodeSniffer_File
$openTagPointer integer
    public function process(PHP_CodeSniffer_File $phpcsFile, $openTagPointer)
    {
        $tokens = $phpcsFile->getTokens();
        $referencedNames = ReferencedNameHelper::getAllReferencedNames($phpcsFile, $openTagPointer);
        foreach ($referencedNames as $referencedName) {
            $name = $referencedName->getNameAsReferencedInFile();
            $pointer = $referencedName->getPointer();
            $canonicalName = NamespaceHelper::normalizeToCanonicalName($name);
            if (NamespaceHelper::isFullyQualifiedName($name)) {
                $isExceptionByName = StringHelper::endsWith($name, 'Exception') || $name === '\\Throwable' || StringHelper::endsWith($name, 'Error') && !NamespaceHelper::hasNamespace($name) || in_array($canonicalName, $this->getSpecialExceptionNames(), true);
                $inIgnoredNames = in_array($canonicalName, $this->getIgnoredNames(), true);
                if ($this->isClassRequiredToBeUsed($name) && (!$this->allowFullyQualifiedExceptions || !$isExceptionByName || $inIgnoredNames)) {
                    $previousKeywordPointer = TokenHelper::findPreviousExcluding($phpcsFile, array_merge(TokenHelper::$nameTokenCodes, [T_WHITESPACE, T_COMMA]), $pointer - 1);
                    if (!in_array($tokens[$previousKeywordPointer]['code'], $this->getFullyQualifiedKeywords(), true)) {
                        if (!NamespaceHelper::hasNamespace($name) && NamespaceHelper::findCurrentNamespaceName($phpcsFile, $pointer) === null) {
                            $phpcsFile->addError(sprintf('Type %s should not be referenced via a fully qualified name, but via an unqualified name without the leading \\, because the file does not have a namespace and the type cannot be put in a use statement', $name), $pointer, self::CODE_REFERENCE_VIA_FULLY_QUALIFIED_NAME_WITHOUT_NAMESPACE);
                        } else {
                            $phpcsFile->addError(sprintf('Type %s should not be referenced via a fully qualified name, but via a use statement', $name), $pointer, self::CODE_REFERENCE_VIA_FULLY_QUALIFIED_NAME);
                        }
                    }
                }
            } elseif (!$this->allowPartialUses) {
                if (NamespaceHelper::isQualifiedName($name)) {
                    $phpcsFile->addError(sprintf('Partial use statements are not allowed, but referencing %s found', $name), $pointer, self::CODE_PARTIAL_USE);
                }
            }
        }
    }