private function getPreviousBlock(Tokens $tokens, $index)
    {
        $close = $previous = $tokens->getPrevMeaningfulToken($index);
        // short 'if' detection
        if ($tokens[$close]->equals('}')) {
            $previous = $tokens->findBlockStart(Tokens::BLOCK_TYPE_CURLY_BRACE, $close);
        }

        $open = $tokens->getPrevTokenOfKind($previous, [[T_IF], [T_ELSE], [T_ELSEIF]]);
        if ($tokens[$open]->isGivenKind(T_IF)) {
            $elseCandidate = $tokens->getPrevMeaningfulToken($open);
            if ($tokens[$elseCandidate]->isGivenKind(T_ELSE)) {
                $open = $elseCandidate;
            }
        }

        return [$open, $close];
    }
private function getPreviousBlock(Tokens $tokens, $index)
    {
        $close = $previous = $tokens->getPrevMeaningfulToken($index);
        // short 'if' detection
        if ($tokens[$close]->equals('}')) {
            $previous = $tokens->findBlockStart(Tokens::BLOCK_TYPE_CURLY_BRACE, $close);
        }

        $open = $tokens->getPrevTokenOfKind($previous, [[T_IF], [T_ELSE], [T_ELSEIF]]);
        if ($tokens[$open]->isGivenKind(T_IF)) {
            $elseCandidate = $tokens->getPrevMeaningfulToken($open);
            if ($tokens[$elseCandidate]->isGivenKind(T_ELSE)) {
                $open = $elseCandidate;
            }
        }

        return [$open, $close];
    }
private function getPreviousBlock ( Tokens $ tokens , $ index ) { $ close = $ previous = $ tokens -> getPrevMeaningfulToken ( $ index ) ; // short 'if' detection if ( $ tokens [ $ close ] -> equals ( '}' ) ) { $ previous = $ tokens -> findBlockStart ( Tokens :: BLOCK_TYPE_CURLY_BRACE , $ close ) ; } $ open = $ tokens -> getPrevTokenOfKind ( $ previous , [ [ T_IF ] , [ T_ELSE ] , [ T_ELSEIF ] ] ) ; if ( $ tokens [ $ open ] -> isGivenKind ( T_IF ) ) { $ elseCandidate = $ tokens -> getPrevMeaningfulToken ( $ open ) ; if ( $ tokens [ $ elseCandidate ] -> isGivenKind ( T_ELSE ) ) { $ open = $ elseCandidate ; } } return [ $ open , $ close ] ; }
Return the first and last token index of the previous block.

[0] First is either T_IF, T_ELSE or T_ELSEIF
[1] Last is either '}' or ';' / T_CLOSE_TAG for short notation blocks

@param Tokens $tokens
@param int    $index  T_IF, T_ELSE, T_ELSEIF

@return int[]
Return the first and last token index of the previous block .