Initial Commit
This commit is contained in:
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
/**
|
||||
* PEAR_Sniffs_WhiteSpace_ObjectOperatorIndentSniff.
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* @category PHP
|
||||
* @package PHP_CodeSniffer
|
||||
* @author Greg Sherwood <gsherwood@squiz.net>
|
||||
* @copyright 2006-2011 Squiz Pty Ltd (ABN 77 084 670 600)
|
||||
* @license http://matrix.squiz.net/developer/tools/php_cs/licence BSD Licence
|
||||
* @link http://pear.php.net/package/PHP_CodeSniffer
|
||||
*/
|
||||
|
||||
/**
|
||||
* PEAR_Sniffs_WhiteSpace_ObjectOperatorIndentSniff.
|
||||
*
|
||||
* Checks that object operators are indented 4 spaces if they are the first
|
||||
* thing on a line.
|
||||
*
|
||||
* @category PHP
|
||||
* @package PHP_CodeSniffer
|
||||
* @author Greg Sherwood <gsherwood@squiz.net>
|
||||
* @copyright 2006-2011 Squiz Pty Ltd (ABN 77 084 670 600)
|
||||
* @license http://matrix.squiz.net/developer/tools/php_cs/licence BSD Licence
|
||||
* @version Release: 1.3.3
|
||||
* @link http://pear.php.net/package/PHP_CodeSniffer
|
||||
*/
|
||||
class PEAR_Sniffs_WhiteSpace_ObjectOperatorIndentSniff implements PHP_CodeSniffer_Sniff
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* Returns an array of tokens this test wants to listen for.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
return array(T_OBJECT_OPERATOR);
|
||||
|
||||
}//end register()
|
||||
|
||||
|
||||
/**
|
||||
* Processes this test, when one of its tokens is encountered.
|
||||
*
|
||||
* @param PHP_CodeSniffer_File $phpcsFile All the tokens found in the document.
|
||||
* @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();
|
||||
|
||||
// Make sure this is the first object operator in a chain of them.
|
||||
$varToken = $phpcsFile->findPrevious(T_WHITESPACE, ($stackPtr - 1), null, true);
|
||||
if ($varToken === false || $tokens[$varToken]['code'] !== T_VARIABLE) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Make sure this is a chained call.
|
||||
$next = $phpcsFile->findNext(
|
||||
T_OBJECT_OPERATOR,
|
||||
($stackPtr + 1),
|
||||
null,
|
||||
false,
|
||||
null,
|
||||
true
|
||||
);
|
||||
|
||||
if ($next === false) {
|
||||
// Not a chained call.
|
||||
return;
|
||||
}
|
||||
|
||||
// Determine correct indent.
|
||||
for ($i = ($varToken - 1); $i >= 0; $i--) {
|
||||
if ($tokens[$i]['line'] !== $tokens[$varToken]['line']) {
|
||||
$i++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$requiredIndent = 0;
|
||||
if ($i >= 0 && $tokens[$i]['code'] === T_WHITESPACE) {
|
||||
$requiredIndent = strlen($tokens[$i]['content']);
|
||||
}
|
||||
|
||||
$requiredIndent += 4;
|
||||
|
||||
// Determine the scope of the original object operator.
|
||||
$origBrackets = null;
|
||||
if (isset($tokens[$stackPtr]['nested_parenthesis']) === true) {
|
||||
$origBrackets = $tokens[$stackPtr]['nested_parenthesis'];
|
||||
}
|
||||
|
||||
$origConditions = null;
|
||||
if (isset($tokens[$stackPtr]['conditions']) === true) {
|
||||
$origConditions = $tokens[$stackPtr]['conditions'];
|
||||
}
|
||||
|
||||
// Check indentation of each object operator in the chain.
|
||||
// If the first object operator is on a different line than
|
||||
// the variable, make sure we check its indentation too.
|
||||
if ($tokens[$stackPtr]['line'] > $tokens[$varToken]['line']) {
|
||||
$next = $stackPtr;
|
||||
}
|
||||
|
||||
while ($next !== false) {
|
||||
// Make sure it is in the same scope, otherwise dont check indent.
|
||||
$brackets = null;
|
||||
if (isset($tokens[$next]['nested_parenthesis']) === true) {
|
||||
$brackets = $tokens[$next]['nested_parenthesis'];
|
||||
}
|
||||
|
||||
$conditions = null;
|
||||
if (isset($tokens[$next]['conditions']) === true) {
|
||||
$conditions = $tokens[$next]['conditions'];
|
||||
}
|
||||
|
||||
if ($origBrackets === $brackets && $origConditions === $conditions) {
|
||||
// Make sure it starts a line, otherwise dont check indent.
|
||||
$indent = $tokens[($next - 1)];
|
||||
if ($indent['code'] === T_WHITESPACE) {
|
||||
if ($indent['line'] === $tokens[$next]['line']) {
|
||||
$foundIndent = strlen($indent['content']);
|
||||
} else {
|
||||
$foundIndent = 0;
|
||||
}
|
||||
|
||||
if ($foundIndent !== $requiredIndent) {
|
||||
$error = 'Object operator not indented correctly; expected %s spaces but found %s';
|
||||
$data = array(
|
||||
$requiredIndent,
|
||||
$foundIndent,
|
||||
);
|
||||
$phpcsFile->addError($error, $next, 'Incorrect', $data);
|
||||
}
|
||||
}
|
||||
|
||||
// It cant be the last thing on the line either.
|
||||
$content = $phpcsFile->findNext(T_WHITESPACE, ($next + 1), null, true);
|
||||
if ($tokens[$content]['line'] !== $tokens[$next]['line']) {
|
||||
$error = 'Object operator must be at the start of the line, not the end';
|
||||
$phpcsFile->addError($error, $next, 'StartOfLine');
|
||||
}
|
||||
}//end if
|
||||
|
||||
$next = $phpcsFile->findNext(
|
||||
T_OBJECT_OPERATOR,
|
||||
($next + 1),
|
||||
null,
|
||||
false,
|
||||
null,
|
||||
true
|
||||
);
|
||||
}//end while
|
||||
|
||||
}//end process()
|
||||
|
||||
|
||||
}//end class
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
/**
|
||||
* PEAR_Sniffs_Whitespace_ScopeClosingBraceSniff.
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* @category PHP
|
||||
* @package PHP_CodeSniffer
|
||||
* @author Greg Sherwood <gsherwood@squiz.net>
|
||||
* @author Marc McIntyre <mmcintyre@squiz.net>
|
||||
* @copyright 2006-2011 Squiz Pty Ltd (ABN 77 084 670 600)
|
||||
* @license http://matrix.squiz.net/developer/tools/php_cs/licence BSD Licence
|
||||
* @link http://pear.php.net/package/PHP_CodeSniffer
|
||||
*/
|
||||
|
||||
/**
|
||||
* PEAR_Sniffs_Whitespace_ScopeClosingBraceSniff.
|
||||
*
|
||||
* Checks that the closing braces of scopes are aligned correctly.
|
||||
*
|
||||
* @category PHP
|
||||
* @package PHP_CodeSniffer
|
||||
* @author Greg Sherwood <gsherwood@squiz.net>
|
||||
* @author Marc McIntyre <mmcintyre@squiz.net>
|
||||
* @copyright 2006-2011 Squiz Pty Ltd (ABN 77 084 670 600)
|
||||
* @license http://matrix.squiz.net/developer/tools/php_cs/licence BSD Licence
|
||||
* @version Release: 1.3.3
|
||||
* @link http://pear.php.net/package/PHP_CodeSniffer
|
||||
*/
|
||||
class PEAR_Sniffs_WhiteSpace_ScopeClosingBraceSniff implements PHP_CodeSniffer_Sniff
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* Returns an array of tokens this test wants to listen for.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
return PHP_CodeSniffer_Tokens::$scopeOpeners;
|
||||
|
||||
}//end register()
|
||||
|
||||
|
||||
/**
|
||||
* Processes this test, when one of its tokens is encountered.
|
||||
*
|
||||
* @param PHP_CodeSniffer_File $phpcsFile All the tokens found in the document.
|
||||
* @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();
|
||||
|
||||
// If this is an inline condition (ie. there is no scope opener), then
|
||||
// return, as this is not a new scope.
|
||||
if (isset($tokens[$stackPtr]['scope_closer']) === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
$scopeStart = $tokens[$stackPtr]['scope_opener'];
|
||||
$scopeEnd = $tokens[$stackPtr]['scope_closer'];
|
||||
|
||||
// If the scope closer doesn't think it belongs to this scope opener
|
||||
// then the opener is sharing its closer ith other tokens. We only
|
||||
// want to process the closer once, so skip this one.
|
||||
if ($tokens[$scopeEnd]['scope_condition'] !== $stackPtr) {
|
||||
return;
|
||||
}
|
||||
|
||||
// We need to actually find the first piece of content on this line,
|
||||
// because 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 - 1);
|
||||
for ($lineStart; $lineStart > 0; $lineStart--) {
|
||||
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 + 1),
|
||||
null,
|
||||
true
|
||||
);
|
||||
|
||||
$startColumn = $tokens[$lineStart]['column'];
|
||||
|
||||
// Check that the closing brace is on it's own line.
|
||||
$lastContent = $phpcsFile->findPrevious(
|
||||
array(T_WHITESPACE),
|
||||
($scopeEnd - 1),
|
||||
$scopeStart,
|
||||
true
|
||||
);
|
||||
|
||||
if ($tokens[$lastContent]['line'] === $tokens[$scopeEnd]['line']) {
|
||||
$error = 'Closing brace must be on a line by itself';
|
||||
$phpcsFile->addError($error, $scopeEnd, 'Line');
|
||||
return;
|
||||
}
|
||||
|
||||
// Check now that the closing brace is lined up correctly.
|
||||
$braceIndent = $tokens[$scopeEnd]['column'];
|
||||
$isBreakCloser = ($tokens[$scopeEnd]['code'] === T_BREAK);
|
||||
if (in_array($tokens[$stackPtr]['code'], array(T_CASE, T_DEFAULT)) === true
|
||||
&& $isBreakCloser === true
|
||||
) {
|
||||
// BREAK statements should be indented 4 spaces from the
|
||||
// CASE or DEFAULT statement.
|
||||
if ($braceIndent !== ($startColumn + 4)) {
|
||||
$error = 'Break statement indented incorrectly; expected %s spaces, found %s';
|
||||
$data = array(
|
||||
($startColumn + 3),
|
||||
($braceIndent - 1),
|
||||
);
|
||||
$phpcsFile->addError($error, $scopeEnd, 'BreakIdent', $data);
|
||||
}
|
||||
} else {
|
||||
if ($braceIndent !== $startColumn) {
|
||||
$error = 'Closing brace indented incorrectly; expected %s spaces, found %s';
|
||||
$data = array(
|
||||
($startColumn - 1),
|
||||
($braceIndent - 1),
|
||||
);
|
||||
$phpcsFile->addError($error, $scopeEnd, 'Indent', $data);
|
||||
}
|
||||
}
|
||||
|
||||
}//end process()
|
||||
|
||||
|
||||
}//end class
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
/**
|
||||
* PEAR_Sniffs_Whitespace_ScopeIndentSniff.
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* @category PHP
|
||||
* @package PHP_CodeSniffer
|
||||
* @author Greg Sherwood <gsherwood@squiz.net>
|
||||
* @author Marc McIntyre <mmcintyre@squiz.net>
|
||||
* @copyright 2006-2011 Squiz Pty Ltd (ABN 77 084 670 600)
|
||||
* @license http://matrix.squiz.net/developer/tools/php_cs/licence BSD Licence
|
||||
* @link http://pear.php.net/package/PHP_CodeSniffer
|
||||
*/
|
||||
|
||||
if (class_exists('Generic_Sniffs_WhiteSpace_ScopeIndentSniff', true) === false) {
|
||||
$error = 'Class Generic_Sniffs_WhiteSpace_ScopeIndentSniff not found';
|
||||
throw new PHP_CodeSniffer_Exception($error);
|
||||
}
|
||||
|
||||
/**
|
||||
* PEAR_Sniffs_Whitespace_ScopeIndentSniff.
|
||||
*
|
||||
* Checks that control structures are structured correctly, and their content
|
||||
* is indented correctly.
|
||||
*
|
||||
* @category PHP
|
||||
* @package PHP_CodeSniffer
|
||||
* @author Greg Sherwood <gsherwood@squiz.net>
|
||||
* @author Marc McIntyre <mmcintyre@squiz.net>
|
||||
* @copyright 2006-2011 Squiz Pty Ltd (ABN 77 084 670 600)
|
||||
* @license http://matrix.squiz.net/developer/tools/php_cs/licence BSD Licence
|
||||
* @version Release: 1.3.3
|
||||
* @link http://pear.php.net/package/PHP_CodeSniffer
|
||||
*/
|
||||
class PEAR_Sniffs_WhiteSpace_ScopeIndentSniff extends Generic_Sniffs_WhiteSpace_ScopeIndentSniff
|
||||
{
|
||||
|
||||
/**
|
||||
* Any scope openers that should not cause an indent.
|
||||
*
|
||||
* @var array(int)
|
||||
*/
|
||||
protected $nonIndentingScopes = array(T_SWITCH);
|
||||
|
||||
}//end class
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user