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

Breadcrumb

  1. Drupal Core 11.1.x
  2. UseDeclarationSniff.php

function UseDeclarationSniff::processUseGroup

Processes a group use statement.

Parameters

\PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.:

int $stackPtr The position of the current token in the: stack passed in $tokens.

Return value

void

1 call to UseDeclarationSniff::processUseGroup()
UseDeclarationSniff::process in vendor/squizlabs/php_codesniffer/src/Standards/PSR12/Sniffs/Traits/UseDeclarationSniff.php
Processes this test, when one of its tokens is encountered.

File

vendor/squizlabs/php_codesniffer/src/Standards/PSR12/Sniffs/Traits/UseDeclarationSniff.php, line 315

Class

UseDeclarationSniff

Namespace

PHP_CodeSniffer\Standards\PSR12\Sniffs\Traits

Code

protected function processUseGroup(File $phpcsFile, $stackPtr) {
    $tokens = $phpcsFile->getTokens();
    $opener = $tokens[$stackPtr]['scope_opener'];
    $closer = $tokens[$stackPtr]['scope_closer'];
    if ($tokens[$opener]['line'] !== $tokens[$stackPtr]['line']) {
        $error = 'The opening brace of a trait import statement must be on the same line as the USE keyword';
        // Figure out if we can fix this error.
        $canFix = true;
        for ($i = $stackPtr + 1; $i < $opener; $i++) {
            if ($tokens[$i]['line'] !== $tokens[$i + 1]['line'] && $tokens[$i]['code'] !== T_WHITESPACE) {
                $canFix = false;
                break;
            }
        }
        if ($canFix === true) {
            $fix = $phpcsFile->addFixableError($error, $opener, 'OpenBraceNewLine');
            if ($fix === true) {
                $phpcsFile->fixer
                    ->beginChangeset();
                for ($i = $stackPtr + 1; $i < $opener; $i++) {
                    if ($tokens[$i]['line'] !== $tokens[$i + 1]['line']) {
                        // Everything should have a single space around it.
                        $phpcsFile->fixer
                            ->replaceToken($i, ' ');
                    }
                }
                $phpcsFile->fixer
                    ->endChangeset();
            }
        }
        else {
            $phpcsFile->addError($error, $opener, 'OpenBraceNewLine');
        }
    }
    
    //end if
    $error = 'Expected 1 space before opening brace in trait import statement; %s found';
    if ($tokens[$opener - 1]['code'] !== T_WHITESPACE) {
        $data = [
            '0',
        ];
        $fix = $phpcsFile->addFixableError($error, $opener, 'SpaceBeforeOpeningBrace', $data);
        if ($fix === true) {
            $phpcsFile->fixer
                ->addContentBefore($opener, ' ');
        }
    }
    else {
        if ($tokens[$opener - 1]['content'] !== ' ') {
            $prev = $phpcsFile->findPrevious(T_WHITESPACE, $opener - 1, null, true);
            if ($tokens[$prev]['line'] !== $tokens[$opener]['line']) {
                $found = 'newline';
            }
            else {
                $found = $tokens[$opener - 1]['length'];
            }
            $data = [
                $found,
            ];
            $fix = $phpcsFile->addFixableError($error, $opener, 'SpaceBeforeOpeningBrace', $data);
            if ($fix === true) {
                if ($found === 'newline') {
                    $phpcsFile->fixer
                        ->beginChangeset();
                    for ($x = $opener - 1; $x > $prev; $x--) {
                        $phpcsFile->fixer
                            ->replaceToken($x, '');
                    }
                    $phpcsFile->fixer
                        ->addContentBefore($opener, ' ');
                    $phpcsFile->fixer
                        ->endChangeset();
                }
                else {
                    $phpcsFile->fixer
                        ->replaceToken($opener - 1, ' ');
                }
            }
        }
    }
    
    //end if
    $next = $phpcsFile->findNext(Tokens::$emptyTokens, $opener + 1, $closer - 1, true);
    if ($next !== false && $tokens[$next]['line'] !== $tokens[$opener]['line'] + 1) {
        $error = 'First trait conflict resolution statement must be on the line after the opening brace';
        $nextNonWs = $phpcsFile->findNext(T_WHITESPACE, $opener + 1, $closer - 1, true);
        if ($nextNonWs !== $next) {
            $phpcsFile->addError($error, $opener, 'SpaceAfterOpeningBrace');
        }
        else {
            $fix = $phpcsFile->addFixableError($error, $opener, 'SpaceAfterOpeningBrace');
            if ($fix === true) {
                $phpcsFile->fixer
                    ->beginChangeset();
                for ($x = $opener + 1; $x < $next; $x++) {
                    if ($tokens[$x]['line'] === $tokens[$next]['line']) {
                        // Preserve indent.
                        break;
                    }
                    $phpcsFile->fixer
                        ->replaceToken($x, '');
                }
                $phpcsFile->fixer
                    ->addNewline($opener);
                $phpcsFile->fixer
                    ->endChangeset();
            }
        }
    }
    
    //end if
    for ($i = $stackPtr + 1; $i < $opener; $i++) {
        if ($tokens[$i]['code'] !== T_COMMA) {
            continue;
        }
        if ($tokens[$i - 1]['code'] === T_WHITESPACE) {
            $error = 'Expected no space before comma in trait import statement; %s found';
            $data = [
                $tokens[$i - 1]['length'],
            ];
            $fix = $phpcsFile->addFixableError($error, $i, 'SpaceBeforeComma', $data);
            if ($fix === true) {
                $phpcsFile->fixer
                    ->replaceToken($i - 1, '');
            }
        }
        $error = 'Expected 1 space after comma in trait import statement; %s found';
        if ($tokens[$i + 1]['code'] !== T_WHITESPACE) {
            $data = [
                '0',
            ];
            $fix = $phpcsFile->addFixableError($error, $i, 'SpaceAfterComma', $data);
            if ($fix === true) {
                $phpcsFile->fixer
                    ->addContent($i, ' ');
            }
        }
        else {
            if ($tokens[$i + 1]['content'] !== ' ') {
                $next = $phpcsFile->findNext(T_WHITESPACE, $i + 1, $opener, true);
                if ($tokens[$next]['line'] !== $tokens[$i]['line']) {
                    $found = 'newline';
                }
                else {
                    $found = $tokens[$i + 1]['length'];
                }
                $data = [
                    $found,
                ];
                $fix = $phpcsFile->addFixableError($error, $i, 'SpaceAfterComma', $data);
                if ($fix === true) {
                    if ($found === 'newline') {
                        $phpcsFile->fixer
                            ->beginChangeset();
                        for ($x = $i + 1; $x < $next; $x++) {
                            $phpcsFile->fixer
                                ->replaceToken($x, '');
                        }
                        $phpcsFile->fixer
                            ->addContent($i, ' ');
                        $phpcsFile->fixer
                            ->endChangeset();
                    }
                    else {
                        $phpcsFile->fixer
                            ->replaceToken($i + 1, ' ');
                    }
                }
            }
        }
        
        //end if
    }
    
    //end for
    for ($i = $opener + 1; $i < $closer; $i++) {
        if ($tokens[$i]['code'] === T_INSTEADOF) {
            $error = 'Expected 1 space before INSTEADOF in trait import statement; %s found';
            if ($tokens[$i - 1]['code'] !== T_WHITESPACE) {
                $data = [
                    '0',
                ];
                $fix = $phpcsFile->addFixableError($error, $i, 'SpaceBeforeInsteadof', $data);
                if ($fix === true) {
                    $phpcsFile->fixer
                        ->addContentBefore($i, ' ');
                }
            }
            else {
                if ($tokens[$i - 1]['content'] !== ' ') {
                    $prev = $phpcsFile->findPrevious(T_WHITESPACE, $i - 1, $opener, true);
                    if ($tokens[$prev]['line'] !== $tokens[$i]['line']) {
                        $found = 'newline';
                    }
                    else {
                        $found = $tokens[$i - 1]['length'];
                    }
                    $data = [
                        $found,
                    ];
                    $prevNonWs = $phpcsFile->findPrevious(Tokens::$emptyTokens, $i - 1, $opener, true);
                    if ($prevNonWs !== $prev) {
                        $phpcsFile->addError($error, $i, 'SpaceBeforeInsteadof', $data);
                    }
                    else {
                        $fix = $phpcsFile->addFixableError($error, $i, 'SpaceBeforeInsteadof', $data);
                        if ($fix === true) {
                            if ($found === 'newline') {
                                $phpcsFile->fixer
                                    ->beginChangeset();
                                for ($x = $i - 1; $x > $prev; $x--) {
                                    $phpcsFile->fixer
                                        ->replaceToken($x, '');
                                }
                                $phpcsFile->fixer
                                    ->addContentBefore($i, ' ');
                                $phpcsFile->fixer
                                    ->endChangeset();
                            }
                            else {
                                $phpcsFile->fixer
                                    ->replaceToken($i - 1, ' ');
                            }
                        }
                    }
                }
            }
            
            //end if
            $error = 'Expected 1 space after INSTEADOF in trait import statement; %s found';
            if ($tokens[$i + 1]['code'] !== T_WHITESPACE) {
                $data = [
                    '0',
                ];
                $fix = $phpcsFile->addFixableError($error, $i, 'SpaceAfterInsteadof', $data);
                if ($fix === true) {
                    $phpcsFile->fixer
                        ->addContent($i, ' ');
                }
            }
            else {
                if ($tokens[$i + 1]['content'] !== ' ') {
                    $next = $phpcsFile->findNext(T_WHITESPACE, $i + 1, $closer, true);
                    if ($tokens[$next]['line'] !== $tokens[$i]['line']) {
                        $found = 'newline';
                    }
                    else {
                        $found = $tokens[$i + 1]['length'];
                    }
                    $data = [
                        $found,
                    ];
                    $nextNonWs = $phpcsFile->findNext(Tokens::$emptyTokens, $i + 1, $closer, true);
                    if ($nextNonWs !== $next) {
                        $phpcsFile->addError($error, $i, 'SpaceAfterInsteadof', $data);
                    }
                    else {
                        $fix = $phpcsFile->addFixableError($error, $i, 'SpaceAfterInsteadof', $data);
                        if ($fix === true) {
                            if ($found === 'newline') {
                                $phpcsFile->fixer
                                    ->beginChangeset();
                                for ($x = $i + 1; $x < $next; $x++) {
                                    $phpcsFile->fixer
                                        ->replaceToken($x, '');
                                }
                                $phpcsFile->fixer
                                    ->addContent($i, ' ');
                                $phpcsFile->fixer
                                    ->endChangeset();
                            }
                            else {
                                $phpcsFile->fixer
                                    ->replaceToken($i + 1, ' ');
                            }
                        }
                    }
                }
            }
            
            //end if
        }
        
        //end if
        if ($tokens[$i]['code'] === T_AS) {
            $error = 'Expected 1 space before AS in trait import statement; %s found';
            if ($tokens[$i - 1]['code'] !== T_WHITESPACE) {
                $data = [
                    '0',
                ];
                $fix = $phpcsFile->addFixableError($error, $i, 'SpaceBeforeAs', $data);
                if ($fix === true) {
                    $phpcsFile->fixer
                        ->addContentBefore($i, ' ');
                }
            }
            else {
                if ($tokens[$i - 1]['content'] !== ' ') {
                    $prev = $phpcsFile->findPrevious(T_WHITESPACE, $i - 1, $opener, true);
                    if ($tokens[$prev]['line'] !== $tokens[$i]['line']) {
                        $found = 'newline';
                    }
                    else {
                        $found = $tokens[$i - 1]['length'];
                    }
                    $data = [
                        $found,
                    ];
                    $prevNonWs = $phpcsFile->findPrevious(Tokens::$emptyTokens, $i - 1, $opener, true);
                    if ($prevNonWs !== $prev) {
                        $phpcsFile->addError($error, $i, 'SpaceBeforeAs', $data);
                    }
                    else {
                        $fix = $phpcsFile->addFixableError($error, $i, 'SpaceBeforeAs', $data);
                        if ($fix === true) {
                            if ($found === 'newline') {
                                $phpcsFile->fixer
                                    ->beginChangeset();
                                for ($x = $i - 1; $x > $prev; $x--) {
                                    $phpcsFile->fixer
                                        ->replaceToken($x, '');
                                }
                                $phpcsFile->fixer
                                    ->addContentBefore($i, ' ');
                                $phpcsFile->fixer
                                    ->endChangeset();
                            }
                            else {
                                $phpcsFile->fixer
                                    ->replaceToken($i - 1, ' ');
                            }
                        }
                    }
                }
            }
            
            //end if
            $error = 'Expected 1 space after AS in trait import statement; %s found';
            if ($tokens[$i + 1]['code'] !== T_WHITESPACE) {
                $data = [
                    '0',
                ];
                $fix = $phpcsFile->addFixableError($error, $i, 'SpaceAfterAs', $data);
                if ($fix === true) {
                    $phpcsFile->fixer
                        ->addContent($i, ' ');
                }
            }
            else {
                if ($tokens[$i + 1]['content'] !== ' ') {
                    $next = $phpcsFile->findNext(T_WHITESPACE, $i + 1, $closer, true);
                    if ($tokens[$next]['line'] !== $tokens[$i]['line']) {
                        $found = 'newline';
                    }
                    else {
                        $found = $tokens[$i + 1]['length'];
                    }
                    $data = [
                        $found,
                    ];
                    $nextNonWs = $phpcsFile->findNext(Tokens::$emptyTokens, $i + 1, $closer, true);
                    if ($nextNonWs !== $next) {
                        $phpcsFile->addError($error, $i, 'SpaceAfterAs', $data);
                    }
                    else {
                        $fix = $phpcsFile->addFixableError($error, $i, 'SpaceAfterAs', $data);
                        if ($fix === true) {
                            if ($found === 'newline') {
                                $phpcsFile->fixer
                                    ->beginChangeset();
                                for ($x = $i + 1; $x < $next; $x++) {
                                    $phpcsFile->fixer
                                        ->replaceToken($x, '');
                                }
                                $phpcsFile->fixer
                                    ->addContent($i, ' ');
                                $phpcsFile->fixer
                                    ->endChangeset();
                            }
                            else {
                                $phpcsFile->fixer
                                    ->replaceToken($i + 1, ' ');
                            }
                        }
                    }
                }
            }
            
            //end if
        }
        
        //end if
        if ($tokens[$i]['code'] === T_SEMICOLON) {
            if ($tokens[$i - 1]['code'] === T_WHITESPACE) {
                $error = 'Expected no space before semicolon in trait import statement; %s found';
                $data = [
                    $tokens[$i - 1]['length'],
                ];
                $fix = $phpcsFile->addFixableError($error, $i, 'SpaceBeforeSemicolon', $data);
                if ($fix === true) {
                    $phpcsFile->fixer
                        ->replaceToken($i - 1, '');
                }
            }
            $next = $phpcsFile->findNext(Tokens::$emptyTokens, $i + 1, $closer - 1, true);
            if ($next !== false && $tokens[$next]['line'] === $tokens[$i]['line']) {
                $error = 'Each trait conflict resolution statement must be on a line by itself';
                $nextNonWs = $phpcsFile->findNext(T_WHITESPACE, $i + 1, $closer - 1, true);
                if ($nextNonWs !== $next) {
                    $phpcsFile->addError($error, $i, 'ConflictSameLine');
                }
                else {
                    $fix = $phpcsFile->addFixableError($error, $i, 'ConflictSameLine');
                    if ($fix === true) {
                        $phpcsFile->fixer
                            ->beginChangeset();
                        if ($tokens[$i + 1]['code'] === T_WHITESPACE) {
                            $phpcsFile->fixer
                                ->replaceToken($i + 1, '');
                        }
                        $phpcsFile->fixer
                            ->addNewline($i);
                        $phpcsFile->fixer
                            ->endChangeset();
                    }
                }
            }
        }
        
        //end if
    }
    
    //end for
    $prev = $phpcsFile->findPrevious(Tokens::$emptyTokens, $closer - 1, $opener + 1, true);
    if ($prev !== false && $tokens[$prev]['line'] !== $tokens[$closer]['line'] - 1) {
        $error = 'Closing brace must be on the line after the last trait conflict resolution statement';
        $prevNonWs = $phpcsFile->findPrevious(T_WHITESPACE, $closer - 1, $opener + 1, true);
        if ($prevNonWs !== $prev) {
            $phpcsFile->addError($error, $closer, 'SpaceBeforeClosingBrace');
        }
        else {
            $fix = $phpcsFile->addFixableError($error, $closer, 'SpaceBeforeClosingBrace');
            if ($fix === true) {
                $phpcsFile->fixer
                    ->beginChangeset();
                for ($x = $closer - 1; $x > $prev; $x--) {
                    if ($tokens[$x]['line'] === $tokens[$closer]['line']) {
                        // Preserve indent.
                        continue;
                    }
                    $phpcsFile->fixer
                        ->replaceToken($x, '');
                }
                $phpcsFile->fixer
                    ->addNewline($prev);
                $phpcsFile->fixer
                    ->endChangeset();
            }
        }
    }
    
    //end if
}
RSS feed
Powered by Drupal