You are here

public function MultiLineAssignmentSniff::process in Coder 8.2

Same name and namespace in other branches
  1. 8.3 coder_sniffer/Drupal/Sniffs/Formatting/MultiLineAssignmentSniff.php \Drupal\Sniffs\Formatting\MultiLineAssignmentSniff::process()
  2. 8.3.x coder_sniffer/Drupal/Sniffs/Formatting/MultiLineAssignmentSniff.php \Drupal\Sniffs\Formatting\MultiLineAssignmentSniff::process()

Processes this test, when one of its tokens is encountered.

Parameters

\PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.:

int $stackPtr The position of the current token: in the stack passed in $tokens.

Return value

void

File

coder_sniffer/Drupal/Sniffs/Formatting/MultiLineAssignmentSniff.php, line 53

Class

MultiLineAssignmentSniff
\Drupal\Sniffs\Formatting\MultiLineAssignmentSniff.

Namespace

Drupal\Sniffs\Formatting

Code

public function process(File $phpcsFile, $stackPtr) {
  $tokens = $phpcsFile
    ->getTokens();

  // Equal sign can't be the last thing on the line.
  $next = $phpcsFile
    ->findNext(T_WHITESPACE, $stackPtr + 1, null, true);
  if ($next === false) {

    // Bad assignment.
    return;
  }

  // Make sure it is the first thing on the line, otherwise we ignore it.
  $prev = $phpcsFile
    ->findPrevious(T_WHITESPACE, $stackPtr - 1, false, true);
  if ($prev === false) {

    // Bad assignment.
    return;
  }
  if ($tokens[$prev]['line'] === $tokens[$stackPtr]['line']) {
    return;
  }

  // Find the required indent based on the ident of the previous line.
  $assignmentIndent = 0;
  $prevLine = $tokens[$prev]['line'];
  for ($i = $prev - 1; $i >= 0; $i--) {
    if ($tokens[$i]['line'] !== $prevLine) {
      $i++;
      break;
    }
  }
  if ($tokens[$i]['code'] === T_WHITESPACE) {
    $assignmentIndent = strlen($tokens[$i]['content']);
  }

  // Find the actual indent.
  $prev = $phpcsFile
    ->findPrevious(T_WHITESPACE, $stackPtr - 1);
  $expectedIndent = $assignmentIndent + 2;
  $foundIndent = strlen($tokens[$prev]['content']);
  if ($foundIndent !== $expectedIndent) {
    $error = "Multi-line assignment not indented correctly; expected {$expectedIndent} spaces but found {$foundIndent}";
    $phpcsFile
      ->addError($error, $stackPtr, 'MultiLineAssignmentIndent');
  }
}