74 lines
2.2 KiB
PHP
74 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace CakePHP\Sniffs\PHP;
|
|
|
|
use PHP_CodeSniffer\Files\File;
|
|
use PHP_CodeSniffer\Sniffs\Sniff;
|
|
use PHP_CodeSniffer\Util\Tokens;
|
|
|
|
/**
|
|
* Adds trailing commas in multiline arrays.
|
|
*
|
|
* Heredoc patch taken from slevomat/coding-standard project.
|
|
*
|
|
* @author Mark Scherer
|
|
* @license MIT
|
|
*/
|
|
class CommaAfterArrayItemSniff implements Sniff
|
|
{
|
|
/**
|
|
* @var bool
|
|
*/
|
|
public $enableAfterHeredoc = PHP_VERSION_ID >= 70300;
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function register()
|
|
{
|
|
return [
|
|
T_OPEN_SHORT_ARRAY,
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function process(File $phpcsFile, $stackPtr)
|
|
{
|
|
$tokens = $phpcsFile->getTokens();
|
|
$arrayToken = $tokens[$stackPtr];
|
|
$closeParenthesisPointer = $arrayToken['bracket_closer'];
|
|
$openParenthesisToken = $tokens[$arrayToken['bracket_opener']];
|
|
$closeParenthesisToken = $tokens[$closeParenthesisPointer];
|
|
if ($openParenthesisToken['line'] === $closeParenthesisToken['line']) {
|
|
return;
|
|
}
|
|
|
|
$previousToCloseParenthesisPointer = $phpcsFile->findPrevious(Tokens::$emptyTokens, $closeParenthesisPointer - 1, 0, true);
|
|
$previousToCloseParenthesisToken = $tokens[$previousToCloseParenthesisPointer];
|
|
if (
|
|
$previousToCloseParenthesisPointer === $arrayToken['bracket_opener']
|
|
|| $previousToCloseParenthesisToken['code'] === T_COMMA
|
|
|| $closeParenthesisToken['line'] === $previousToCloseParenthesisToken['line']
|
|
) {
|
|
return;
|
|
}
|
|
if (!$this->enableAfterHeredoc && in_array($previousToCloseParenthesisToken['code'], [T_END_HEREDOC, T_END_NOWDOC], true)) {
|
|
return;
|
|
}
|
|
$fix = $phpcsFile->addFixableError(
|
|
'Multi-line arrays must have a trailing comma after the last element.',
|
|
$previousToCloseParenthesisPointer,
|
|
'MissingTrailingComma'
|
|
);
|
|
if (!$fix) {
|
|
return;
|
|
}
|
|
|
|
$phpcsFile->fixer->beginChangeset();
|
|
$phpcsFile->fixer->addContent($previousToCloseParenthesisPointer, ',');
|
|
$phpcsFile->fixer->endChangeset();
|
|
}
|
|
}
|