Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SelectorDelimiterSniff.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 
20 class SelectorDelimiterSniff implements Sniff
21 {
28 
32  public function register()
33  {
34  return [T_COMMA];
35  }
36 
40  public function process(File $phpcsFile, $stackPtr)
41  {
42  $tokens = $phpcsFile->getTokens();
43 
44  // Check that there's no spaces before delimiter
45  if ($tokens[$stackPtr - 1]['code'] === T_WHITESPACE) {
46  $phpcsFile->addError('Spaces should not be before delimiter', $stackPtr - 1, 'SpacesBeforeDelimiter');
47  }
48 
49  $this->validateParenthesis($phpcsFile, $stackPtr, $tokens);
50  }
51 
58  private function validateParenthesis(File $phpcsFile, $stackPtr, array $tokens)
59  {
60  $nextPtr = $stackPtr + 1;
61 
62  $nextClassPtr = $phpcsFile->findNext(T_STRING_CONCAT, $nextPtr);
63  $nextOpenBrace = $phpcsFile->findNext(T_OPEN_CURLY_BRACKET, $nextPtr);
64 
65  if ($nextClassPtr === false || $nextOpenBrace === false) {
66  return;
67  }
68 
69  $stackLine = $tokens[$stackPtr]['line'];
70  $nextClassLine = $tokens[$nextPtr]['line'];
71  $nextOpenBraceLine = $tokens[$nextOpenBrace]['line'];
72 
73  // Check that each class declaration goes from new line
74  if (($stackLine === $nextClassLine) && ($stackLine === $nextOpenBraceLine)) {
75  $prevParenthesis = $phpcsFile->findPrevious(T_OPEN_PARENTHESIS, $stackPtr);
76  $nextParenthesis = $phpcsFile->findNext(T_OPEN_PARENTHESIS, $stackPtr);
77 
78  if ((false !== $prevParenthesis) && (false !== $nextParenthesis)
79  && ($tokens[$prevParenthesis]['line'] === $tokens[$stackPtr]['line'])
80  && ($tokens[$nextParenthesis]['line'] === $tokens[$stackPtr]['line'])
81  ) {
82  return;
83  }
84 
85  $error = 'Add a line break after each selector delimiter';
86  $phpcsFile->addError($error, $nextOpenBrace, 'LineBreakAfterDelimiter');
87  }
88  }
89 }
$tokens
Definition: cards_list.phtml:9