1<?php 2/** 3 * Generic_Sniffs_PHP_LowerCaseKeywordSniff. 4 * 5 * PHP version 5 6 * 7 * @category PHP 8 * @package PHP_CodeSniffer 9 * @author Greg Sherwood <gsherwood@squiz.net> 10 * @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600) 11 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence 12 * @link http://pear.php.net/package/PHP_CodeSniffer 13 */ 14 15/** 16 * Generic_Sniffs_PHP_LowerCaseKeywordSniff. 17 * 18 * Checks that all PHP keywords are lowercase. 19 * 20 * @category PHP 21 * @package PHP_CodeSniffer 22 * @author Greg Sherwood <gsherwood@squiz.net> 23 * @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600) 24 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence 25 * @version Release: @package_version@ 26 * @link http://pear.php.net/package/PHP_CodeSniffer 27 */ 28class Generic_Sniffs_PHP_LowerCaseKeywordSniff implements PHP_CodeSniffer_Sniff 29{ 30 31 32 /** 33 * Returns an array of tokens this test wants to listen for. 34 * 35 * @return array 36 */ 37 public function register() 38 { 39 return array( 40 T_HALT_COMPILER, 41 T_ABSTRACT, 42 T_ARRAY, 43 T_ARRAY_HINT, 44 T_AS, 45 T_BREAK, 46 T_CALLABLE, 47 T_CASE, 48 T_CATCH, 49 T_CLASS, 50 T_CLONE, 51 T_CONST, 52 T_CONTINUE, 53 T_DECLARE, 54 T_DEFAULT, 55 T_DO, 56 T_ECHO, 57 T_ELSE, 58 T_ELSEIF, 59 T_EMPTY, 60 T_ENDDECLARE, 61 T_ENDFOR, 62 T_ENDFOREACH, 63 T_ENDIF, 64 T_ENDSWITCH, 65 T_ENDWHILE, 66 T_EVAL, 67 T_EXIT, 68 T_EXTENDS, 69 T_FINAL, 70 T_FINALLY, 71 T_FOR, 72 T_FOREACH, 73 T_FUNCTION, 74 T_GLOBAL, 75 T_GOTO, 76 T_IF, 77 T_IMPLEMENTS, 78 T_INCLUDE, 79 T_INCLUDE_ONCE, 80 T_INSTANCEOF, 81 T_INSTEADOF, 82 T_INTERFACE, 83 T_ISSET, 84 T_LIST, 85 T_LOGICAL_AND, 86 T_LOGICAL_OR, 87 T_LOGICAL_XOR, 88 T_NAMESPACE, 89 T_NEW, 90 T_PRINT, 91 T_PRIVATE, 92 T_PROTECTED, 93 T_PUBLIC, 94 T_REQUIRE, 95 T_REQUIRE_ONCE, 96 T_RETURN, 97 T_STATIC, 98 T_SWITCH, 99 T_THROW, 100 T_TRAIT, 101 T_TRY, 102 T_UNSET, 103 T_USE, 104 T_VAR, 105 T_WHILE, 106 ); 107 108 }//end register() 109 110 111 /** 112 * Processes this sniff, when one of its tokens is encountered. 113 * 114 * @param PHP_CodeSniffer_File $phpcsFile The file being scanned. 115 * @param int $stackPtr The position of the current token in the 116 * stack passed in $tokens. 117 * 118 * @return void 119 */ 120 public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr) 121 { 122 $tokens = $phpcsFile->getTokens(); 123 $keyword = $tokens[$stackPtr]['content']; 124 if (strtolower($keyword) !== $keyword) { 125 if ($keyword === strtoupper($keyword)) { 126 $phpcsFile->recordMetric($stackPtr, 'PHP keyword case', 'upper'); 127 } else { 128 $phpcsFile->recordMetric($stackPtr, 'PHP keyword case', 'mixed'); 129 } 130 131 $error = 'PHP keywords must be lowercase; expected "%s" but found "%s"'; 132 $data = array( 133 strtolower($keyword), 134 $keyword, 135 ); 136 137 $fix = $phpcsFile->addFixableError($error, $stackPtr, 'Found', $data); 138 if ($fix === true) { 139 $phpcsFile->fixer->replaceToken($stackPtr, strtolower($keyword)); 140 } 141 } else { 142 $phpcsFile->recordMetric($stackPtr, 'PHP keyword case', 'lower'); 143 } 144 145 }//end process() 146 147 148}//end class 149