ObjectOperatorIndentSniff.php in Coder 7.2
File
coder_sniffer/Drupal/Sniffs/WhiteSpace/ObjectOperatorIndentSniff.phpView source
<?php
/**
* Drupal_Sniffs_WhiteSpace_ObjectOperatorIndentSniff.
*
* PHP version 5
*
* @category PHP
* @package PHP_CodeSniffer
* @author Greg Sherwood <gsherwood@squiz.net>
* @copyright 2006 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
*/
/**
* Drupal_Sniffs_WhiteSpace_ObjectOperatorIndentSniff.
*
* Checks that object operators are indented 2 spaces if they are the first
* thing on a line.
*
* @category PHP
* @package PHP_CodeSniffer
* @author Greg Sherwood <gsherwood@squiz.net>
* @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.2.0RC3
* @link http://pear.php.net/package/PHP_CodeSniffer
*/
class Drupal_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.
$prev = $phpcsFile
->findPrevious(T_WHITESPACE, $stackPtr - 1, null, true);
if ($prev === false || $tokens[$prev]['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 = $stackPtr - 1; $i >= 0; $i--) {
if ($tokens[$i]['line'] !== $tokens[$stackPtr]['line']) {
$i++;
break;
}
}
$requiredIndent = 0;
if ($i >= 0 && $tokens[$i]['code'] === T_WHITESPACE) {
$requiredIndent = strlen($tokens[$i]['content']);
}
$requiredIndent += 2;
// 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.
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;
}
// @todo we have not established a coding standard for this,
// disabled for now.
/*if ($foundIndent !== ($requiredIndent-2)) {
$error = "Object operator not indented correctly; expected $requiredIndent spaces but found $foundIndent";
$phpcsFile->addError($error, $next);
}*/
}
// 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);
}
}
//end if
$next = $phpcsFile
->findNext(T_OBJECT_OPERATOR, $next + 1, null, false, null, true);
}
//end while
}
}
//end class
Classes
Name | Description |
---|---|
Drupal_Sniffs_WhiteSpace_ObjectOperatorIndentSniff | Drupal_Sniffs_WhiteSpace_ObjectOperatorIndentSniff. |