8 use PHP_CodeSniffer\Sniffs\Sniff;
9 use PHP_CodeSniffer\Files\File;
33 private $styleSymbolsToSkip = [
44 private $styleCodesToSkip = [T_ASPERAND, T_COLON, T_OPEN_PARENTHESIS, T_CLOSE_PARENTHESIS];
49 public function register()
57 public function process(File $phpcsFile, $stackPtr)
59 $tokens = $phpcsFile->getTokens();
61 if (in_array(
$tokens[$stackPtr][
'content'], $this->styleSymbolsToSkip)) {
65 $semicolonPtr = $phpcsFile->findNext(T_SEMICOLON, ($stackPtr + 1));
66 if (
$tokens[$semicolonPtr][
'line'] !==
$tokens[$stackPtr][
'line']) {
67 $semicolonPtr = $phpcsFile->findNext(T_STYLE, ($stackPtr + 1),
null,
false,
";");
70 $this->validateSemicolon($phpcsFile, $stackPtr,
$tokens, $semicolonPtr);
71 $this->validateSpaces($phpcsFile, $stackPtr,
$tokens, $semicolonPtr);
81 private function validateSemicolon(File $phpcsFile, $stackPtr, array
$tokens, $semicolonPtr)
83 if ((
false === $semicolonPtr ||
$tokens[$semicolonPtr][
'line'] !==
$tokens[$stackPtr][
'line'])
84 && (isset(
$tokens[$stackPtr - 1]) && !in_array(
$tokens[$stackPtr - 1][
'code'], $this->styleCodesToSkip))
85 && (T_COLON !==
$tokens[$stackPtr + 1][
'code'])
87 $error =
'Style definitions must end with a semicolon';
88 $phpcsFile->addError($error, $stackPtr,
'NotAtEnd');
99 private function validateSpaces(File $phpcsFile, $stackPtr, array
$tokens, $semicolonPtr)
101 if (!isset(
$tokens[($semicolonPtr - 1)])) {
105 if (
$tokens[($semicolonPtr - 1)][
'code'] === T_WHITESPACE) {
106 $length = strlen(
$tokens[($semicolonPtr - 1)][
'content']);
107 $error =
'Expected 0 spaces before semicolon in style definition; %s found';
109 $phpcsFile->addError($error, $stackPtr,
'SpaceFound',
$data);
process(File $phpcsFile, $stackPtr)