Chris@0: Chris@0: * @copyright 2016 Klaus Purer Chris@0: * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence Chris@0: * @link http://pear.php.net/package/PHP_CodeSniffer Chris@0: */ Chris@0: Chris@17: namespace Drupal\Sniffs\Files; Chris@17: Chris@17: use PHP_CodeSniffer\Files\File; Chris@17: use PHP_CodeSniffer\Sniffs\Sniff; Chris@17: Chris@0: /** Chris@17: * \Drupal\Sniffs\Files\FileEncodingSniff. Chris@0: * Chris@0: * Validates the encoding of a file against a white list of allowed encodings. Chris@0: * Chris@0: * @category PHP Chris@0: * @package PHP_CodeSniffer Chris@0: * @author Klaus Purer Chris@0: * @copyright 2016 Klaus Purer Chris@0: * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence Chris@0: * @version Release: @package_version@ Chris@0: * @link http://pear.php.net/package/PHP_CodeSniffer Chris@0: */ Chris@17: class FileEncodingSniff implements Sniff Chris@0: { Chris@0: Chris@0: /** Chris@0: * List of encodings that files may be encoded with. Chris@0: * Chris@0: * Any other detected encodings will throw a warning. Chris@0: * Chris@0: * @var array Chris@0: */ Chris@0: public $allowedEncodings = array('UTF-8'); Chris@0: Chris@0: Chris@0: /** Chris@0: * Returns an array of tokens this test wants to listen for. Chris@0: * Chris@0: * @return array Chris@0: */ Chris@0: public function register() Chris@0: { Chris@0: return array( Chris@0: T_INLINE_HTML, Chris@0: T_OPEN_TAG, Chris@0: ); Chris@0: Chris@0: }//end register() Chris@0: Chris@0: Chris@0: /** Chris@0: * Processes this sniff, when one of its tokens is encountered. Chris@0: * Chris@17: * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned. Chris@17: * @param int $stackPtr The position of the current token in Chris@17: * the stack passed in $tokens. Chris@0: * Chris@0: * @return void Chris@0: */ Chris@17: public function process(File $phpcsFile, $stackPtr) Chris@0: { Chris@0: // Not all PHP installs have the multi byte extension - nothing we can do. Chris@0: if (function_exists('mb_check_encoding') === false) { Chris@0: return $phpcsFile->numTokens; Chris@0: } Chris@0: Chris@0: $fileContent = $phpcsFile->getTokensAsString(0, $phpcsFile->numTokens); Chris@0: Chris@0: $validEncodingFound = false; Chris@0: foreach ($this->allowedEncodings as $encoding) { Chris@0: if (mb_check_encoding($fileContent, $encoding) === true) { Chris@0: $validEncodingFound = true; Chris@0: } Chris@0: } Chris@0: Chris@0: if ($validEncodingFound === false) { Chris@0: $warning = 'File encoding is invalid, expected %s'; Chris@0: $data = array(implode(' or ', $this->allowedEncodings)); Chris@0: $phpcsFile->addWarning($warning, $stackPtr, 'InvalidEncoding', $data); Chris@0: } Chris@0: Chris@0: return $phpcsFile->numTokens; Chris@0: Chris@0: }//end process() Chris@0: Chris@0: Chris@0: }//end class