code: private function getStructureEnd(Tokens $tokens, $position)
      {
          $initialToken = $tokens[$position];
  
          if ($initialToken->isGivenKind([T_FOR, T_FOREACH, T_WHILE, T_IF, T_ELSEIF, T_SWITCH, T_FUNCTION])) {
              $position = $tokens->findBlockEnd(
                  Tokens::BLOCK_TYPE_PARENTHESIS_BRACE,
                  $tokens->getNextTokenOfKind($position, ['('])
              );
          } elseif ($initialToken->isGivenKind(T_CLASS)) {
              $openParenthesisPosition = $tokens->getNextMeaningfulToken($position);
              if ('(' === $tokens[$openParenthesisPosition]->getContent()) {
                  $position = $tokens->findBlockEnd(
                      Tokens::BLOCK_TYPE_PARENTHESIS_BRACE,
                      $openParenthesisPosition
                  );
              }
          }
  
          $position = $tokens->getNextMeaningfulToken($position);
          if ('{' !== $tokens[$position]->getContent()) {
              return $tokens->getNextTokenOfKind($position, [';']);
          }
  
          $position = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $position);
  
          if ($initialToken->isGivenKind(T_DO)) {
              $position = $tokens->findBlockEnd(
                  Tokens::BLOCK_TYPE_PARENTHESIS_BRACE,
                  $tokens->getNextTokenOfKind($position, ['('])
              );
  
              return $tokens->getNextTokenOfKind($position, [';']);
          }
  
          return $position;
      }
docs: @param Tokens $tokens
  @param int    $position
  
  @return int