1<?php 2/** 3 * Squiz_Sniffs_WhiteSpace_LanguageConstructSpacingSniff. 4 * 5 * PHP version 5 6 * 7 * @category PHP 8 * @package PHP_CodeSniffer 9 * @author Greg Sherwood <gsherwood@squiz.net> 10 * @author Marc McIntyre <mmcintyre@squiz.net> 11 * @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600) 12 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence 13 * @link http://pear.php.net/package/PHP_CodeSniffer 14 */ 15 16/** 17 * Squiz_Sniffs_WhiteSpace_LanguageConstructSpacingSniff. 18 * 19 * Ensures all language constructs (without brackets) contain a 20 * single space between themselves and their content. 21 * 22 * @category PHP 23 * @package PHP_CodeSniffer 24 * @author Greg Sherwood <gsherwood@squiz.net> 25 * @author Marc McIntyre <mmcintyre@squiz.net> 26 * @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600) 27 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence 28 * @version Release: @package_version@ 29 * @link http://pear.php.net/package/PHP_CodeSniffer 30 */ 31class Squiz_Sniffs_WhiteSpace_LanguageConstructSpacingSniff implements PHP_CodeSniffer_Sniff 32{ 33 34 35 /** 36 * Returns an array of tokens this test wants to listen for. 37 * 38 * @return array 39 */ 40 public function register() 41 { 42 return array( 43 T_ECHO, 44 T_PRINT, 45 T_RETURN, 46 T_INCLUDE, 47 T_INCLUDE_ONCE, 48 T_REQUIRE, 49 T_REQUIRE_ONCE, 50 T_NEW, 51 ); 52 53 }//end register() 54 55 56 /** 57 * Processes this test, when one of its tokens is encountered. 58 * 59 * @param PHP_CodeSniffer_File $phpcsFile The file being scanned. 60 * @param int $stackPtr The position of the current token in 61 * the stack passed in $tokens. 62 * 63 * @return void 64 */ 65 public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr) 66 { 67 $tokens = $phpcsFile->getTokens(); 68 69 if ($tokens[($stackPtr + 1)]['code'] === T_SEMICOLON) { 70 // No content for this language construct. 71 return; 72 } 73 74 if ($tokens[($stackPtr + 1)]['code'] === T_WHITESPACE) { 75 $content = $tokens[($stackPtr + 1)]['content']; 76 $contentLength = strlen($content); 77 if ($contentLength !== 1) { 78 $error = 'Language constructs must be followed by a single space; expected 1 space but found %s'; 79 $data = array($contentLength); 80 $fix = $phpcsFile->addFixableError($error, $stackPtr, 'IncorrectSingle', $data); 81 if ($fix === true) { 82 $phpcsFile->fixer->replaceToken(($stackPtr + 1), ' '); 83 } 84 } 85 } else if ($tokens[($stackPtr + 1)]['code'] !== T_OPEN_PARENTHESIS) { 86 $error = 'Language constructs must be followed by a single space; expected "%s" but found "%s"'; 87 $data = array( 88 $tokens[$stackPtr]['content'].' '.$tokens[($stackPtr + 1)]['content'], 89 $tokens[$stackPtr]['content'].$tokens[($stackPtr + 1)]['content'], 90 ); 91 $fix = $phpcsFile->addFixableError($error, $stackPtr, 'Incorrect', $data); 92 if ($fix === true) { 93 $phpcsFile->fixer->addContent($stackPtr, ' '); 94 } 95 }//end if 96 97 }//end process() 98 99 100}//end class 101