Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SemicolonSpacingSniff.php
Go to the documentation of this file.
1 <?php
6 namespace Magento\Sniffs\Less;
7 
8 use PHP_CodeSniffer\Sniffs\Sniff;
9 use PHP_CodeSniffer\Files\File;
10 
19 class SemicolonSpacingSniff implements Sniff
20 {
27 
33  private $styleSymbolsToSkip = [
38  ];
39 
44  private $styleCodesToSkip = [T_ASPERAND, T_COLON, T_OPEN_PARENTHESIS, T_CLOSE_PARENTHESIS];
45 
49  public function register()
50  {
51  return [T_STYLE];
52  }
53 
57  public function process(File $phpcsFile, $stackPtr)
58  {
59  $tokens = $phpcsFile->getTokens();
60 
61  if (in_array($tokens[$stackPtr]['content'], $this->styleSymbolsToSkip)) {
62  return;
63  }
64 
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, ";");
68  }
69 
70  $this->validateSemicolon($phpcsFile, $stackPtr, $tokens, $semicolonPtr);
71  $this->validateSpaces($phpcsFile, $stackPtr, $tokens, $semicolonPtr);
72  }
73 
81  private function validateSemicolon(File $phpcsFile, $stackPtr, array $tokens, $semicolonPtr)
82  {
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'])
86  ) {
87  $error = 'Style definitions must end with a semicolon';
88  $phpcsFile->addError($error, $stackPtr, 'NotAtEnd');
89  }
90  }
91 
99  private function validateSpaces(File $phpcsFile, $stackPtr, array $tokens, $semicolonPtr)
100  {
101  if (!isset($tokens[($semicolonPtr - 1)])) {
102  return;
103  }
104 
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';
108  $data = [$length];
109  $phpcsFile->addError($error, $stackPtr, 'SpaceFound', $data);
110  }
111  }
112 }
$tokens
Definition: cards_list.phtml:9