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
Namespace
PHP_CodeSniffer\Standards\PSR12\Sniffs\TraitsCode
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
}