annotate vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Files/FileEncodingSniff.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2 /**
Chris@17 3 * \Drupal\Sniffs\Files\FileEncodingSniff.
Chris@0 4 *
Chris@0 5 * @category PHP
Chris@0 6 * @package PHP_CodeSniffer
Chris@0 7 * @author Klaus Purer <klaus.purer@mail.com>
Chris@0 8 * @copyright 2016 Klaus Purer
Chris@0 9 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
Chris@0 10 * @link http://pear.php.net/package/PHP_CodeSniffer
Chris@0 11 */
Chris@0 12
Chris@17 13 namespace Drupal\Sniffs\Files;
Chris@17 14
Chris@17 15 use PHP_CodeSniffer\Files\File;
Chris@17 16 use PHP_CodeSniffer\Sniffs\Sniff;
Chris@17 17
Chris@0 18 /**
Chris@17 19 * \Drupal\Sniffs\Files\FileEncodingSniff.
Chris@0 20 *
Chris@0 21 * Validates the encoding of a file against a white list of allowed encodings.
Chris@0 22 *
Chris@0 23 * @category PHP
Chris@0 24 * @package PHP_CodeSniffer
Chris@0 25 * @author Klaus Purer <klaus.purer@mail.com>
Chris@0 26 * @copyright 2016 Klaus Purer
Chris@0 27 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
Chris@0 28 * @version Release: @package_version@
Chris@0 29 * @link http://pear.php.net/package/PHP_CodeSniffer
Chris@0 30 */
Chris@17 31 class FileEncodingSniff implements Sniff
Chris@0 32 {
Chris@0 33
Chris@0 34 /**
Chris@0 35 * List of encodings that files may be encoded with.
Chris@0 36 *
Chris@0 37 * Any other detected encodings will throw a warning.
Chris@0 38 *
Chris@0 39 * @var array
Chris@0 40 */
Chris@0 41 public $allowedEncodings = array('UTF-8');
Chris@0 42
Chris@0 43
Chris@0 44 /**
Chris@0 45 * Returns an array of tokens this test wants to listen for.
Chris@0 46 *
Chris@0 47 * @return array
Chris@0 48 */
Chris@0 49 public function register()
Chris@0 50 {
Chris@0 51 return array(
Chris@0 52 T_INLINE_HTML,
Chris@0 53 T_OPEN_TAG,
Chris@0 54 );
Chris@0 55
Chris@0 56 }//end register()
Chris@0 57
Chris@0 58
Chris@0 59 /**
Chris@0 60 * Processes this sniff, when one of its tokens is encountered.
Chris@0 61 *
Chris@17 62 * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.
Chris@17 63 * @param int $stackPtr The position of the current token in
Chris@17 64 * the stack passed in $tokens.
Chris@0 65 *
Chris@0 66 * @return void
Chris@0 67 */
Chris@17 68 public function process(File $phpcsFile, $stackPtr)
Chris@0 69 {
Chris@0 70 // Not all PHP installs have the multi byte extension - nothing we can do.
Chris@0 71 if (function_exists('mb_check_encoding') === false) {
Chris@0 72 return $phpcsFile->numTokens;
Chris@0 73 }
Chris@0 74
Chris@0 75 $fileContent = $phpcsFile->getTokensAsString(0, $phpcsFile->numTokens);
Chris@0 76
Chris@0 77 $validEncodingFound = false;
Chris@0 78 foreach ($this->allowedEncodings as $encoding) {
Chris@0 79 if (mb_check_encoding($fileContent, $encoding) === true) {
Chris@0 80 $validEncodingFound = true;
Chris@0 81 }
Chris@0 82 }
Chris@0 83
Chris@0 84 if ($validEncodingFound === false) {
Chris@0 85 $warning = 'File encoding is invalid, expected %s';
Chris@0 86 $data = array(implode(' or ', $this->allowedEncodings));
Chris@0 87 $phpcsFile->addWarning($warning, $stackPtr, 'InvalidEncoding', $data);
Chris@0 88 }
Chris@0 89
Chris@0 90 return $phpcsFile->numTokens;
Chris@0 91
Chris@0 92 }//end process()
Chris@0 93
Chris@0 94
Chris@0 95 }//end class