diff --git a/Magento2/Sniffs/Less/ColonSpacingSniff.php b/Magento2/Sniffs/Less/ColonSpacingSniff.php index dd8fee7f..505c44fd 100644 --- a/Magento2/Sniffs/Less/ColonSpacingSniff.php +++ b/Magento2/Sniffs/Less/ColonSpacingSniff.php @@ -56,12 +56,7 @@ public function process(File $phpcsFile, $stackPtr) */ private function needValidateSpaces(File $phpcsFile, $stackPtr, $tokens) { - $nextSemicolon = $phpcsFile->findNext(T_SEMICOLON, $stackPtr); - - if (false === $nextSemicolon - || ($tokens[$nextSemicolon]['line'] !== $tokens[$stackPtr]['line']) - || TokenizerSymbolsInterface::BITWISE_AND === $tokens[$stackPtr - 1]['content'] - ) { + if (TokenizerSymbolsInterface::BITWISE_AND === $tokens[$stackPtr - 1]['content']) { return false; } @@ -80,7 +75,10 @@ private function needValidateSpaces(File $phpcsFile, $stackPtr, $tokens) } /** - * Validate Colon Spacing according to requirements + * Validate Colon Spacing according to requirements: + * - No spaces before colon + * - Exactly 1 space after colon + * - No property definition scattered among several lines * * @param File $phpcsFile * @param int $stackPtr @@ -94,19 +92,22 @@ private function validateSpaces(File $phpcsFile, $stackPtr, array $tokens) $phpcsFile->addError('There must be no space before a colon in a style definition', $stackPtr, 'Before'); } + $nextSemicolon = $phpcsFile->findNext(T_SEMICOLON, $stackPtr); + if (false !== $nextSemicolon && ($tokens[$nextSemicolon]['line'] !== $tokens[$stackPtr]['line'])) { + $error = 'Expected 1 space after colon in style definition; newline found'; + $phpcsFile->addError($error, $stackPtr, 'AfterNewline'); + } + if (T_WHITESPACE !== $tokens[($stackPtr + 1)]['code']) { $phpcsFile->addError('Expected 1 space after colon in style definition; 0 found', $stackPtr, 'NoneAfter'); } else { $content = $tokens[($stackPtr + 1)]['content']; - if (false === strpos($content, $phpcsFile->eolChar)) { + if (false !== strpos($content, ' ')) { $length = strlen($content); if ($length !== 1) { $error = sprintf('Expected 1 space after colon in style definition; %s found', $length); $phpcsFile->addError($error, $stackPtr, 'After'); } - } else { - $error = 'Expected 1 space after colon in style definition; newline found'; - $phpcsFile->addError($error, $stackPtr, 'AfterNewline'); } } } diff --git a/Magento2/Tests/Less/ColonSpacingUnitTest.less b/Magento2/Tests/Less/ColonSpacingUnitTest.less index d888af2e..37de49e4 100644 --- a/Magento2/Tests/Less/ColonSpacingUnitTest.less +++ b/Magento2/Tests/Less/ColonSpacingUnitTest.less @@ -13,7 +13,7 @@ div#foo { } .blah { - foo :'xyz'; + foo :'jkl'; } .foo { diff --git a/Magento2/Tests/Less/ColonSpacingUnitTest.php b/Magento2/Tests/Less/ColonSpacingUnitTest.php index b50e47d0..81b596e5 100644 --- a/Magento2/Tests/Less/ColonSpacingUnitTest.php +++ b/Magento2/Tests/Less/ColonSpacingUnitTest.php @@ -16,6 +16,7 @@ public function getErrorList() 8 => 1, 12 => 1, 16 => 2, + 20 => 1, ]; }