1<?php 2/** 3 * Ensures this is not assigned to any other var but self. 4 * 5 * PHP version 5 6 * 7 * @category PHP 8 * @package PHP_CodeSniffer_MySource 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 * Ensures this is not assigned to any other var but self. 17 * 18 * @category PHP 19 * @package PHP_CodeSniffer_MySource 20 * @author Greg Sherwood <gsherwood@squiz.net> 21 * @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600) 22 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence 23 * @version Release: @package_version@ 24 * @link http://pear.php.net/package/PHP_CodeSniffer 25 */ 26class MySource_Sniffs_Objects_AssignThisSniff implements PHP_CodeSniffer_Sniff 27{ 28 29 /** 30 * A list of tokenizers this sniff supports. 31 * 32 * @var array 33 */ 34 public $supportedTokenizers = array('JS'); 35 36 37 /** 38 * Returns an array of tokens this test wants to listen for. 39 * 40 * @return array 41 */ 42 public function register() 43 { 44 return array(T_THIS); 45 46 }//end register() 47 48 49 /** 50 * Processes this test, when one of its tokens is encountered. 51 * 52 * @param PHP_CodeSniffer_File $phpcsFile The file being scanned. 53 * @param int $stackPtr The position of the current token 54 * in the stack passed in $tokens. 55 * 56 * @return void 57 */ 58 public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr) 59 { 60 $tokens = $phpcsFile->getTokens(); 61 62 // Ignore this.something and other uses of "this" that are not 63 // direct assignments. 64 $next = $phpcsFile->findNext(T_WHITESPACE, ($stackPtr + 1), null, true); 65 if ($tokens[$next]['code'] !== T_SEMICOLON) { 66 if ($tokens[$next]['line'] === $tokens[$stackPtr]['line']) { 67 return; 68 } 69 } 70 71 // Something must be assigned to "this". 72 $prev = $phpcsFile->findPrevious(T_WHITESPACE, ($stackPtr - 1), null, true); 73 if ($tokens[$prev]['code'] !== T_EQUAL) { 74 return; 75 } 76 77 // A variable needs to be assigned to "this". 78 $prev = $phpcsFile->findPrevious(T_WHITESPACE, ($prev - 1), null, true); 79 if ($tokens[$prev]['code'] !== T_STRING) { 80 return; 81 } 82 83 // We can only assign "this" to a var called "self". 84 if ($tokens[$prev]['content'] !== 'self' && $tokens[$prev]['content'] !== '_self') { 85 $error = 'Keyword "this" can only be assigned to a variable called "self" or "_self"'; 86 $phpcsFile->addError($error, $prev, 'NotSelf'); 87 } 88 89 }//end process() 90 91 92}//end class 93