Created
October 2, 2010 21:28
-
-
Save cbandy/608017 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Kohana_Sniffs_Classes_OpeningBraceBsdAllmanSniff. | |
* | |
* PHP version 5 | |
* | |
* @category PHP | |
* @package PHP_CodeSniffer | |
* @author Greg Sherwood <[email protected]> | |
* @author Marc McIntyre <[email protected]> | |
* @copyright 2006 Squiz Pty Ltd (ABN 77 084 670 600) | |
* @license http://matrix.squiz.net/developer/tools/php_cs/licence BSD Licence | |
* @version CVS: $Id: OpeningFunctionBraceBsdAllmanSniff.php 301632 2010-07-28 01:57:56Z squiz $ | |
* @link http://pear.php.net/package/PHP_CodeSniffer | |
*/ | |
/** | |
* Kohana_Sniffs_Classes_OpeningBraceBsdAllmanSniff. | |
* | |
* Checks that the opening brace of a class is on the line after the function declaration. | |
* | |
* @category PHP | |
* @package PHP_CodeSniffer | |
* @author Greg Sherwood <[email protected]> | |
* @author Marc McIntyre <[email protected]> | |
* @copyright 2006 Squiz Pty Ltd (ABN 77 084 670 600) | |
* @license http://matrix.squiz.net/developer/tools/php_cs/licence BSD Licence | |
* @version Release: 1.3.0RC1 | |
* @link http://pear.php.net/package/PHP_CodeSniffer | |
*/ | |
class Kohana_Sniffs_Classes_OpeningBraceBsdAllmanSniff implements PHP_CodeSniffer_Sniff | |
{ | |
/** | |
* Registers the tokens that this sniff wants to listen for. | |
* | |
* @return array | |
*/ | |
public function register() | |
{ | |
return array(T_CLASS); | |
} | |
/** | |
* Processes this test, when one of its tokens is encountered. | |
* | |
* @param PHP_CodeSniffer_File $phpcsFile The file being scanned. | |
* @param int $stackPtr The position of the current token in the | |
* stack passed in $tokens. | |
* | |
* @return void | |
*/ | |
public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr) | |
{ | |
$tokens = $phpcsFile->getTokens(); | |
$openingBrace = $tokens[$stackPtr]['scope_opener']; | |
$classLine = $tokens[$stackPtr]['line']; | |
$braceLine = $tokens[$openingBrace]['line']; | |
$lineDifference = ($braceLine - $classLine); | |
if ($lineDifference === 0) { | |
$error = 'Opening brace should be on a new line'; | |
$phpcsFile->addError($error, $openingBrace, 'BraceOnSameLine'); | |
return; | |
} | |
if ($lineDifference > 1) { | |
$error = sprintf('Opening brace should be on the line after the declaration; found %s blank line(s)', $lineDifference - 1); | |
$phpcsFile->addError($error, $openingBrace, 'BraceSpacing'); | |
return; | |
} | |
// We need to actually find the first piece of content on this line, | |
// as if this is a method with tokens before it (public, static etc) | |
// or an if with an else before it, then we need to start the scope | |
// checking from there, rather than the current token. | |
$lineStart = $stackPtr; | |
while (($lineStart = $phpcsFile->findPrevious(array(T_WHITESPACE), ($lineStart - 1), null, false)) !== false) { | |
if (strpos($tokens[$lineStart]['content'], $phpcsFile->eolChar) !== false) { | |
break; | |
} | |
} | |
// We found a new line, now go forward and find the first non-whitespace | |
// token. | |
$lineStart = $phpcsFile->findNext(array(T_WHITESPACE), $lineStart, null, true); | |
// The opening brace is on the correct line, now it needs to be | |
// checked to be correctly indented. | |
$startColumn = $tokens[$lineStart]['column']; | |
$braceIndent = $tokens[$openingBrace]['column']; | |
if ($braceIndent !== $startColumn) { | |
$error = sprintf('Opening brace indented incorrectly; expected %s spaces, found %s', $startColumn - 1, $braceIndent - 1); | |
$phpcsFile->addError($error, $openingBrace, 'BraceIndent'); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment