function AbstractControlStructureSpacing::findControlStructureEnd
1 call to AbstractControlStructureSpacing::findControlStructureEnd()
- AbstractControlStructureSpacing::checkLinesAfter in vendor/
slevomat/ coding-standard/ SlevomatCodingStandard/ Sniffs/ ControlStructures/ AbstractControlStructureSpacing.php
File
-
vendor/
slevomat/ coding-standard/ SlevomatCodingStandard/ Sniffs/ ControlStructures/ AbstractControlStructureSpacing.php, line 386
Class
- AbstractControlStructureSpacing
- @internal
Namespace
SlevomatCodingStandard\Sniffs\ControlStructuresCode
private function findControlStructureEnd(File $phpcsFile, int $controlStructurePointer) : int {
$tokens = $phpcsFile->getTokens();
if ($tokens[$controlStructurePointer]['code'] === T_IF) {
if (!array_key_exists('scope_closer', $tokens[$controlStructurePointer])) {
throw new Exception('"if" without curly braces is not supported.');
}
$pointerAfterParenthesisCloser = TokenHelper::findNextEffective($phpcsFile, $tokens[$controlStructurePointer]['parenthesis_closer'] + 1);
if ($pointerAfterParenthesisCloser !== null && $tokens[$pointerAfterParenthesisCloser]['code'] === T_COLON) {
throw new Exception('"if" without curly braces is not supported.');
}
$controlStructureEndPointer = $tokens[$controlStructurePointer]['scope_closer'];
do {
$nextPointer = TokenHelper::findNextEffective($phpcsFile, $controlStructureEndPointer + 1);
if ($nextPointer === null) {
return $controlStructureEndPointer;
}
if ($tokens[$nextPointer]['code'] === T_ELSE) {
if (!array_key_exists('scope_closer', $tokens[$nextPointer])) {
throw new Exception('"else" without curly braces is not supported.');
}
return $tokens[$nextPointer]['scope_closer'];
}
if ($tokens[$nextPointer]['code'] !== T_ELSEIF) {
return $controlStructureEndPointer;
}
$controlStructureEndPointer = $tokens[$nextPointer]['scope_closer'];
} while (true);
}
if ($tokens[$controlStructurePointer]['code'] === T_DO) {
$whilePointer = TokenHelper::findNext($phpcsFile, T_WHILE, $tokens[$controlStructurePointer]['scope_closer'] + 1);
return (int) TokenHelper::findNext($phpcsFile, T_SEMICOLON, $tokens[$whilePointer]['parenthesis_closer'] + 1);
}
if ($tokens[$controlStructurePointer]['code'] === T_TRY) {
$controlStructureEndPointer = $tokens[$controlStructurePointer]['scope_closer'];
do {
$nextPointer = TokenHelper::findNextEffective($phpcsFile, $controlStructureEndPointer + 1);
if ($nextPointer === null) {
return $controlStructureEndPointer;
}
if (!in_array($tokens[$nextPointer]['code'], [
T_CATCH,
T_FINALLY,
], true)) {
return $controlStructureEndPointer;
}
$controlStructureEndPointer = $tokens[$nextPointer]['scope_closer'];
} while (true);
}
if (in_array($tokens[$controlStructurePointer]['code'], [
T_WHILE,
T_FOR,
T_FOREACH,
T_SWITCH,
], true)) {
return $tokens[$controlStructurePointer]['scope_closer'];
}
if (in_array($tokens[$controlStructurePointer]['code'], [
T_CASE,
T_DEFAULT,
], true)) {
$switchPointer = TokenHelper::findPrevious($phpcsFile, T_SWITCH, $controlStructurePointer - 1);
$pointers = TokenHelper::findNextAll($phpcsFile, [
T_CASE,
T_DEFAULT,
], $controlStructurePointer + 1, $tokens[$switchPointer]['scope_closer']);
foreach ($pointers as $pointer) {
if (TokenHelper::findPrevious($phpcsFile, T_SWITCH, $pointer - 1) === $switchPointer) {
$pointerBeforeCaseOrDefault = TokenHelper::findPreviousNonWhitespace($phpcsFile, $pointer - 1);
if (in_array($tokens[$pointerBeforeCaseOrDefault]['code'], Tokens::$commentTokens, true) && $tokens[$pointerBeforeCaseOrDefault]['line'] + 1 === $tokens[$pointer]['line']) {
$pointerBeforeCaseOrDefault = TokenHelper::findPreviousExcluding($phpcsFile, T_WHITESPACE, $pointerBeforeCaseOrDefault - 1);
}
return $pointerBeforeCaseOrDefault;
}
}
return TokenHelper::findPreviousNonWhitespace($phpcsFile, $tokens[$switchPointer]['scope_closer'] - 1);
}
$nextPointer = TokenHelper::findNext($phpcsFile, [
T_SEMICOLON,
T_ANON_CLASS,
T_CLOSURE,
T_FN,
T_OPEN_SHORT_ARRAY,
], $controlStructurePointer + 1);
if ($tokens[$nextPointer]['code'] === T_SEMICOLON) {
return $nextPointer;
}
$scopeCloserPointer = $tokens[$nextPointer]['code'] === T_OPEN_SHORT_ARRAY ? $tokens[$nextPointer]['bracket_closer'] : $tokens[$nextPointer]['scope_closer'];
if ($tokens[$scopeCloserPointer]['code'] === T_SEMICOLON) {
return $scopeCloserPointer;
}
$nextPointer = TokenHelper::findNext($phpcsFile, T_SEMICOLON, $scopeCloserPointer + 1);
$level = $tokens[$controlStructurePointer]['level'];
while ($level !== $tokens[$nextPointer]['level']) {
$nextPointer = (int) TokenHelper::findNext($phpcsFile, T_SEMICOLON, $nextPointer + 1);
}
return $nextPointer;
}