function UnusedVariableSniff::isUsedInLoopCycle
1 call to UnusedVariableSniff::isUsedInLoopCycle()
- UnusedVariableSniff::process in vendor/
slevomat/ coding-standard/ SlevomatCodingStandard/ Sniffs/ Variables/ UnusedVariableSniff.php - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint *
File
-
vendor/
slevomat/ coding-standard/ SlevomatCodingStandard/ Sniffs/ Variables/ UnusedVariableSniff.php, line 377
Class
Namespace
SlevomatCodingStandard\Sniffs\VariablesCode
private function isUsedInLoopCycle(File $phpcsFile, int $variablePointer, string $variableName) : bool {
$tokens = $phpcsFile->getTokens();
$loopPointer = null;
foreach (array_reverse($tokens[$variablePointer]['conditions'], true) as $conditionPointer => $conditionTokenCode) {
if (in_array($conditionTokenCode, TokenHelper::$functionTokenCodes, true)) {
break;
}
if (!in_array($conditionTokenCode, [
T_FOREACH,
T_FOR,
T_DO,
T_WHILE,
], true)) {
continue;
}
$loopPointer = $conditionPointer;
$loopConditionPointer = $conditionTokenCode === T_DO ? TokenHelper::findNextEffective($phpcsFile, $tokens[$loopPointer]['scope_closer'] + 1) : $loopPointer;
$variableUsedInLoopConditionPointer = TokenHelper::findNextContent($phpcsFile, T_VARIABLE, $variableName, $tokens[$loopConditionPointer]['parenthesis_opener'] + 1, $tokens[$loopConditionPointer]['parenthesis_closer']);
if ($variableUsedInLoopConditionPointer === null || $variableUsedInLoopConditionPointer === $variablePointer) {
continue;
}
if ($conditionTokenCode !== T_FOREACH) {
return true;
}
$pointerBeforeVariableUsedInLoopCondition = TokenHelper::findPreviousEffective($phpcsFile, $variableUsedInLoopConditionPointer - 1);
if ($tokens[$pointerBeforeVariableUsedInLoopCondition]['code'] === T_BITWISE_AND) {
return true;
}
}
if ($loopPointer === null) {
return false;
}
for ($i = $tokens[$loopPointer]['scope_opener'] + 1; $i < $tokens[$loopPointer]['scope_closer']; $i++) {
if (in_array($tokens[$i]['code'], [
T_DOUBLE_QUOTED_STRING,
T_HEREDOC,
], true) && VariableHelper::isUsedInScopeInString($phpcsFile, $variableName, $i)) {
return true;
}
if ($tokens[$i]['code'] !== T_VARIABLE) {
continue;
}
if ($tokens[$i]['content'] !== $variableName) {
continue;
}
if (!$this->isAssignment($phpcsFile, $i)) {
return true;
}
$nextPointer = TokenHelper::findNextEffective($phpcsFile, $i + 1);
if (!in_array($tokens[$nextPointer]['code'], [
T_INC,
T_DEC,
T_PLUS_EQUAL,
T_MINUS_EQUAL,
T_MUL_EQUAL,
T_DIV_EQUAL,
T_POW_EQUAL,
T_MOD_EQUAL,
T_AND_EQUAL,
T_OR_EQUAL,
T_XOR_EQUAL,
T_SL_EQUAL,
T_SR_EQUAL,
T_CONCAT_EQUAL,
], true)) {
continue;
}
$parenthesisOwnerPointer = $this->findNestedParenthesisWithOwner($phpcsFile, $i);
if ($parenthesisOwnerPointer !== null && in_array($tokens[$parenthesisOwnerPointer]['code'], [
T_IF,
T_ELSEIF,
], true)) {
return true;
}
}
return false;
}