You are here

public function Drupal_Sniffs_Formatting_MultiLineAssignmentSniff::process in Coder 7.2

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

Parameters

PHP_CodeSniffer_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

Drupal_Sniffs_Formatting_MultiLineAssignmentSniff
Drupal_Sniffs_Formatting_MultiLineAssignmentSniff.

Code

public function process(PHP_CodeSniffer_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;
  }
  if ($tokens[$next]['line'] !== $tokens[$stackPtr]['line']) {
    $error = 'Multi-line assignments must have the equal sign on the second line';
    $phpcsFile
      ->addError($error, $stackPtr);
    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);
  }
}