annotate vendor/drupal/coder/coder_sniffer/Drupal/Sniffs/Files/FileEncodingSniff.php @ 0:4c8ae668cc8c

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