You are here

public function TxtFileLineLengthSniff::process in Coder 8.3.x

Same name and namespace in other branches
  1. 8.3 coder_sniffer/Drupal/Sniffs/Files/TxtFileLineLengthSniff.php \Drupal\Sniffs\Files\TxtFileLineLengthSniff::process()
  2. 8.2 coder_sniffer/Drupal/Sniffs/Files/TxtFileLineLengthSniff.php \Drupal\Sniffs\Files\TxtFileLineLengthSniff::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/Files/TxtFileLineLengthSniff.php, line 50

Class

TxtFileLineLengthSniff
\Drupal\Sniffs\Files\TxtFileLineLengthSniff.

Namespace

Drupal\Sniffs\Files

Code

public function process(File $phpcsFile, $stackPtr) {
  $fileExtension = strtolower(substr($phpcsFile
    ->getFilename(), -3));
  if ($fileExtension === 'txt' || $fileExtension === '.md') {
    $tokens = $phpcsFile
      ->getTokens();
    $content = rtrim($tokens[$stackPtr]['content']);
    $lineLength = mb_strlen($content, 'UTF-8');
    if ($lineLength > 80) {

      // Often text files contain long URLs that need to be preceded
      // with certain textual elements that are significant for
      // preserving the formatting of the document - e.g. a long link
      // in a bulleted list. If we find that the line does not contain
      // any spaces after the 40th character we'll allow it.
      if (preg_match('/\\s+/', mb_substr($content, 40)) === 0) {
        return;
      }

      // Lines without spaces are allowed to be longer.
      // Markdown allowed to be longer for lines
      // - without spaces
      // - starting with #
      // - starting with | (tables)
      // - containing a link.
      if (preg_match('/^([^ ]+$|#|\\||.*\\[.+\\]\\(.+\\))/', $content) === 0) {
        $data = [
          80,
          $lineLength,
        ];
        $warning = 'Line exceeds %s characters; contains %s characters';
        $phpcsFile
          ->addWarning($warning, $stackPtr, 'TooLong', $data);
      }
    }

    //end if
  }

  //end if
}