Flitch\Rule\File\MustFollowPsr0::visitToken PHP Method

visitToken() public method

visitToken(): defined by TokenRuleInterface.
See also: TokenRuleInterface::visitToken()
public visitToken ( File $file ) : void
$file Flitch\File\File
return void
    public function visitToken(File $file)
    {
        if (!$file->seekTokenType(T_STRING, false, '{')) {
            return;
        }
        $token = $file->current();
        $psr0Compliant = true;
        if ($token->getNamespace() !== null) {
            $fqcn = $token->getNamespace() . '\\' . $token->getLexeme();
            $path = str_replace('\\', '/', $token->getNamespace()) . '/' . str_replace('_', '/', $token->getLexeme());
        } else {
            $fqcn = $token->getLexeme();
            $path = str_replace('_', '/', $token->getLexeme());
            if ($this->requireVendorNamespace) {
                $psr0Compliant = false;
            }
        }
        if ($psr0Compliant) {
            $expectedPathParts = array_diff(explode('/', $path), array(''));
            $expectedFilename = array_pop($expectedPathParts) . '.php';
            $pathParts = explode('/', str_replace('\\', '/', realpath($file->getFilename())));
            $filename = array_pop($pathParts);
            if ($filename !== $expectedFilename) {
                // Class name should match filename.
                $psr0Compliant = false;
            } elseif (count($expectedPathParts) === 0) {
                // Vendor level namespace required.
                $psr0Compliant = false;
            } else {
                // Path should match namespace structure.
                $pathParts = array_slice($pathParts, -count($expectedPathParts));
                if ($pathParts !== $expectedPathParts) {
                    $psr0Compliant = false;
                }
            }
        }
        if (!$psr0Compliant) {
            $this->addViolation($file, $token->getLine(), $token->getColumn(), sprintf('Class name "%s" is not PSR0 compliant', $fqcn));
        }
    }