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
|