* @copyright 2009 Nicolas Connault
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-class moodle_sniffs_codeanalysis_emptystatementsniff implements php_codesniffer_sniff
-{
+class moodle_sniffs_codeanalysis_emptystatementsniff implements php_codesniffer_sniff {
/**
* List of block tokens that this sniff covers.
*
* @return array(integer)
*/
- public function register()
- {
+ public function register() {
return array_keys($this->_tokens);
-
}
*
* @return void
*/
- public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr)
- {
+ public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr) {
$tokens = $phpcsfile->gettokens();
$token = $tokens[$stackptr];
$next = ++$token['scope_opener'];
$end = --$token['scope_closer'];
- $emptyBody = true;
+ $emptybody = true;
+
for (; $next <= $end; ++$next) {
+
if (in_array($tokens[$next]['code'], PHP_CodeSniffer_tokens::$emptyTokens) === false) {
- $emptyBody = false;
+ $emptybody = false;
break;
}
}
- if ($emptyBody === true) {
+ if ($emptybody === true) {
// Get token identifier.
$name = $phpcsfile->gettokensAsString($stackptr, 1);
$error = sprintf('Empty %s statement detected', strtoupper($name));
+
if ($this->_tokens[$token['code']] === true) {
$phpcsfile->adderror($error, $stackptr);
+
} else {
$phpcsfile->addwarning($error, $stackptr);
}
}
-
}
-
-
}
-
-?>
* @copyright 2009 Nicolas Connault
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-class moodle_sniffs_codeanalysis_forloopshouldbewhileloopsniff implements php_codesniffer_sniff
-{
+class moodle_sniffs_codeanalysis_forloopshouldbewhileloopsniff implements php_codesniffer_sniff {
/**
*
* @return array(integer)
*/
- public function register()
- {
+ public function register() {
return array(T_FOR);
-
}
*
* @return void
*/
- public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr)
- {
+ public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr) {
$tokens = $phpcsfile->gettokens();
$token = $tokens[$stackptr];
for (; $next <= $end; ++$next) {
$code = $tokens[$next]['code'];
+
if ($code === T_SEMICOLON) {
++$index;
+
} else if (in_array($code, PHP_CodeSniffer_tokens::$emptyTokens) === false) {
++$parts[$index];
}
$error = 'This FOR loop can be simplified to a WHILE loop';
$phpcsfile->addwarning($error, $stackptr);
}
-
}
-
-
}
-
-?>
* @copyright 2009 Nicolas Connault
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-class moodle_sniffs_codeanalysis_forloopwithtestfunctioncallsniff implements php_codesniffer_sniff
-{
+class moodle_sniffs_codeanalysis_forloopwithtestfunctioncallsniff implements php_codesniffer_sniff {
/**
*
* @return array(integer)
*/
- public function register()
- {
+ public function register() {
return array(T_FOR);
-
}
*
* @return void
*/
- public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr)
- {
+ public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr) {
$tokens = $phpcsfile->gettokens();
$token = $tokens[$stackptr];
for (; $next <= $end; ++$next) {
$code = $tokens[$next]['code'];
+
if ($code === T_SEMICOLON) {
++$position;
}
if ($position < 1) {
continue;
+
} else if ($position > 1) {
break;
+
} else if ($code !== T_VARIABLE && $code !== T_STRING) {
continue;
}
break;
}
}
-
}
-
-
}
-
-?>
* @copyright 2009 Nicolas Connault
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-class moodle_sniffs_codeanalysis_jumbledincrementersniff implements php_codesniffer_sniff
-{
+class moodle_sniffs_codeanalysis_jumbledincrementersniff implements php_codesniffer_sniff {
/**
*
* @return array(integer)
*/
- public function register()
- {
+ public function register() {
return array(T_FOR);
-
}
*
* @return void
*/
- public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr)
- {
+ public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr) {
$tokens = $phpcsfile->gettokens();
$token = $tokens[$stackptr];
}
// Find incrementors for outer loop.
- $outer = $this->findIncrementers($tokens, $token);
+ $outer = $this->findincrementers($tokens, $token);
// Skip if empty.
if (count($outer) === 0) {
$end = --$token['scope_closer'];
for (; $start <= $end; ++$start) {
+
if ($tokens[$start]['code'] !== T_FOR) {
continue;
}
- $inner = $this->findIncrementers($tokens, $tokens[$start]);
+ $inner = $this->findincrementers($tokens, $tokens[$start]);
$diff = array_intersect($outer, $inner);
if (count($diff) !== 0) {
$phpcsfile->addwarning($error, $stackptr);
}
}
-
}
*
* @return array(string) List of all found incrementer variables.
*/
- protected function findIncrementers(array $tokens, array $token)
- {
+ protected function findincrementers(array $tokens, array $token) {
// Skip invalid statement.
if (isset($token['parenthesis_opener']) === false) {
return array();
$incrementers = array();
$semicolons = 0;
+
for ($next = $start; $next <= $end; ++$next) {
$code = $tokens[$next]['code'];
+
if ($code === T_SEMICOLON) {
++$semicolons;
+
} else if ($semicolons === 2 && $code === T_VARIABLE) {
$incrementers[] = $tokens[$next]['content'];
}
return $incrementers;
}
-
-
}
-
-?>
* @copyright 2009 Nicolas Connault
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-class moodle_sniffs_codeanalysis_unconditionalifstatementsniff implements php_codesniffer_sniff
-{
+class moodle_sniffs_codeanalysis_unconditionalifstatementsniff implements php_codesniffer_sniff {
/**
*
* @return array(integer)
*/
- public function register()
- {
- return array(
- T_IF,
- T_ELSEIF,
- );
-
+ public function register() {
+ return array(T_IF, T_ELSEIF);
}
*
* @return void
*/
- public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr)
- {
+ public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr) {
$tokens = $phpcsfile->gettokens();
$token = $tokens[$stackptr];
$next = ++$token['parenthesis_opener'];
$end = --$token['parenthesis_closer'];
- $goodCondition = false;
+ $goodcondition = false;
+
for (; $next <= $end; ++$next) {
$code = $tokens[$next]['code'];
if (in_array($code, PHP_CodeSniffer_tokens::$emptyTokens) === true) {
continue;
+
} else if ($code !== T_TRUE && $code !== T_FALSE) {
- $goodCondition = true;
+ $goodcondition = true;
}
}
- if ($goodCondition === false) {
+ if ($goodcondition === false) {
$error = 'Avoid IF statements that are always true or false';
$phpcsfile->addwarning($error, $stackptr);
}
-
}
-
-
}
-
-?>
* @copyright 2009 Nicolas Connault
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-class moodle_sniffs_codeanalysis_unnecessaryfinalmodifiersniff implements php_codesniffer_sniff
-{
+class moodle_sniffs_codeanalysis_unnecessaryfinalmodifiersniff implements php_codesniffer_sniff {
/**
*
* @return array(integer)
*/
- public function register()
- {
+ public function register() {
return array(T_CLASS);
-
}
*
* @return void
*/
- public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr)
- {
+ public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr) {
$tokens = $phpcsfile->gettokens();
$token = $tokens[$stackptr];
$end = --$token['scope_closer'];
for (; $next <= $end; ++$next) {
+
if ($tokens[$next]['code'] === T_FINAL) {
$error = 'Unnecessary FINAL modifier in FINAL class';
$phpcsfile->addwarning($error, $next);
}
}
-
}
-
-
}
-
-?>
* @copyright 2009 Nicolas Connault
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-class moodle_sniffs_codeanalysis_unusedfunctionparametersniff implements php_codesniffer_sniff
-{
+class moodle_sniffs_codeanalysis_unusedfunctionparametersniff implements php_codesniffer_sniff {
/**
*
* @return array
*/
- public function register()
- {
+ public function register() {
return array(T_FUNCTION);
-
}
*
* @return void
*/
- public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr)
- {
+ public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr) {
$tokens = $phpcsfile->gettokens();
$token = $tokens[$stackptr];
}
$params = array();
+
foreach ($phpcsfile->getmethodparameters($stackptr) as $param) {
$params[$param['name']] = $stackptr;
}
$next = ++$token['scope_opener'];
$end = --$token['scope_closer'];
- $emptyBody = true;
+ $emptybody = true;
for (; $next <= $end; ++$next) {
$token = $tokens[$next];
// Ingorable tokens.
if (in_array($code, PHP_CodeSniffer_tokens::$emptyTokens) === true) {
continue;
- } else if ($code === T_THROW && $emptyBody === true) {
+
+ } else if ($code === T_THROW && $emptybody === true) {
// Throw statement and an empty body indicate an interface method.
return;
- } else if ($code === T_RETURN && $emptyBody === true) {
+
+ } else if ($code === T_RETURN && $emptybody === true) {
// Return statement and an empty body indicate an interface method.
$tmp = $phpcsfile->findnext(PHP_CodeSniffer_tokens::$emptyTokens, ($next + 1), null, true);
+
if ($tmp === false) {
return;
}
}
}
- $emptyBody = false;
+ $emptybody = false;
if ($code === T_VARIABLE && isset($params[$token['content']]) === true) {
unset($params[$token['content']]);
+
} else if ($code === T_DOUBLE_QUOTED_STRING) {
// tokenize double quote string.
$strtokens = token_get_all(sprintf('<?php %s;?>', $token['content']));
foreach ($strtokens as $tok) {
+
if (is_array($tok) === false || $tok[0] !== T_VARIABLE ) {
continue;
}
}
}
- if ($emptyBody === false && count($params) > 0) {
+ if ($emptybody === false && count($params) > 0) {
+
foreach ($params as $paramname => $position) {
$error = 'The method parameter '.$paramname.' is never used';
$phpcsfile->addwarning($error, $position);
}
}
-
}
-
-
}
*
* @return array(integer)
*/
- public function register()
- {
+ public function register() {
return array(T_FUNCTION);
-
}
*
* @return void
*/
- public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr)
- {
+ public function process(PHP_CodeSniffer_File $phpcsfile, $stackptr) {
$tokens = $phpcsfile->gettokens();
$token = $tokens[$stackptr];
}
// Get function name.
- $methodname = $phpcsfile->getDeclarationname($stackptr);
+ $methodname = $phpcsfile->getdeclarationname($stackptr);
// Get all parameters from method signature.
$signature = array();
+
foreach ($phpcsfile->getmethodparameters($stackptr) as $param) {
$signature[] = $param['name'];
}
if (in_array($code, PHP_CodeSniffer_tokens::$emptyTokens) === true) {
continue;
+
} else if ($code === T_RETURN) {
continue;
}
$parameters = array('');
$parenthesiscount = 1;
$count = count($tokens);
+
for (++$next; $next < $count; ++$next) {
$code = $tokens[$next]['code'];
if ($code === T_OPEN_PARENTHESIS) {
++$parenthesiscount;
+
} else if ($code === T_CLOSE_PARENTHESIS) {
--$parenthesiscount;
+
} else if ($parenthesiscount === 1 && $code === T_COMMA) {
$parameters[] = '';
+
} else if (in_array($code, PHP_CodeSniffer_tokens::$emptyTokens) === false) {
$parameters[(count($parameters) - 1)] .= $tokens[$next]['content'];
}
}
$next = $phpcsfile->findnext(PHP_CodeSniffer_tokens::$emptyTokens, ($next + 1), null, true);
+
if ($next === false || $tokens[$next]['code'] !== T_SEMICOLON) {
return;
}
for (++$next; $next <= $end; ++$next) {
$code = $tokens[$next]['code'];
// Skip for any other content.
+
if (in_array($code, PHP_CodeSniffer_tokens::$emptyTokens) === false) {
return;
}
if (count($parameters) === count($signature) && $parameters === $signature) {
$phpcsfile->addwarning('Useless method overriding detected', $stackptr);
}
-
}
-
-
}