code: public function isWhilePartOfDoWhile($index)
      {
          $tokens = $this->tokens;
          $token = $tokens[$index];
  
          if (!$token->isGivenKind(T_WHILE)) {
              throw new \LogicException(sprintf('No T_WHILE at given index %d, got %s.', $index, $token->getName()));
          }
  
          $endIndex = $tokens->getPrevMeaningfulToken($index);
          if (!$tokens[$endIndex]->equals('}')) {
              return false;
          }
  
          $startIndex = $tokens->findBlockStart(Tokens::BLOCK_TYPE_CURLY_BRACE, $endIndex);
          $beforeStartIndex = $tokens->getPrevMeaningfulToken($startIndex);
  
          return $tokens[$beforeStartIndex]->isGivenKind(T_DO);
      }
docs: Check if `T_WHILE` token at given index is `do { ... } while ();` syntax
  and not `while () { ...}`.
  
  @param int $index
  
  @return bool