code: private function getArgumentsInfo(Tokens $tokens, $start, $end)
      {
          $argumentsInfo = [];
  
          for ($index = $start; $index <= $end; ++$index) {
              $token = $tokens[$index];
  
              if (!$token->isGivenKind(T_VARIABLE)) {
                  continue;
              }
  
              $beforeArgumentIndex = $tokens->getPrevTokenOfKind($index, ['(', ',']);
              $typeIndex = $tokens->getNextMeaningfulToken($beforeArgumentIndex);
  
              if ($typeIndex !== $index) {
                  $info = $this->parseTypeHint($tokens, $typeIndex);
              } else {
                  $info = [
                      'type' => null,
                      'allows_null' => true,
                  ];
              }
  
              if (!$info['allows_null']) {
                  $nextIndex = $tokens->getNextMeaningfulToken($index);
                  if (
                      $tokens[$nextIndex]->equals('=')
                      && $tokens[$tokens->getNextMeaningfulToken($nextIndex)]->equals([T_STRING, 'null'])
                  ) {
                      $info['allows_null'] = true;
                  }
              }
  
              $argumentsInfo[$token->getContent()] = $info;
          }
  
          return $argumentsInfo;
      }
docs: @param Tokens $tokens
  @param int    $start
  @param int    $end
  
  @return array<string, array>